Fix #1234: allow to unspecify options and move e2e tests outside core
diff --git a/addons/master/master.go b/addons/master/master.go
index d039cf1..57479f2 100644
--- a/addons/master/master.go
+++ b/addons/master/master.go
@@ -49,11 +49,11 @@
 	// It's enabled by default.
 	IncludeDelegateDependencies *bool `property:"include-delegate-dependencies"`
 	// Name of the configmap that will be used to store the lock. Defaults to "<integration-name>-lock".
-	Configmap string `property:"configmap"`
+	Configmap *string `property:"configmap"`
 	// Label that will be used to identify all pods contending the lock. Defaults to "camel.apache.org/integration".
-	LabelKey string `property:"label-key"`
+	LabelKey *string `property:"label-key"`
 	// Label value that will be used to identify all pods contending the lock. Defaults to the integration name.
-	LabelValue           string `property:"label-value"`
+	LabelValue           *string `property:"label-value"`
 	delegateDependencies []string
 }
 
@@ -103,16 +103,18 @@
 			t.delegateDependencies = findAdditionalDependencies(e, meta)
 		}
 
-		if t.Configmap == "" {
-			t.Configmap = fmt.Sprintf("%s-lock", e.Integration.Name)
+		if t.Configmap == nil {
+			val := fmt.Sprintf("%s-lock", e.Integration.Name)
+			t.Configmap = &val
 		}
 
-		if t.LabelKey == "" {
-			t.LabelKey = "camel.apache.org/integration"
+		if t.LabelKey == nil {
+			val := "camel.apache.org/integration"
+			t.LabelKey = &val
 		}
 
-		if t.LabelValue == "" {
-			t.LabelValue = e.Integration.Name
+		if t.LabelValue == nil {
+			t.LabelValue = &e.Integration.Name
 		}
 	}
 
@@ -159,10 +161,25 @@
 
 		e.Integration.Status.Configuration = append(e.Integration.Status.Configuration,
 			v1.ConfigurationSpec{Type: "property", Value: "customizer.master.enabled=true"},
-			v1.ConfigurationSpec{Type: "property", Value: fmt.Sprintf("customizer.master.configMapName=%s", t.Configmap)},
-			v1.ConfigurationSpec{Type: "property", Value: fmt.Sprintf("customizer.master.labelKey=%s", t.LabelKey)},
-			v1.ConfigurationSpec{Type: "property", Value: fmt.Sprintf("customizer.master.labelValue=%s", t.LabelValue)},
 		)
+
+		if t.Configmap != nil {
+			e.Integration.Status.Configuration = append(e.Integration.Status.Configuration,
+				v1.ConfigurationSpec{Type: "property", Value: fmt.Sprintf("customizer.master.configMapName=%s", *t.Configmap)},
+			)
+		}
+
+		if t.LabelKey != nil {
+			e.Integration.Status.Configuration = append(e.Integration.Status.Configuration,
+				v1.ConfigurationSpec{Type: "property", Value: fmt.Sprintf("customizer.master.labelKey=%s", *t.LabelKey)},
+			)
+		}
+
+		if t.LabelValue != nil {
+			e.Integration.Status.Configuration = append(e.Integration.Status.Configuration,
+				v1.ConfigurationSpec{Type: "property", Value: fmt.Sprintf("customizer.master.labelValue=%s", *t.LabelValue)},
+			)
+		}
 	}
 
 	return nil
diff --git a/e2e/addons_test.go b/e2e/addons_test.go
new file mode 100644
index 0000000..9b1a5a3
--- /dev/null
+++ b/e2e/addons_test.go
@@ -0,0 +1,52 @@
+// +build integration
+
+// To enable compilation of this file in Goland, go to "Settings -> Go -> Vendoring & Build Tags -> Custom Tags" and add "integration"
+
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package e2e
+
+import (
+	"testing"
+	"time"
+
+	. "github.com/onsi/gomega"
+	v1 "k8s.io/api/core/v1"
+)
+
+func TestAddons(t *testing.T) {
+	withNewTestNamespace(t, func(ns string) {
+		Expect(kamel("install", "-n", ns).Execute()).Should(BeNil())
+
+		t.Run("master addon", func(t *testing.T) {
+			RegisterTestingT(t)
+			Expect(kamel("run", "-n", ns, "files/Master.java", "-t", `master.label-key=""`).Execute()).Should(BeNil())
+			Eventually(integrationPodPhase(ns, "master"), 5*time.Minute).Should(Equal(v1.PodRunning))
+			Eventually(integrationLogs(ns, "master"), 1*time.Minute).Should(ContainSubstring("Magicstring!"))
+			Eventually(configMap(ns, "master-lock"), 30*time.Second).ShouldNot(BeNil())
+			// Start a second integration with the same lock (it should not start the route)
+			Expect(kamel("run", "-n", ns, "files/Master.java", "--name", "second",
+				"-t", "master.configmap=master-lock", "-t", `master.label-key=""`).Execute()).Should(BeNil())
+			Eventually(integrationPodPhase(ns, "second"), 5*time.Minute).Should(Equal(v1.PodRunning))
+			Eventually(integrationLogs(ns, "second"), 1*time.Minute).Should(ContainSubstring("started in"))
+			Eventually(integrationLogs(ns, "second"), 30*time.Second).ShouldNot(ContainSubstring("Magicstring!"))
+			Expect(kamel("delete", "--all", "-n", ns).Execute()).Should(BeNil())
+		})
+
+	})
+}
diff --git a/e2e/run_test.go b/e2e/run_test.go
index ba99995..9eb83b6 100644
--- a/e2e/run_test.go
+++ b/e2e/run_test.go
@@ -53,21 +53,6 @@
 			Expect(kamel("delete", "--all", "-n", ns).Execute()).Should(BeNil())
 		})
 
-		t.Run("run java with master", func(t *testing.T) {
-			RegisterTestingT(t)
-			Expect(kamel("run", "-n", ns, "files/Master.java").Execute()).Should(BeNil())
-			Eventually(integrationPodPhase(ns, "master"), 5*time.Minute).Should(Equal(v1.PodRunning))
-			Eventually(integrationLogs(ns, "master"), 1*time.Minute).Should(ContainSubstring("Magicstring!"))
-			Eventually(configMap(ns, "master-lock"), 10*time.Second).ShouldNot(BeNil())
-			// Start a second integration with the same lock (it should not start the route)
-			Expect(kamel("run", "-n", ns, "files/Master.java", "--name", "second",
-				"-t", "master.configmap=master", "-t", "master.label-value=master").Execute()).Should(BeNil())
-			Eventually(integrationPodPhase(ns, "second"), 5*time.Minute).Should(Equal(v1.PodRunning))
-			Eventually(integrationLogs(ns, "second"), 1*time.Minute).Should(ContainSubstring("started in"))
-			Eventually(integrationLogs(ns, "second"), 30*time.Second).ShouldNot(ContainSubstring("Magicstring!"))
-			Expect(kamel("delete", "--all", "-n", ns).Execute()).Should(BeNil())
-		})
-
 		t.Run("run xml", func(t *testing.T) {
 			RegisterTestingT(t)
 			Expect(kamel("run", "-n", ns, "files/xml.xml").Execute()).Should(BeNil())