diff --git a/test/e2e/expansion.go b/test/e2e/expansion.go new file mode 100644 index 00000000000..597c2c24b79 --- /dev/null +++ b/test/e2e/expansion.go @@ -0,0 +1,150 @@ +/* +Copyright 2015 The Kubernetes Authors All rights reserved. + +Licensed 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 ( + "github.com/GoogleCloudPlatform/kubernetes/pkg/api" + "github.com/GoogleCloudPlatform/kubernetes/pkg/client" + "github.com/GoogleCloudPlatform/kubernetes/pkg/util" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Variable Expansion", func() { + var c *client.Client + var ns string + + BeforeEach(func() { + var err error + c, err = loadClient() + Expect(err).NotTo(HaveOccurred()) + ns_, err := createTestingNS("var-expansion", c) + ns = ns_.Name + Expect(err).NotTo(HaveOccurred()) + }) + + AfterEach(func() { + // Clean up the namespace if a non-default one was used + if ns != api.NamespaceDefault { + By("Cleaning up the namespace") + err := c.Namespaces().Delete(ns) + expectNoError(err) + } + }) + + It("should allow composing env vars into new env vars", func() { + podName := "var-expansion-" + string(util.NewUUID()) + pod := &api.Pod{ + ObjectMeta: api.ObjectMeta{ + Name: podName, + Labels: map[string]string{"name": podName}, + }, + Spec: api.PodSpec{ + Containers: []api.Container{ + { + Name: "dapi-container", + Image: "gcr.io/google_containers/busybox", + Command: []string{"sh", "-c", "env"}, + Env: []api.EnvVar{ + { + Name: "FOO", + Value: "foo-value", + }, + { + Name: "BAR", + Value: "bar-value", + }, + { + Name: "FOOBAR", + Value: "$(FOO);;$(BAR)", + }, + }, + }, + }, + RestartPolicy: api.RestartPolicyNever, + }, + } + + testContainerOutputInNamespace("env composition", c, pod, 0, []string{ + "FOO=foo-value", + "BAR=bar-value", + "FOOBAR=foo-value;;bar-value", + }, ns) + }) + + It("should allow substituting values in a container's command", func() { + podName := "var-expansion-" + string(util.NewUUID()) + pod := &api.Pod{ + ObjectMeta: api.ObjectMeta{ + Name: podName, + Labels: map[string]string{"name": podName}, + }, + Spec: api.PodSpec{ + Containers: []api.Container{ + { + Name: "dapi-container", + Image: "gcr.io/google_containers/busybox", + Command: []string{"sh", "-c", "TEST_VAR=wrong echo \"$(TEST_VAR)\""}, + Env: []api.EnvVar{ + { + Name: "TEST_VAR", + Value: "test-value", + }, + }, + }, + }, + RestartPolicy: api.RestartPolicyNever, + }, + } + + testContainerOutputInNamespace("substitution in container's command", c, pod, 0, []string{ + "test-value", + }, ns) + }) + + It("should allow substituting values in a container's args", func() { + podName := "var-expansion-" + string(util.NewUUID()) + pod := &api.Pod{ + ObjectMeta: api.ObjectMeta{ + Name: podName, + Labels: map[string]string{"name": podName}, + }, + Spec: api.PodSpec{ + Containers: []api.Container{ + { + Name: "dapi-container", + Image: "gcr.io/google_containers/busybox", + Command: []string{"sh", "-c"}, + Args: []string{"TEST_VAR=wrong echo \"$(TEST_VAR)\""}, + Env: []api.EnvVar{ + { + Name: "TEST_VAR", + Value: "test-value", + }, + }, + }, + }, + RestartPolicy: api.RestartPolicyNever, + }, + } + + testContainerOutputInNamespace("substitution in container's args", c, pod, 0, []string{ + "test-value", + }, ns) + }) +})