newContainer("outer container", noneFlag, newBef("outer bef A", false), newJusBef("outer jusbef A", false), newAft("outer aft A", false), ), newContainer("inner container", noneFlag, newBef("inner bef A", false), newJusBef("inner jusbef A", false), newAft("inner aft A", false), ), ), true, ) spec.Run(buffer) Ω(buffer).Should(gbytes.Say(`\[BeforeEach\] outer container`)) Ω(buffer).Should(gbytes.Say(`\[BeforeEach\] inner container`)) Ω(buffer).Should(gbytes.Say(`\[JustBeforeEach\] outer container`)) Ω(buffer).Should(gbytes.Say(`\[JustBeforeEach\] inner container`)) Ω(buffer).Should(gbytes.Say(`\[It\] it node`)) Ω(buffer).Should(gbytes.Say(`\[AfterEach\] inner container`)) Ω(buffer).Should(gbytes.Say(`\[AfterEach\] outer container`)) }) It("should emit progress to the writer as it runs Befores, JustBefores, Afters, and Measures", func() { spec = New( newMeasure("measure node", noneFlag, false, 2), containers(), true, ) spec.Run(buffer)
pathToTest = tmpPath("progress") copyIn("progress_fixture", pathToTest) }) JustBeforeEach(func() { session = startGinkgo(pathToTest, args...) Eventually(session).Should(gexec.Exit(0)) }) Context("with the -progress flag, but no -v flag", func() { BeforeEach(func() { args = append(args, "-progress") }) It("should not emit progress", func() { Ω(session).ShouldNot(gbytes.Say("[bB]efore")) }) }) Context("with the -v flag", func() { BeforeEach(func() { args = append(args, "-v") }) It("should not emit progress", func() { Ω(session).ShouldNot(gbytes.Say(`\[BeforeEach\]`)) Ω(session).Should(gbytes.Say(`>outer before<`)) }) }) Context("with the -progress flag and the -v flag", func() {
}) }) Context("when told to randomizeSuites", func() { BeforeEach(func() { pathToTest = tmpPath("ginkgo") otherPathToTest := tmpPath("other") copyIn("passing_ginkgo_tests", pathToTest) copyIn("more_ginkgo_tests", otherPathToTest) }) It("should skip packages that match the regexp", func() { session := startGinkgo(tmpDir, "--noColor", "--randomizeSuites", "-r", "--seed=2") Eventually(session).Should(gexec.Exit(0)) Ω(session).Should(gbytes.Say("More_ginkgo_tests Suite")) Ω(session).Should(gbytes.Say("Passing_ginkgo_tests Suite")) session = startGinkgo(tmpDir, "--noColor", "--randomizeSuites", "-r", "--seed=3") Eventually(session).Should(gexec.Exit(0)) Ω(session).Should(gbytes.Say("Passing_ginkgo_tests Suite")) Ω(session).Should(gbytes.Say("More_ginkgo_tests Suite")) }) }) Context("when pointed at a package with xunit style tests", func() { BeforeEach(func() { pathToTest = tmpPath("xunit") copyIn("xunit_tests", pathToTest) })
ghttp.CombineHandlers( ghttp.VerifyRequest("GET", "/v1/images/id-1/json"), http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { w.Header().Add("X-Docker-Size", "789") w.Write([]byte(`{"id":"layer-1","parent":"parent-1","Config":{"Cmd":["-bazbot","-foobar"],"Entrypoint":["/dockerapp","-t"],"WorkingDir":"/workdir"}}`)) // give the tests time to send signals, while the builder is "working" time.Sleep(2 * time.Second) }), ), ) }) JustBeforeEach(func() { session = setupBuilder() Eventually(session.Out, 30).Should(gbytes.Say("Staging process started ...")) }) Context("and builder is interrupted", func() { JustBeforeEach(func() { session.Interrupt() }) It("processes the signal and exits", func() { Eventually(session).Should(gexec.Exit(2)) }) }) Context("and docker is killed", func() { JustBeforeEach(func() { cmd := exec.Command("/usr/bin/killall", "docker")
} }) It("should be set up correctly", func() { session = startGinkgoWithGopath("-r") Eventually(session).Should(gexec.Exit(0)) Ω(session.Out.Contents()).Should(ContainSubstring("A Suite")) Ω(session.Out.Contents()).Should(ContainSubstring("B Suite")) Ω(session.Out.Contents()).Should(ContainSubstring("C Suite")) Ω(session.Out.Contents()).Should(ContainSubstring("Ginkgo ran 3 suites")) }) Context("when watching just one test suite", func() { It("should immediately run, and should rerun when the test suite changes", func() { session = startGinkgoWithGopath("watch", "-succinct", pathA) Eventually(session).Should(gbytes.Say("A Suite")) modifyCode("A") Eventually(session).Should(gbytes.Say("Detected changes in")) Eventually(session).Should(gbytes.Say("A Suite")) session.Kill().Wait() }) }) Context("when watching several test suites", func() { It("should not immediately run, but should rerun a test when its code changes", func() { session = startGinkgoWithGopath("watch", "-succinct", "-r") Eventually(session).Should(gbytes.Say("Identified 3 test suites")) Consistently(session).ShouldNot(gbytes.Say("A Suite|B Suite|C Suite")) modifyCode("A") Eventually(session).Should(gbytes.Say("Detected changes in")) Eventually(session).Should(gbytes.Say("A Suite"))
} }) AfterEach(func() { os.RemoveAll(appDir) }) JustBeforeEach(func() { var err error session, err = gexec.Start(launcherCmd, GinkgoWriter, GinkgoWriter) Expect(err).NotTo(HaveOccurred()) }) var ItExecutesTheCommandWithTheRightEnvironment = func() { It("executes the start command", func() { Eventually(session).Should(gbytes.Say("running app")) }) It("executes the start command with $HOME as the given dir", func() { Eventually(session).Should(gbytes.Say("HOME=" + appDir)) }) It("executes the start command with $TMPDIR as the given dir + /tmp", func() { Eventually(session).Should(gbytes.Say("TMPDIR=" + appDir + "/tmp")) }) It("executes with the environment of the caller", func() { Eventually(session).Should(gbytes.Say("CALLERENV=some-value")) }) It("changes to the workdir when running", func() {
Ω(output).Should(ContainSubstring("Compiling passing_ginkgo_tests")) Ω(output).Should(ContainSubstring("compiled passing_ginkgo_tests.test")) }) It("should build a test binary", func() { _, err := os.Stat(filepath.Join(pathToTest, "passing_ginkgo_tests.test")) Ω(err).ShouldNot(HaveOccurred()) }) It("should be possible to run the test binary directly", func() { cmd := exec.Command("./passing_ginkgo_tests.test") cmd.Dir = pathToTest session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter) Ω(err).ShouldNot(HaveOccurred()) Eventually(session).Should(gexec.Exit(0)) Ω(session).Should(gbytes.Say("Running Suite: Passing_ginkgo_tests Suite")) }) It("should be possible to run the test binary via ginkgo", func() { session := startGinkgo(pathToTest, "./passing_ginkgo_tests.test") Eventually(session).Should(gexec.Exit(0)) Ω(session).Should(gbytes.Say("Running Suite: Passing_ginkgo_tests Suite")) }) It("should be possible to run the test binary in parallel", func() { session := startGinkgo(pathToTest, "--nodes=4", "--noColor", "./passing_ginkgo_tests.test") Eventually(session).Should(gexec.Exit(0)) Ω(session).Should(gbytes.Say("Running Suite: Passing_ginkgo_tests Suite")) Ω(session).Should(gbytes.Say("Running in parallel across 4 nodes")) }) })
. "github.com/cloudfoundry-incubator/docker_app_lifecycle/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/writer" . "github.com/cloudfoundry-incubator/docker_app_lifecycle/Godeps/_workspace/src/github.com/onsi/gomega" ) var _ = Describe("Writer", func() { var writer *Writer var out *gbytes.Buffer BeforeEach(func() { out = gbytes.NewBuffer() writer = New(out) }) It("should stream directly to the outbuffer by default", func() { writer.Write([]byte("foo")) Ω(out).Should(gbytes.Say("foo")) }) It("should not emit the header when asked to DumpOutWitHeader", func() { writer.Write([]byte("foo")) writer.DumpOutWithHeader("my header") Ω(out).ShouldNot(gbytes.Say("my header")) Ω(out).Should(gbytes.Say("foo")) }) Context("when told not to stream", func() { BeforeEach(func() { writer.SetStream(false) }) It("should only write to the buffer when told to DumpOut", func() {
args = append(args, "-dockerPassword", dockerPassword) } if len(dockerEmail) > 0 { args = append(args, "-dockerEmail", dockerEmail) } builderCmd = exec.Command(builderPath, args...) builderCmd.Env = os.Environ() }) Context("when running the main", func() { Context("with no docker image arg specified", func() { It("should exit with an error", func() { session := setupBuilder() Eventually(session.Err).Should(gbytes.Say("missing flag: dockerImageURL or dockerRef required")) Eventually(session).Should(gexec.Exit(1)) }) }) Context("with an invalid output path", func() { It("should exit with an error", func() { session := setupBuilder() Eventually(session).Should(gexec.Exit(1)) }) }) Context("with an invalid docker registry addesses", func() { var invalidRegistryAddress string Context("when an address has a scheme", func() {
BeforeEach(func() { //we need to signal the actual process, so we must compile the test first var err error cmd := exec.Command("go", "test", "-c") cmd.Dir = pathToTest session, err = gexec.Start(cmd, GinkgoWriter, GinkgoWriter) Ω(err).ShouldNot(HaveOccurred()) Eventually(session).Should(gexec.Exit(0)) //then run the compiled test directly cmd = exec.Command("./hanging.test", "--test.v=true", "--ginkgo.noColor") cmd.Dir = pathToTest session, err = gexec.Start(cmd, GinkgoWriter, GinkgoWriter) Ω(err).ShouldNot(HaveOccurred()) Eventually(session).Should(gbytes.Say("Sleeping...")) session.Interrupt() Eventually(session, 1000).Should(gexec.Exit(1)) }) It("should emit the contents of the GinkgoWriter", func() { Ω(session).Should(gbytes.Say("Just beginning")) Ω(session).Should(gbytes.Say("Almost there...")) Ω(session).Should(gbytes.Say("Hanging Out")) }) It("should run the AfterSuite", func() { Ω(session).Should(gbytes.Say("Heading Out After Suite")) }) }) })