func TestPushingAppWhenItAlreadyExistsAndHostIsSpecified(t *testing.T) { deps := getPushDependencies() domain := cf.Domain{} domain.Name = "example.com" domain.Guid = "domain-guid" domain.Shared = true existingRoute := cf.RouteSummary{} existingRoute.Host = "existing-app" existingRoute.Domain = domain.DomainFields existingApp := cf.Application{} existingApp.Name = "existing-app" existingApp.Guid = "existing-app-guid" existingApp.Routes = []cf.RouteSummary{existingRoute} deps.appRepo.ReadApp = existingApp deps.appRepo.UpdateAppResult = existingApp deps.routeRepo.FindByHostAndDomainNotFound = true deps.domainRepo.ListSharedDomainsDomains = []cf.Domain{domain} ui := callPush(t, []string{"-n", "new-host", "existing-app"}, deps) testassert.SliceContains(t, ui.Outputs, testassert.Lines{ {"Creating route", "new-host.example.com"}, {"OK"}, {"Binding", "new-host.example.com"}, }) assert.Equal(t, deps.routeRepo.FindByHostAndDomainDomain, "example.com") assert.Equal(t, deps.routeRepo.FindByHostAndDomainHost, "new-host") assert.Equal(t, deps.routeRepo.CreatedHost, "new-host") assert.Equal(t, deps.routeRepo.CreatedDomainGuid, "domain-guid") }
func init() { defaultAppForStart.Name = "my-app" defaultAppForStart.Guid = "my-app-guid" defaultAppForStart.InstanceCount = 2 domain := cf.DomainFields{} domain.Name = "example.com" route := cf.RouteSummary{} route.Host = "my-app" route.Domain = domain defaultAppForStart.Routes = []cf.RouteSummary{route} instance1 := cf.AppInstanceFields{} instance1.State = cf.InstanceStarting instance2 := cf.AppInstanceFields{} instance2.State = cf.InstanceStarting instance3 := cf.AppInstanceFields{} instance3.State = cf.InstanceRunning instance4 := cf.AppInstanceFields{} instance4.State = cf.InstanceStarting defaultInstanceReponses = [][]cf.AppInstanceFields{ []cf.AppInstanceFields{instance1, instance2}, []cf.AppInstanceFields{instance1, instance2}, []cf.AppInstanceFields{instance3, instance4}, } }
func TestPushingAppWithNoFlagsWhenAppIsAlreadyBoundToDomain(t *testing.T) { deps := getPushDependencies() domain := cf.DomainFields{} domain.Name = "example.com" existingRoute := cf.RouteSummary{} existingRoute.Host = "foo" existingRoute.Domain = domain existingApp := cf.Application{} existingApp.Name = "existing-app" existingApp.Guid = "existing-app-guid" existingApp.Routes = []cf.RouteSummary{existingRoute} deps.appRepo.ReadApp = existingApp deps.appRepo.UpdateAppResult = existingApp _ = callPush(t, []string{"existing-app"}, deps) assert.Equal(t, deps.appBitsRepo.UploadedAppGuid, "existing-app-guid") assert.Equal(t, deps.domainRepo.FindByNameInCurrentSpaceName, "") assert.Equal(t, deps.routeRepo.FindByHostAndDomainDomain, "") assert.Equal(t, deps.routeRepo.FindByHostAndDomainHost, "") assert.Equal(t, deps.routeRepo.CreatedHost, "") assert.Equal(t, deps.routeRepo.CreatedDomainGuid, "") }
func TestPushingAppWhenItAlreadyExistsAndDomainIsSpecifiedIsAlreadyBound(t *testing.T) { deps := getPushDependencies() domain := cf.DomainFields{} domain.Name = "example.com" domain.Guid = "domain-guid" existingRoute := cf.RouteSummary{} existingRoute.Host = "existing-app" existingRoute.Domain = domain existingApp := cf.Application{} existingApp.Name = "existing-app" existingApp.Guid = "existing-app-guid" existingApp.Routes = []cf.RouteSummary{existingRoute} foundRoute := cf.Route{} foundRoute.RouteFields = existingRoute.RouteFields foundRoute.Domain = existingRoute.Domain deps.appRepo.ReadApp = existingApp deps.appRepo.UpdateAppResult = existingApp deps.routeRepo.FindByHostAndDomainRoute = foundRoute ui := callPush(t, []string{"-d", "example.com", "existing-app"}, deps) testassert.SliceContains(t, ui.Outputs, testassert.Lines{ {"Using route", "existing-app", "example.com"}, }) assert.Equal(t, deps.appBitsRepo.UploadedAppGuid, "existing-app-guid") }
func TestPushingAppWhenItAlreadyExistsAndChangingOptions(t *testing.T) { deps := getPushDependencies() existingRoute := cf.RouteSummary{} existingRoute.Host = "existing-app" existingApp := cf.Application{} existingApp.Name = "existing-app" existingApp.Guid = "existing-app-guid" existingApp.Routes = []cf.RouteSummary{existingRoute} deps.appRepo.ReadApp = existingApp stack := cf.Stack{} stack.Name = "differentStack" stack.Guid = "differentStack-guid" deps.stackRepo.FindByNameStack = stack args := []string{ "-c", "different start command", "-i", "10", "-m", "1G", "-b", "https://github.com/heroku/heroku-buildpack-different.git", "-s", "differentStack", "existing-app", } _ = callPush(t, args, deps) assert.Equal(t, deps.appRepo.UpdateParams.Get("command"), "different start command") assert.Equal(t, deps.appRepo.UpdateParams.Get("instances"), 10) assert.Equal(t, deps.appRepo.UpdateParams.Get("memory"), uint64(1024)) assert.Equal(t, deps.appRepo.UpdateParams.Get("buildpack"), "https://github.com/heroku/heroku-buildpack-different.git") assert.Equal(t, deps.appRepo.UpdateParams.Get("stack_guid"), "differentStack-guid") }
func TestPushingAppWhenItAlreadyExistsAndDomainSpecifiedIsNotBound(t *testing.T) { deps := getPushDependencies() domain := cf.DomainFields{} domain.Name = "example.com" existingRoute := cf.RouteSummary{} existingRoute.Host = "existing-app" existingRoute.Domain = domain existingApp := cf.Application{} existingApp.Name = "existing-app" existingApp.Guid = "existing-app-guid" existingApp.Routes = []cf.RouteSummary{existingRoute} foundDomain := cf.Domain{} foundDomain.Guid = "domain-guid" foundDomain.Name = "newdomain.com" deps.appRepo.ReadApp = existingApp deps.appRepo.UpdateAppResult = existingApp deps.routeRepo.FindByHostAndDomainNotFound = true deps.domainRepo.FindByNameDomain = foundDomain ui := callPush(t, []string{"-d", "newdomain.com", "existing-app"}, deps) testassert.SliceContains(t, ui.Outputs, testassert.Lines{ {"Creating route", "existing-app.newdomain.com"}, {"OK"}, {"Binding", "existing-app.newdomain.com"}, }) assert.Equal(t, deps.appBitsRepo.UploadedAppGuid, "existing-app-guid") assert.Equal(t, deps.domainRepo.FindByNameInCurrentSpaceName, "newdomain.com") assert.Equal(t, deps.routeRepo.FindByHostAndDomainDomain, "newdomain.com") assert.Equal(t, deps.routeRepo.FindByHostAndDomainHost, "existing-app") assert.Equal(t, deps.routeRepo.CreatedHost, "existing-app") assert.Equal(t, deps.routeRepo.CreatedDomainGuid, "domain-guid") }
func testDisplayingAppSummaryWithErrorCode(t *testing.T, errorCode string) { reqApp := cf.Application{} reqApp.Name = "my-app" reqApp.Guid = "my-app-guid" domain3 := cf.DomainFields{} domain3.Name = "example.com" domain4 := cf.DomainFields{} domain4.Name = "example.com" route1 := cf.RouteSummary{} route1.Host = "my-app" route1.Domain = domain3 route2 := cf.RouteSummary{} route2.Host = "foo" route2.Domain = domain4 routes := []cf.RouteSummary{ route1, route2, } app := cf.ApplicationFields{} app.State = "stopped" app.InstanceCount = 2 app.RunningInstances = 0 app.Memory = 256 appSummary := cf.AppSummary{} appSummary.ApplicationFields = app appSummary.RouteSummaries = routes appSummaryRepo := &testapi.FakeAppSummaryRepo{GetSummarySummary: appSummary, GetSummaryErrorCode: errorCode} appInstancesRepo := &testapi.FakeAppInstancesRepo{} reqFactory := &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true, Application: reqApp} ui := callApp(t, []string{"my-app"}, reqFactory, appSummaryRepo, appInstancesRepo) assert.Equal(t, appSummaryRepo.GetSummaryAppGuid, "my-app-guid") assert.Equal(t, appInstancesRepo.GetInstancesAppGuid, "my-app-guid") testassert.SliceContains(t, ui.Outputs, testassert.Lines{ {"Showing health and status", "my-app", "my-org", "my-space", "my-user"}, {"state", "stopped"}, {"instances", "0/2"}, {"usage", "256M x 2 instances"}, {"urls", "my-app.example.com, foo.example.com"}, {"no running instances"}, }) }
func TestApps(t *testing.T) { domain := cf.DomainFields{} domain.Name = "cfapps.io" domain2 := cf.DomainFields{} domain2.Name = "example.com" route1 := cf.RouteSummary{} route1.Host = "app1" route1.Domain = domain route2 := cf.RouteSummary{} route2.Host = "app1" route2.Domain = domain2 app1Routes := []cf.RouteSummary{route1, route2} domain3 := cf.DomainFields{} domain3.Name = "cfapps.io" route3 := cf.RouteSummary{} route3.Host = "app2" route3.Domain = domain3 app2Routes := []cf.RouteSummary{route3} app := cf.AppSummary{} app.Name = "Application-1" app.State = "started" app.RunningInstances = 1 app.InstanceCount = 1 app.Memory = 512 app.DiskQuota = 1024 app.RouteSummaries = app1Routes app2 := cf.AppSummary{} app2.Name = "Application-2" app2.State = "started" app2.RunningInstances = 1 app2.InstanceCount = 2 app2.Memory = 256 app2.DiskQuota = 1024 app2.RouteSummaries = app2Routes apps := []cf.AppSummary{app, app2} appSummaryRepo := &testapi.FakeAppSummaryRepo{ GetSummariesInCurrentSpaceApps: apps, } reqFactory := &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true} ui := callApps(t, appSummaryRepo, reqFactory) assert.True(t, testcmd.CommandDidPassRequirements) testassert.SliceContains(t, ui.Outputs, testassert.Lines{ {"Getting apps in", "my-org", "development", "my-user"}, {"OK"}, {"Application-1", "started", "1/1", "512M", "1G", "app1.cfapps.io", "app1.example.com"}, {"Application-2", "started", "1/2", "256M", "1G", "app2.cfapps.io"}, }) }
func TestDisplayingAppSummary(t *testing.T) { reqApp := cf.Application{} reqApp.Name = "my-app" reqApp.Guid = "my-app-guid" route1 := cf.RouteSummary{} route1.Host = "my-app" domain := cf.DomainFields{} domain.Name = "example.com" route1.Domain = domain route2 := cf.RouteSummary{} route2.Host = "foo" domain2 := cf.DomainFields{} domain2.Name = "example.com" route2.Domain = domain2 appSummary := cf.AppSummary{} appSummary.State = "started" appSummary.InstanceCount = 2 appSummary.RunningInstances = 2 appSummary.Memory = 256 appSummary.RouteSummaries = []cf.RouteSummary{route1, route2} time1, err := time.Parse("Mon Jan 2 15:04:05 -0700 MST 2006", "Mon Jan 2 15:04:05 -0700 MST 2012") assert.NoError(t, err) time2, err := time.Parse("Mon Jan 2 15:04:05 -0700 MST 2006", "Mon Apr 1 15:04:05 -0700 MST 2012") assert.NoError(t, err) appInstance := cf.AppInstanceFields{} appInstance.State = cf.InstanceRunning appInstance.Since = time1 appInstance.CpuUsage = 1.0 appInstance.DiskQuota = 1 * formatters.GIGABYTE appInstance.DiskUsage = 32 * formatters.MEGABYTE appInstance.MemQuota = 64 * formatters.MEGABYTE appInstance.MemUsage = 13 * formatters.BYTE appInstance2 := cf.AppInstanceFields{} appInstance2.State = cf.InstanceDown appInstance2.Since = time2 instances := []cf.AppInstanceFields{appInstance, appInstance2} appSummaryRepo := &testapi.FakeAppSummaryRepo{GetSummarySummary: appSummary} appInstancesRepo := &testapi.FakeAppInstancesRepo{GetInstancesResponses: [][]cf.AppInstanceFields{instances}} reqFactory := &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true, Application: reqApp} ui := callApp(t, []string{"my-app"}, reqFactory, appSummaryRepo, appInstancesRepo) assert.Equal(t, appSummaryRepo.GetSummaryAppGuid, "my-app-guid") testassert.SliceContains(t, ui.Outputs, testassert.Lines{ {"Showing health and status", "my-app"}, {"state", "started"}, {"instances", "2/2"}, {"usage", "256M x 2 instances"}, {"urls", "my-app.example.com", "foo.example.com"}, {"#0", "running", "2012-01-02 03:04:05 PM", "100.0%", "13 of 64M", "32M of 1G"}, {"#1", "down", "2012-04-01 03:04:05 PM", "0%", "0 of 0", "0 of 0"}, }) }