func makeAppWithOptions(appName string) models.Application { application := models.Application{} application.Name = appName application.Guid = "app-guid" application.Command = "run main.go" application.BuildpackUrl = "go-buildpack" domain := models.DomainFields{} domain.Name = "example.com" route := models.RouteSummary{Host: "foo", Domain: domain} secondRoute := models.RouteSummary{Host: appName, Domain: domain} packgeUpdatedAt, _ := time.Parse("2006-01-02T15:04:05Z07:00", "2012-10-24T19:54:00Z") application.State = "started" application.InstanceCount = 2 application.RunningInstances = 2 application.Memory = 256 application.HealthCheckTimeout = 100 application.Routes = []models.RouteSummary{route, secondRoute} application.PackageUpdatedAt = &packgeUpdatedAt envMap := make(map[string]interface{}) envMap["foo"] = "bar" application.EnvironmentVars = envMap application.Services = append(application.Services, models.ServicePlanSummary{ Guid: "", Name: "server1", }) return application }
func makeAppWithRoute(appName string) models.Application { application := models.Application{} application.Name = appName application.Guid = "app-guid" domain := models.DomainFields{} domain.Name = "example.com" route := models.RouteSummary{Host: "foo", Domain: domain} secondRoute := models.RouteSummary{Host: appName, Domain: domain} packgeUpdatedAt, _ := time.Parse("2006-01-02T15:04:05Z07:00", "2012-10-24T19:54:00Z") application.State = "started" application.InstanceCount = 2 application.RunningInstances = 2 application.Memory = 256 application.Stack = &models.Stack{ Name: "fake_stack", Guid: "123-123-123", } application.Routes = []models.RouteSummary{route, secondRoute} application.PackageUpdatedAt = &packgeUpdatedAt return application }
func makeAppWithoutOptions(appName string) models.Application { application := models.Application{} application.Name = appName application.Guid = "app-guid" packgeUpdatedAt, _ := time.Parse("2006-01-02T15:04:05Z07:00", "2012-10-24T19:54:00Z") application.State = "started" application.InstanceCount = 2 application.RunningInstances = 2 application.Memory = 256 application.PackageUpdatedAt = &packgeUpdatedAt return application }
func makeAppWithRoute(appName string) models.Application { application := models.Application{} application.Name = appName application.Guid = "app-guid" application.BuildpackUrl = "http://123.com" application.Command = "command1" application.Diego = false application.DetectedStartCommand = "detected_command" application.DiskQuota = 100 application.EnvironmentVars = map[string]interface{}{"test": 123} application.RunningInstances = 2 application.HealthCheckTimeout = 100 application.SpaceGuid = "guids_in_spaaace" application.PackageState = "STAGED" application.StagingFailedReason = "no reason" application.State = "started" application.InstanceCount = 2 application.RunningInstances = 2 application.Memory = 256 t := time.Date(2009, time.November, 10, 15, 0, 0, 0, time.UTC) application.PackageUpdatedAt = &t services := models.ServicePlanSummary{ Guid: "s1-guid", Name: "s1-service", } application.Services = []models.ServicePlanSummary{services} domain := models.DomainFields{Guid: "domain1-guid", Name: "example.com", OwningOrganizationGuid: "org-123", Shared: true} route := models.RouteSummary{Host: "foo", Guid: "foo-guid", Domain: domain} secondRoute := models.RouteSummary{Host: appName, Domain: domain} application.Stack = &models.Stack{ Name: "fake_stack", Guid: "123-123-123", } application.Routes = []models.RouteSummary{route, secondRoute} return application }
func makeAppWithRoute(appName string) models.Application { application := models.Application{} application.Name = appName application.Guid = "app-guid" domain := models.DomainFields{} domain.Name = "example.com" route := models.RouteSummary{Host: "foo", Domain: domain} secondRoute := models.RouteSummary{Host: appName, Domain: domain} application.State = "started" application.InstanceCount = 2 application.RunningInstances = 2 application.Memory = 256 application.Routes = []models.RouteSummary{route, secondRoute} return application }
func makeAppWithMultipleEnvVars(appName string) models.Application { application := models.Application{} application.Name = appName application.Guid = "app-guid" packgeUpdatedAt, _ := time.Parse("2006-01-02T15:04:05Z07:00", "2012-10-24T19:54:00Z") application.State = "started" application.InstanceCount = 2 application.RunningInstances = 2 application.Memory = 256 application.PackageUpdatedAt = &packgeUpdatedAt envMap := make(map[string]interface{}) envMap["foo"] = bool(true) envMap["abc"] = "abc" envMap["xyz"] = bool(false) envMap["bar"] = float64(10) application.EnvironmentVars = envMap return application }
It("should output whatever greg sez", func() { runCommand("my-app") Expect(ui.Outputs).To(ContainSubstrings( []string{"last uploaded", "unknown"}, )) }) }) }) Describe("when the app is not running", func() { BeforeEach(func() { application := models.Application{} application.Name = "my-app" application.Guid = "my-app-guid" application.State = "stopped" application.InstanceCount = 2 application.RunningInstances = 0 application.Memory = 256 now := time.Now() application.PackageUpdatedAt = &now appSummaryRepo.GetSummarySummary = application requirementsFactory.Application = application updateCommandDependency(false) }) It("displays nice output when the app is stopped", func() { appSummaryRepo.GetSummaryErrorCode = errors.APP_STOPPED
}) }) }) Describe("ssh", func() { 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 )
Describe("updating applications", func() { It("makes the right request", func() { ts, handler, repo := createAppRepo([]testnet.TestRequest{updateApplicationRequest}) defer ts.Close() app := models.Application{} app.Guid = "my-app-guid" app.Name = "my-cool-app" app.BuildpackUrl = "buildpack-url" app.Command = "some-command" app.HealthCheckType = "none" app.Memory = 2048 app.InstanceCount = 3 app.Stack = &models.Stack{Guid: "some-stack-guid"} app.SpaceGuid = "some-space-guid" app.State = "started" app.DiskQuota = 512 Expect(app.EnvironmentVars).To(BeNil()) updatedApp, apiErr := repo.Update(app.Guid, app.ToParams()) Expect(handler).To(HaveAllRequestsCalled()) Expect(apiErr).NotTo(HaveOccurred()) Expect(updatedApp.Command).To(Equal("some-command")) Expect(updatedApp.DetectedStartCommand).To(Equal("detected command")) Expect(updatedApp.Name).To(Equal("my-cool-app")) Expect(updatedApp.Guid).To(Equal("my-cool-app-guid")) }) It("sets environment variables", func() { request := testapi.NewCloudControllerTestRequest(testnet.TestRequest{
Host: "app1", Domain: models.DomainFields{ Name: "example.com", }, }} app2Routes := []models.RouteSummary{ { Host: "app2", Domain: models.DomainFields{Name: "cfapps.io"}, }} app := models.Application{} app.Name = "Application-1" app.GUID = "Application-1-guid" app.State = "started" app.RunningInstances = 1 app.InstanceCount = 1 app.Memory = 512 app.DiskQuota = 1024 app.Routes = app1Routes app.AppPorts = []int{8080, 9090} app2 := models.Application{} app2.Name = "Application-2" app2.GUID = "Application-2-guid" app2.State = "started" app2.RunningInstances = 1 app2.InstanceCount = 2 app2.Memory = 256 app2.DiskQuota = 1024
It("fails requirements when a space is not targeted", func() { requirementsFactory.NewLoginRequirementReturns(requirements.Passing{}) requirementsFactory.NewTargetedSpaceRequirementReturns(requirements.Failing{Message: "not targeting space"}) Expect(runCommand("some-app-name")).To(BeFalse()) }) Context("when logged in and an app exists", func() { BeforeEach(func() { requirementsFactory.NewLoginRequirementReturns(requirements.Passing{}) requirementsFactory.NewTargetedSpaceRequirementReturns(requirements.Passing{}) app = models.Application{} app.Name = "my-app" app.GUID = "my-app-guid" app.State = "started" }) JustBeforeEach(func() { appRepo.ReadReturns(app, nil) applicationReq := new(requirementsfakes.FakeApplicationRequirement) applicationReq.GetApplicationReturns(app) requirementsFactory.NewApplicationRequirementReturns(applicationReq) }) It("fails with usage when the app name is not given", func() { runCommand() Expect(ui.Outputs()).To(ContainSubstrings( []string{"Incorrect Usage", "Requires an argument"}, )) })
var opts *options.SSHOptions BeforeEach(func() { opts = &options.SSHOptions{ AppName: "app-1", } }) JustBeforeEach(func() { connectErr = secureShell.Connect(opts) }) Context("when the app model and endpoint info are successfully acquired", func() { BeforeEach(func() { token = "" currentApp.State = "STARTED" currentApp.Diego = true }) Context("when the app is not in the 'STARTED' state", func() { BeforeEach(func() { currentApp.State = "STOPPED" currentApp.Diego = true }) It("returns an error", func() { Expect(connectErr).To(MatchError(MatchRegexp("Application.*not in the STARTED state"))) }) }) Context("when the app is not a Diego app", func() {
Expect(updatedAppEnvVars["foo"]).To(Equal("manchu")) Expect(updatedAppEnvVars["PATH"]).To(Equal("/u/apps/my-app/bin")) }) It("stops the app, achieving a full-downtime deploy!", func() { appRepo.UpdateAppResult = existingApp callPush("existing-app") Expect(stopper.AppToStop.Guid).To(Equal(existingApp.Guid)) appGuid, _, _ := actor.UploadAppArgsForCall(0) Expect(appGuid).To(Equal(existingApp.Guid)) }) It("does not stop the app when it is already stopped", func() { existingApp.State = "stopped" appRepo.ReadReturns.App = existingApp appRepo.UpdateAppResult = existingApp callPush("existing-app") Expect(stopper.AppToStop.Guid).To(Equal("")) }) It("updates the app", func() { existingRoute := models.RouteSummary{} existingRoute.Host = "existing-app" existingApp.Routes = []models.RouteSummary{existingRoute} appRepo.ReadReturns.App = existingApp appRepo.UpdateAppResult = existingApp
requirementsFactory.Application = app ui := callStop(args, requirementsFactory, appRepo) Expect(ui.Outputs).To(ContainSubstrings( []string{"Stopping", "my-app"}, []string{"FAILED"}, []string{"Error updating app."}, )) Expect(appRepo.UpdateAppGuid).To(Equal("my-app-guid")) }) It("warns the user when the app is already stopped", func() { app := models.Application{} app.Name = "my-app" app.Guid = "my-app-guid" app.State = "stopped" appRepo := &testapi.FakeApplicationRepository{} appRepo.ReadReturns.App = app args := []string{"my-app"} requirementsFactory.Application = app ui := callStop(args, requirementsFactory, appRepo) Expect(ui.Outputs).To(ContainSubstrings([]string{"my-app", "is already stopped"})) Expect(appRepo.UpdateAppGuid).To(Equal("")) }) It("returns the updated app model from ApplicationStop()", func() { appToStop := models.Application{} appToStop.Name = "my-app" appToStop.Guid = "my-app-guid"
// Commented to hide app-ports for release #117189491 // []string{"app ports: 8080, 9090"}, []string{"usage: 1G x 1 instances"}, []string{"urls: fake-route-host.fake-route-domain-name"}, []string{"last uploaded: Thu Nov 19 01:00:15 UTC 2015"}, []string{"stack: fake-stack-name"}, // buildpack tested separately []string{"#0", "running", "2015-11-19 01:01:17 AM", "25.0%", "24M of 32M", "1G of 2G"}, )) }) Context("when getting the application summary fails because the app is stopped", func() { BeforeEach(func() { getAppSummaryModel.RunningInstances = 0 getAppSummaryModel.InstanceCount = 1 getAppSummaryModel.State = "stopped" appSummaryRepo.GetSummaryReturns(getAppSummaryModel, errors.NewHTTPError(400, errors.InstancesError, "error")) }) It("prints appropriate output", func() { Expect(err).NotTo(HaveOccurred()) Expect(ui.Outputs()).To(ContainSubstrings( []string{"Showing health and status", "fake-app-name", "my-org", "my-space", "my-user"}, []string{"state", "stopped"}, []string{"instances", "0/1"}, []string{"usage", "1G x 1 instances"}, []string{"There are no running instances of this app."}, )) }) })
It("exit without polling for the app, and warns the user", func() { ui, _, _ := startAppWithInstancesAndErrors(zeroInstanceApp, requirementsFactory) Expect(ui.Outputs()).To(ContainSubstrings( []string{"my-app", "my-org", "my-space", "my-user"}, []string{"OK"}, []string{"App state changed to started, but note that it has 0 instances."}, )) Expect(appRepo.UpdateCallCount()).To(Equal(1)) appGuid, appParams := appRepo.UpdateArgsForCall(0) Expect(appGuid).To(Equal(zeroInstanceApp.GUID)) startedState := "started" Expect(appParams).To(Equal(models.AppParams{State: &startedState})) zeroInstanceApp.State = startedState ui, _, _ = startAppWithInstancesAndErrors(zeroInstanceApp, requirementsFactory) Expect(ui.Outputs()).To(ContainSubstrings( []string{"App my-app is already started"}, )) Expect(appRepo.UpdateCallCount()).To(Equal(1)) }) }) It("displays the command start command instead of the detected start command when set", func() { defaultAppForStart.Command = "command start command" defaultAppForStart.DetectedStartCommand = "detected start command" ui, appRepo, _ = startAppWithInstancesAndErrors(defaultAppForStart, requirementsFactory) Expect(appRepo.GetAppCallCount()).To(Equal(1)) Expect(appRepo.GetAppArgsForCall(0)).To(Equal("my-app-guid")) Expect(ui.Outputs()).To(ContainSubstrings(