|  | package integration_test | 
|  |  | 
|  | import ( | 
|  | "os/exec" | 
|  |  | 
|  | . "github.com/onsi/ginkgo" | 
|  | . "github.com/onsi/gomega" | 
|  | "github.com/onsi/gomega/gbytes" | 
|  | "github.com/onsi/gomega/gexec" | 
|  | ) | 
|  |  | 
|  | var _ = Describe("Interrupt", func() { | 
|  | var pathToTest string | 
|  | BeforeEach(func() { | 
|  | pathToTest = tmpPath("hanging") | 
|  | copyIn("hanging_suite", pathToTest) | 
|  | }) | 
|  |  | 
|  | Context("when interrupting a suite", func() { | 
|  | var session *gexec.Session | 
|  | 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")) | 
|  | }) | 
|  | }) | 
|  | }) |