var ( currentApp models.Application ) BeforeEach(func() { requirementsFactory.NewLoginRequirementReturns(requirements.Passing{}) requirementsFactory.NewTargetedSpaceRequirementReturns(requirements.Passing{}) currentApp = models.Application{} currentApp.Name = "my-app" currentApp.State = "started" currentApp.GUID = "my-app-guid" currentApp.EnableSSH = true currentApp.Diego = true applicationReq := new(requirementsfakes.FakeApplicationRequirement) applicationReq.GetApplicationReturns(currentApp) requirementsFactory.NewApplicationRequirementReturns(applicationReq) }) Describe("Error getting required info to run ssh", func() { var ( testServer *httptest.Server handler *testnet.TestHandler ) AfterEach(func() { testServer.Close() }) Context("error when getting SSH info from /v2/info", func() { BeforeEach(func() {
BeforeEach(func() { ui = &testterm.FakeUI{} appInstancesRepo = new(appinstancesfakes.FakeAppInstancesRepository) config = testconfig.NewRepositoryWithDefaults() requirementsFactory = new(requirementsfakes.FakeFactory) requirementsFactory.NewLoginRequirementReturns(requirements.Passing{}) requirementsFactory.NewTargetedSpaceRequirementReturns(requirements.Passing{}) application = models.Application{} application.Name = "my-app" application.GUID = "my-app-guid" application.InstanceCount = 1 applicationReq := new(requirementsfakes.FakeApplicationRequirement) applicationReq.GetApplicationReturns(application) requirementsFactory.NewApplicationRequirementReturns(applicationReq) }) updateCommandDependency := func(pluginCall bool) { deps.UI = ui deps.Config = config deps.RepoLocator = deps.RepoLocator.SetAppInstancesRepository(appInstancesRepo) commandregistry.Commands.SetCommand(commandregistry.Commands.FindCommand("restart-app-instance").SetDependency(deps, pluginCall)) } runCommand := func(args ...string) bool { return testcmd.RunCLICommand("restart-app-instance", args, requirementsFactory, updateCommandDependency, false, ui) } Describe("requirements", func() {
cmd = &route.MapRoute{} cmd.SetDependency(deps, false) flagContext = flags.NewFlagContext(cmd.MetaData().Flags) factory = new(requirementsfakes.FakeFactory) loginRequirement = &passingRequirement{Name: "login-requirement"} factory.NewLoginRequirementReturns(loginRequirement) applicationRequirement = new(requirementsfakes.FakeApplicationRequirement) factory.NewApplicationRequirementReturns(applicationRequirement) fakeApplication := models.Application{} fakeApplication.GUID = "fake-app-guid" applicationRequirement.GetApplicationReturns(fakeApplication) domainRequirement = new(requirementsfakes.FakeDomainRequirement) factory.NewDomainRequirementReturns(domainRequirement) fakeDomain = models.DomainFields{ GUID: "fake-domain-guid", Name: "fake-domain-name", } domainRequirement.GetDomainReturns(fakeDomain) minAPIVersionRequirement = &passingRequirement{Name: "min-api-version-requirement"} factory.NewMinAPIVersionRequirementReturns(minAPIVersionRequirement) diegoApplicationRequirement = new(requirementsfakes.FakeDiegoApplicationRequirement) factory.NewDiegoApplicationRequirementReturns(diegoApplicationRequirement)
}) It("returns a ApplicationRequirement", func() { Expect(reqFactory.NewApplicationRequirementCallCount()).To(Equal(1)) Expect(actualRequirements).To(ContainElement(applicationRequirement)) }) }) }) Describe("Execute", func() { var executeCmdErr error BeforeEach(func() { applicationRequirement.GetApplicationReturns(models.Application{ ApplicationFields: models.ApplicationFields{ Name: "my-app", GUID: "my-app-guid", }, }) err := flagContext.Parse("my-app") Expect(err).NotTo(HaveOccurred()) }) JustBeforeEach(func() { executeCmdErr = cmd.Execute(flagContext) }) Context("when no events exist", func() { BeforeEach(func() { eventsRepo.RecentEventsReturns([]models.EventFields{}, nil)
getAppSummaryModel = applicationFromSummary.ToModel() appInstanceFields = []models.AppInstanceFields{ { State: models.InstanceRunning, Details: "fake-instance-details", Since: time.Date(2015, time.November, 19, 1, 1, 17, 0, time.UTC), CPUUsage: float64(0.25), DiskUsage: int64(1 * formatters.GIGABYTE), DiskQuota: int64(2 * formatters.GIGABYTE), MemUsage: int64(24 * formatters.MEGABYTE), MemQuota: int64(32 * formatters.MEGABYTE), }, } applicationRequirement.GetApplicationReturns(getApplicationModel) appSummaryRepo.GetSummaryReturns(getAppSummaryModel, getAppSummaryErr) appInstancesRepo.GetInstancesReturns(appInstanceFields, nil) }) JustBeforeEach(func() { err = cmd.Execute(flagContext) }) It("gets the application summary", func() { Expect(err).NotTo(HaveOccurred()) Expect(appSummaryRepo.GetSummaryCallCount()).To(Equal(1)) }) It("gets the app instances", func() { Expect(err).NotTo(HaveOccurred())
cmd.PingerThrottle = 10 * time.Millisecond commandregistry.Register(cmd) return testcmd.RunCLICommandWithoutDependency("start", args, requirementsFactory, ui) } startAppWithInstancesAndErrors := func(app models.Application, requirementsFactory *requirementsfakes.FakeFactory) (*testterm.FakeUI, *applicationsfakes.FakeRepository, *appinstancesfakes.FakeAppInstancesRepository) { appRepo.UpdateReturns(app, nil) appRepo.ReadReturns(app, nil) appRepo.GetAppReturns(app, nil) appInstancesRepo.GetInstancesStub = getInstance args := []string{"my-app"} applicationReq := new(requirementsfakes.FakeApplicationRequirement) applicationReq.GetApplicationReturns(app) requirementsFactory.NewApplicationRequirementReturns(applicationReq) callStart(args) return ui, appRepo, appInstancesRepo } It("fails requirements when not logged in", func() { requirementsFactory.NewLoginRequirementReturns(requirements.Failing{Message: "not logged in"}) Expect(callStart([]string{"some-app-name"})).To(BeFalse()) }) It("fails requirements when a space is not targeted", func() { requirementsFactory.NewLoginRequirementReturns(requirements.Passing{}) requirementsFactory.NewTargetedSpaceRequirementReturns(requirements.Failing{Message: "not targeting space"})