cellBID string cellBExecutorAddr string cellBRepAddr string cellARepRunner *ginkgomon.Runner cellBRepRunner *ginkgomon.Runner cellA ifrit.Process cellB ifrit.Process processGuid string appId string ) BeforeEach(func() { processGuid = helpers.GenerateGuid() appId = helpers.GenerateGuid() fileServer, fileServerStaticDir := componentMaker.FileServer() runtime = ginkgomon.Invoke(grouper.NewParallel(os.Kill, grouper.Members{ {"router", componentMaker.Router()}, {"file-server", fileServer}, {"converger", componentMaker.Converger("-convergeRepeatInterval", "1s")}, {"auctioneer", componentMaker.Auctioneer()}, {"route-emitter", componentMaker.RouteEmitter()}, })) cellAID = "cell-a" cellBID = "cell-b"
{"converger", componentMaker.Converger()}, } cellProcess = ginkgomon.Invoke(grouper.NewParallel(os.Interrupt, cellGroup)) Eventually(receptorClient.Cells).Should(HaveLen(1)) }) AfterEach(func() { helpers.StopProcesses(cellProcess) }) Describe("Running a task", func() { var guid string BeforeEach(func() { guid = helpers.GenerateGuid() }) It("runs the command as a specific user", func() { taskRequest := helpers.TaskCreateRequest( guid, &models.RunAction{ User: "******", Path: "sh", Args: []string{"-c", `[ $(whoami) = testuser ]`}, }, ) taskRequest.Privileged = true err := receptorClient.CreateTask(taskRequest) Expect(err).NotTo(HaveOccurred())
cellProcess = ginkgomon.Invoke(grouper.NewParallel(os.Kill, grouper.Members{ {"rep", componentMaker.Rep("-memoryMB", "1024")}, })) auctioneerProcess = ginkgomon.Invoke(componentMaker.Auctioneer()) }) Context("and a standard Task is desired", func() { var taskGuid string var taskSleepSeconds int var taskRequest receptor.TaskCreateRequest BeforeEach(func() { taskSleepSeconds = 10 taskGuid = helpers.GenerateGuid() taskRequest = helpers.TaskCreateRequestWithMemory( taskGuid, &models.RunAction{ User: "******", Path: "sh", Args: []string{ "-c", // sleep a bit so that we can make assertions around behavior as it's running fmt.Sprintf("curl %s; sleep %d", inigo_announcement_server.AnnounceURL(taskGuid), taskSleepSeconds), }, }, 512, ) })
touch $1/compiled touch $2/inserted-into-artifacts-cache `}, { Name: "bin/release", Body: `#!/bin/sh cat <<EOF --- default_process_types: web: the-start-command EOF `}, } BeforeEach(func() { appId = helpers.GenerateGuid() taskId = helpers.GenerateGuid() fileServer, dir := componentMaker.FileServer() fileServerStaticDir = dir fakeCC = componentMaker.FakeCC() cell = ginkgomon.Invoke(grouper.NewParallel(os.Kill, grouper.Members{ {"rep", componentMaker.Rep("-memoryMB=1024")}, })) brain = ginkgomon.Invoke(grouper.NewParallel(os.Kill, grouper.Members{ {"bbs", componentMaker.BBS()}, {"receptor", componentMaker.Receptor()}, {"auctioneer", componentMaker.Auctioneer()},
{"router", componentMaker.Router()}, {"route-emitter", componentMaker.RouteEmitter()}, })) }) AfterEach(func() { helpers.StopProcesses(runtime) }) Context("when a task that tries to do privileged things is requested", func() { var taskRequest receptor.TaskCreateRequest BeforeEach(func() { taskRequest = helpers.TaskCreateRequest( helpers.GenerateGuid(), &models.RunAction{ Path: "sh", // always run as root; tests change task-level privileged User: "******", Args: []string{ "-c", // writing to /proc/sysrq-trigger requires full privileges; // h is a safe thing to write "echo h > /proc/sysrq-trigger", }, }, ) }) JustBeforeEach(func() {
guid, fmt.Sprintf("http://%s/v1/static/%s", componentMaker.Addresses.FileServer, "droplet.zip"), componentMaker.DefaultStack(), appId, ) desireURL := urljoiner.Join("http://"+componentMaker.Addresses.NsyncListener, "v1", "apps", guid) request, err := http.NewRequest("PUT", desireURL, strings.NewReader(desireMessage)) Expect(err).NotTo(HaveOccurred()) request.Header.Set("Content-Type", "application/json") return http.DefaultClient.Do(request) } BeforeEach(func() { appId = helpers.GenerateGuid() fileServer, fileServerStaticDir := componentMaker.FileServer() runtime = ginkgomon.Invoke(grouper.NewParallel(os.Kill, grouper.Members{ {"bbs", componentMaker.BBS()}, {"receptor", componentMaker.Receptor()}, {"rep", componentMaker.Rep()}, {"auctioneer", componentMaker.Auctioneer()}, {"route-emitter", componentMaker.RouteEmitter()}, {"converger", componentMaker.Converger()}, {"router", componentMaker.Router()}, {"file-server", fileServer}, })) bridge = ginkgomon.Invoke(grouper.NewParallel(os.Kill, grouper.Members{
. "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("LRP", func() { var ( processGuid string archiveFiles []archive_helper.ArchiveFile fileServerStaticDir string runtime ifrit.Process ) BeforeEach(func() { processGuid = helpers.GenerateGuid() var fileServer ifrit.Runner fileServer, fileServerStaticDir = componentMaker.FileServer() runtime = ginkgomon.Invoke(grouper.NewParallel(os.Kill, grouper.Members{ {"router", componentMaker.Router()}, {"file-server", fileServer}, {"rep", componentMaker.Rep()}, {"converger", componentMaker.Converger()}, {"auctioneer", componentMaker.Auctioneer()}, {"route-emitter", componentMaker.RouteEmitter()}, })) archiveFiles = fixtures.GoServerApp() })