func writeLogsUntilInterrupted(interrupt chan struct{}, randomMessage string, logWriterAppName string) { defer GinkgoRecover() for { select { case <-interrupt: return default: helpers.CurlAppWithTimeout(Config, logWriterAppName, "/log/"+randomMessage, Config.DefaultTimeoutDuration()) time.Sleep(3 * time.Second) } } }
BeforeEach(func() { appName = generator.PrefixedRandomName("CATS-APP-") Expect(cf.Cf("push", appName, "--no-start", "-b", config.RubyBuildpackName, "-m", DEFAULT_MEMORY_LIMIT, "-p", assets.NewAssets().Dora, "-d", config.AppsDomain).Wait(DEFAULT_TIMEOUT)).To(Exit(0)) app_helpers.SetBackend(appName) Expect(cf.Cf("start", appName).Wait(CF_PUSH_TIMEOUT)).To(Exit(0)) }) AfterEach(func() { app_helpers.AppReport(appName, DEFAULT_TIMEOUT) Expect(cf.Cf("delete", appName, "-f", "-r").Wait(DEFAULT_TIMEOUT)).Should(Exit(0)) }) It("doesn't die when printing 32MB", func() { beforeId := helpers.CurlApp(appName, "/id") Expect(helpers.CurlAppWithTimeout(appName, "/logspew/32000", LONG_CURL_TIMEOUT)). To(ContainSubstring("Just wrote 32000 kbytes to the log")) // Give time for components (i.e. Warden) to react to the output // and potentially make bad decisions (like killing the app) time.Sleep(10 * time.Second) afterId := helpers.CurlApp(appName, "/id") Expect(beforeId).To(Equal(afterId)) }) })
. "github.com/onsi/gomega/gexec" "github.com/cloudfoundry-incubator/cf-test-helpers/cf" "github.com/cloudfoundry-incubator/cf-test-helpers/helpers" ) var _ = Describe("An application printing a bunch of output", func() { BeforeEach(func() { Eventually(pushNora(appName), CF_PUSH_TIMEOUT).Should(Succeed()) enableDiego(appName) Eventually(runCf("start", appName), CF_PUSH_TIMEOUT).Should(Succeed()) }) AfterEach(func() { Eventually(cf.Cf("logs", appName, "--recent")).Should(Exit()) Eventually(cf.Cf("delete", appName, "-f")).Should(Exit(0)) }) It("doesn't die when printing 32MB", func() { beforeId := helpers.CurlApp(appName, "/id") Expect(helpers.CurlAppWithTimeout(appName, "/logspew/32000", DEFAULT_TIMEOUT)). To(ContainSubstring("Just wrote 32000 kbytes to the log")) Consistently(func() string { return helpers.CurlApp(appName, "/id") }, "10s").Should(Equal(beforeId)) }) })
AfterEach(func() { Eventually(cf.Cf("delete", appName, "-f"), DEFAULT_TIMEOUT).Should(Exit(0), "Failed to delete app") if serviceName != "" { Eventually(cf.Cf("delete-service", serviceName, "-f"), DEFAULT_TIMEOUT).Should(Exit(0), "Failed to delete service") } Eventually(cf.Cf("delete-orphaned-routes", "-f"), CF_PUSH_TIMEOUT).Should(Exit(0), "Failed to delete orphaned routes") drainListener.Stop() }) It("forwards app messages to registered syslog drains", func() { randomMessage := "random-message-" + generator.RandomName() Eventually(func() bool { helpers.CurlAppWithTimeout(appName, "/log/"+randomMessage, DEFAULT_TIMEOUT) return drainListener.DidReceive(randomMessage) }, 90, 1).Should(BeTrue(), "Never received "+randomMessage+" on syslog drain listener") }) }) }) type syslogDrainListener struct { sync.Mutex port int listener net.Listener receivedMessages string } func (s *syslogDrainListener) StartListener() { listenAddress := fmt.Sprintf(":%d", s.port)
BeforeEach(func() { appName = random_name.CATSRandomName("APP") Expect(cf.Cf("push", appName, "--no-start", "-b", Config.GetRubyBuildpackName(), "-m", DEFAULT_MEMORY_LIMIT, "-p", assets.NewAssets().Dora, "-d", Config.GetAppsDomain()).Wait(Config.DefaultTimeoutDuration())).To(Exit(0)) app_helpers.SetBackend(appName) Expect(cf.Cf("start", appName).Wait(Config.CfPushTimeoutDuration())).To(Exit(0)) }) AfterEach(func() { app_helpers.AppReport(appName, Config.DefaultTimeoutDuration()) Expect(cf.Cf("delete", appName, "-f", "-r").Wait(Config.DefaultTimeoutDuration())).Should(Exit(0)) }) It("doesn't die when printing 32MB", func() { beforeId := helpers.CurlApp(Config, appName, "/id") Expect(helpers.CurlAppWithTimeout(Config, appName, "/logspew/32000", Config.LongCurlTimeoutDuration())). To(ContainSubstring("Just wrote 32000 kbytes to the log")) // Give time for components (i.e. Warden) to react to the output // and potentially make bad decisions (like killing the app) time.Sleep(10 * time.Second) afterId := helpers.CurlApp(Config, appName, "/id") Expect(beforeId).To(Equal(afterId)) }) })
Eventually(runCf("stop", appName)).Should(Succeed()) Eventually(helpers.CurlingAppRoot(appName)).Should(ContainSubstring("404")) }) By("setting an environment variable", func() { Eventually(runCf("set-env", appName, "FOO", "bar")).Should(Succeed()) }) By("starting it", func() { Eventually(runCf("start", appName), CF_PUSH_TIMEOUT).Should(Succeed()) Eventually(helpers.CurlingAppRoot(appName)).Should(ContainSubstring("hello i am nora")) }) By("checking custom env variables are available", func() { Eventually(func() string { return helpers.CurlAppWithTimeout(appName, "/env/FOO", 30*time.Second) }).Should(ContainSubstring("bar")) }) By("scaling it", func() { Eventually(runCf("scale", appName, "-i", "2")).Should(Succeed()) Eventually(apps).Should(Say("2/2")) Expect(cf.Cf("app", appName).Wait()).ToNot(Say("insufficient resources")) }) By("restarting an instance", func() { idsBefore := reportedIDs(2) Expect(len(idsBefore)).To(Equal(2)) Eventually(cf.Cf("restart-app-instance", appName, "1")).Should(Exit(0)) Eventually(func() []string { return differentIDsFrom(idsBefore)