func doTest(bldPrefix, bldName, debugStr string, same bool, oc *exutil.CLI) { // corrupt the builder image exutil.CorruptImage(fullImageName, corruptor) // kick off the app/lang build and verify the builder image accordingly exutil.StartBuild(bldPrefix, oc) exutil.WaitForBuild(debugStr, bldName, oc) if same { exutil.VerifyImagesSame(fullImageName, corruptor, debugStr) } else { exutil.VerifyImagesDifferent(fullImageName, corruptor, debugStr) } // reset corrupted tagging for next test exutil.ResetImage(resetData) // dump tags/hexids for debug exutil.DumpAndReturnTagging(tags) }
g.By("starting a build from an existing binary build") br, err = exutil.StartBuildAndWait(oc, "sample-build-binary", fmt.Sprintf("--from-build=%s", "sample-build-binary-1")) o.Expect(br.StartBuildErr).To(o.HaveOccurred()) o.Expect(br.StartBuildStdErr).To(o.ContainSubstring("has no valid source inputs")) }) }) g.Describe("cancelling build started by oc start-build --wait", func() { g.It("should start a build and wait for the build to cancel", func() { g.By("starting the build with --wait flag") var wg sync.WaitGroup wg.Add(1) go func() { defer g.GinkgoRecover() defer wg.Done() _, stderr, err := exutil.StartBuild(oc, "sample-build", "--wait") o.Expect(err).To(o.HaveOccurred()) o.Expect(stderr).Should(o.ContainSubstring(`status is "Cancelled"`)) }() g.By("getting the build name") var buildName string wait.Poll(time.Duration(100*time.Millisecond), 1*time.Minute, func() (bool, error) { out, err := oc.Run("get"). Args("build", "--template", "{{ (index .items 0).metadata.name }}").Output() // Give it second chance in case the build resource was not created yet if err != nil || len(out) == 0 { return false, nil } buildName = out
g.Describe("build configuration with Parallel build run policy", func() { g.It("runs the builds in parallel", func() { g.By("starting multiple builds") var ( startedBuilds []string counter int ) bcName := "sample-parallel-build" buildWatch, err := oc.Client().Builds(oc.Namespace()).Watch(kapi.ListOptions{ LabelSelector: buildutil.BuildConfigSelector(bcName), }) defer buildWatch.Stop() // Start first build stdout, _, err := exutil.StartBuild(oc, bcName, "-o=name") o.Expect(err).NotTo(o.HaveOccurred()) o.Expect(strings.TrimSpace(stdout)).ShouldNot(o.HaveLen(0)) // extract build name from "build/buildName" resource id startedBuilds = append(startedBuilds, strings.TrimSpace(strings.Split(stdout, "/")[1])) // Wait for it to become running for { event := <-buildWatch.ResultChan() build := event.Object.(*buildapi.Build) o.Expect(buildutil.IsBuildComplete(build)).Should(o.BeFalse()) if build.Name == startedBuilds[0] && build.Status.Phase == buildapi.BuildPhaseRunning { break } }
g.AfterEach(func() { exutil.ResetImage(resetData) }) g.JustBeforeEach(func() { g.By("waiting for builder service account") err := exutil.WaitForBuilderAccount(oc.KubeREST().ServiceAccounts(oc.Namespace())) o.Expect(err).NotTo(o.HaveOccurred()) }) g.Context("\n FORCE PULL TEST: when s2i force pull is false and the image is bad", func() { g.It("\n FORCE PULL TEST s2i false", func() { fpFalseS2I := exutil.FixturePath("fixtures", "forcepull-false-s2i.json") g.By(fmt.Sprintf("\n%s FORCE PULL TEST s2i false: calling create on %s", time.Now().Format(time.RFC850), fpFalseS2I)) exutil.StartBuild(fpFalseS2I, buildPrefix, oc) exutil.WaitForBuild("FORCE PULL TEST s2i false: ", buildName, oc) exutil.VerifyImagesSame(s2iDockBldr, custBldr, "FORCE PULL TEST s2i false: ") }) }) g.Context("\n FORCE PULL TEST: when s2i force pull is true and the image is bad", func() { g.It("\n FORCE PULL TEST s2i true", func() { fpTrueS2I := exutil.FixturePath("fixtures", "forcepull-true-s2i.json") g.By(fmt.Sprintf("\n%s FORCE PULL TEST s2i true: calling create on %s", time.Now().Format(time.RFC850), fpTrueS2I)) exutil.StartBuild(fpTrueS2I, buildPrefix, oc) exutil.WaitForBuild("FORCE PULL TEST s2i true: ", buildName, oc)
var oc = exutil.NewCLI("forcepull", exutil.KubeConfigPath()) g.BeforeEach(func() { g.By("refresh corruptor, prep forcepull builder") exutil.PullImage(corruptor, dockerClient.AuthConfiguration{}) exutil.DumpImage(corruptor) // create the image streams and build configs for a test case specific builders setupPath := exutil.FixturePath("testdata", "forcepull-setup.json") err := exutil.CreateResource(setupPath, oc) // kick off the build for the new builder image just for force pull so we can corrupt them without conflicting with // any other tests potentially running in parallel exutil.StartBuild(bldrPrefix, oc) err = exutil.WaitForBuild("bldr build: ", bldrPrefix, bldrPrefix+"-1", oc) o.Expect(err).NotTo(o.HaveOccurred()) serviceIP, err := oc.Run("get").Args("svc", "docker-registry", "-n", "default", "--config", exutil.KubeConfigPath()).Template("{{.spec.clusterIP}}").Output() o.Expect(err).NotTo(o.HaveOccurred()) port, err := oc.Run("get").Args("svc", "docker-registry", "-n", "default", "--config", exutil.KubeConfigPath()).Template("{{ $x := index .spec.ports 0}}{{$x.port}}").Output() o.Expect(err).NotTo(o.HaveOccurred()) g.By(fmt.Sprintf("docker-registry service IP is %s and port %s ", serviceIP, port)) // get the auth so we can pull the build image from the internal docker registry since the builder controller will remove it // from the docker daemon cache when the docker build completes; authCfg, err = exutil.BuildAuthConfiguration(serviceIP+":"+port, oc) // now actually pull the image back in from the openshift internal docker registry fullImageName = authCfg.ServerAddress + "/" + oc.Namespace() + "/" + bldr
g.By("waiting for builder service account") err := exutil.WaitForBuilderAccount(oc.KubeREST().ServiceAccounts(oc.Namespace())) o.Expect(err).NotTo(o.HaveOccurred()) oc.Run("create").Args("-f", buildFixture).Execute() }) g.Describe("oc delete buildconfig", func() { g.It("should start builds and delete the buildconfig", func() { var ( err error builds [4]string ) g.By("starting multiple builds") for i := range builds { stdout, _, err := exutil.StartBuild(oc, "sample-build", "-o=name") o.Expect(err).NotTo(o.HaveOccurred()) builds[i] = stdout } g.By("deleting the buildconfig") err = oc.Run("delete").Args("bc/sample-build").Execute() o.Expect(err).NotTo(o.HaveOccurred()) g.By("waiting for builds to clear") err = wait.Poll(3*time.Second, 3*time.Minute, func() (bool, error) { out, err := oc.Run("get").Args("-o", "name", "builds").Output() o.Expect(err).NotTo(o.HaveOccurred()) if len(out) == 0 { return true, nil }