// verifyTestSuitePreconditions ensures that all namespaces prefixed with 'e2e-' have their // service accounts in the privileged and anyuid SCCs, and that Origin/Kubernetes synthetic // skip labels are applied func verifyTestSuitePreconditions() { desc := ginkgo.CurrentGinkgoTestDescription() switch { case strings.Contains(desc.FileName, "/origin/test/"): if strings.Contains(config.GinkgoConfig.SkipString, "[Origin]") { ginkgo.Skip("skipping [Origin] tests") } case strings.Contains(desc.FileName, "/kubernetes/test/e2e/"): if strings.Contains(config.GinkgoConfig.SkipString, "[Kubernetes]") { ginkgo.Skip("skipping [Kubernetes] tests") } e2e.Logf("About to run a Kube e2e test, ensuring namespace is privileged") c, _, err := configapi.GetKubeClient(KubeConfigPath()) if err != nil { FatalErr(err) } namespaces, err := c.Namespaces().List(kapi.ListOptions{}) if err != nil { FatalErr(err) } // add to the "privileged" scc to ensure pods that explicitly // request extra capabilities are not rejected addE2EServiceAccountsToSCC(c, namespaces, "privileged") // add to the "anyuid" scc to ensure pods that don't specify a // uid don't get forced into a range (mimics upstream // behavior) addE2EServiceAccountsToSCC(c, namespaces, "anyuid") } }
// ensureKubeE2EPrivilegedSA ensures that all namespaces prefixed with 'e2e-' have their // service accounts in the privileged and anyuid SCCs func ensureKubeE2EPrivilegedSA() { desc := ginkgo.CurrentGinkgoTestDescription() if strings.Contains(desc.FileName, "/kubernetes/test/e2e/") { e2e.Logf("About to run a Kube e2e test, ensuring namespace is privileged") c, _, err := configapi.GetKubeClient(KubeConfigPath()) if err != nil { FatalErr(err) } namespaces, err := c.Namespaces().List(kapi.ListOptions{}) if err != nil { FatalErr(err) } // add to the "privileged" scc to ensure pods that explicitly // request extra capabilities are not rejected addE2EServiceAccountsToSCC(c, namespaces, "privileged") // add to the "anyuid" scc to ensure pods that don't specify a // uid don't get forced into a range (mimics upstream // behavior) addE2EServiceAccountsToSCC(c, namespaces, "anyuid") } }
// ensureKubeE2EPrivilegedSA ensures that all namespaces prefixed with 'e2e-' have their // service accounts in the privileged SCC func ensureKubeE2EPrivilegedSA() { desc := ginkgo.CurrentGinkgoTestDescription() if strings.Contains(desc.FileName, "/kubernetes/test/e2e/") { e2e.Logf("About to run a Kube e2e test, ensuring namespace is privileged") c, _, err := configapi.GetKubeClient(KubeConfigPath()) if err != nil { FatalErr(err) } priv, err := c.SecurityContextConstraints().Get("privileged") if err != nil { if apierrs.IsNotFound(err) { return } FatalErr(err) } namespaces, err := c.Namespaces().List(labels.Everything(), fields.Everything()) if err != nil { FatalErr(err) } groups := []string{} for _, name := range priv.Groups { if !strings.Contains(name, "e2e-") { groups = append(groups, name) } } for _, ns := range namespaces.Items { if strings.HasPrefix(ns.Name, "e2e-") { groups = append(groups, fmt.Sprintf("system:serviceaccounts:%s", ns.Name)) } } priv.Groups = groups if _, err := c.SecurityContextConstraints().Update(priv); err != nil { FatalErr(err) } } }
deploymentFixture = exutil.FixturePath("testdata", "test-deployment-test.yaml") simpleDeploymentFixture = exutil.FixturePath("testdata", "deployment-simple.yaml") customDeploymentFixture = exutil.FixturePath("testdata", "custom-deployment.yaml") generationFixture = exutil.FixturePath("testdata", "generation-test.yaml") pausedDeploymentFixture = exutil.FixturePath("testdata", "paused-deployment.yaml") failedHookFixture = exutil.FixturePath("testdata", "failing-pre-hook.yaml") brokenDeploymentFixture = exutil.FixturePath("testdata", "test-deployment-broken.yaml") historyLimitedDeploymentFixture = exutil.FixturePath("testdata", "deployment-history-limit.yaml") minReadySecondsFixture = exutil.FixturePath("testdata", "deployment-min-ready-seconds.yaml") multipleICTFixture = exutil.FixturePath("testdata", "deployment-example.yaml") tagImagesFixture = exutil.FixturePath("testdata", "tag-images-deployment.yaml") ) g.Describe("when run iteratively", func() { g.AfterEach(func() { failureTrap(oc, "deployment-simple", g.CurrentGinkgoTestDescription().Failed) }) g.It("should only deploy the last deployment [Conformance]", func() { _, err := oc.Run("create").Args("-f", simpleDeploymentFixture).Output() o.Expect(err).NotTo(o.HaveOccurred()) iterations := 15 for i := 0; i < iterations; i++ { if rand.Float32() < 0.2 { time.Sleep(time.Duration(rand.Float32() * rand.Float32() * float32(time.Second))) } switch n := rand.Float32(); { case n < 0.4: // trigger a new deployment
func testNameContains(name string) bool { return strings.Contains(ginkgo.CurrentGinkgoTestDescription().FullTestText, name) }
// TODO: Use either explicit tags (k8s.io) or https://github.com/onsi/ginkgo/pull/228 to implement this. // isPackage determines wether the test is in a package. Ideally would be implemented in ginkgo. func isPackage(pkg string) bool { return strings.Contains(ginkgo.CurrentGinkgoTestDescription().FileName, pkg) }
func isKubernetesE2ETest() bool { return strings.Contains(ginkgo.CurrentGinkgoTestDescription().FileName, "/kubernetes/test/e2e/") }
func isOriginTest() bool { return strings.Contains(ginkgo.CurrentGinkgoTestDescription().FileName, "/origin/test/") }
var _ = g.Describe("deploymentconfigs", func() { defer g.GinkgoRecover() var ( oc = exutil.NewCLI("cli-deployment", exutil.KubeConfigPath()) deploymentFixture = exutil.FixturePath("testdata", "test-deployment-test.yaml") simpleDeploymentFixture = exutil.FixturePath("testdata", "deployment-simple.yaml") customDeploymentFixture = exutil.FixturePath("testdata", "custom-deployment.yaml") generationFixture = exutil.FixturePath("testdata", "test-deployment.yaml") pausedDeploymentFixture = exutil.FixturePath("testdata", "paused-deployment.yaml") failedHookFixture = exutil.FixturePath("testdata", "failing-pre-hook.yaml") brokenDeploymentFixture = exutil.FixturePath("testdata", "test-deployment-broken.yaml") ) g.Describe("when run iteratively", func() { g.AfterEach(func() { if !g.CurrentGinkgoTestDescription().Failed { return } if dc, rcs, pods, err := deploymentInfo(oc, "deployment-simple"); err == nil { e2e.Logf("DC: %#v", dc) e2e.Logf(" RCs: %#v", rcs) p, _ := deploymentPods(pods) for k, v := range p { for _, pod := range v { e2e.Logf(" Deployer: %s %#v", k, pod) } } } })