func TestRunWhenOrganizationExists(t *testing.T) { developmentSpaceFields := cf.SpaceFields{} developmentSpaceFields.Name = "development" stagingSpaceFields := cf.SpaceFields{} stagingSpaceFields.Name = "staging" domainFields := cf.DomainFields{} domainFields.Name = "cfapps.io" cfAppDomainFields := cf.DomainFields{} cfAppDomainFields.Name = "cf-app.com" org := cf.Organization{} org.Name = "my-org" org.Guid = "my-org-guid" org.QuotaDefinition = cf.NewQuotaFields("cantina-quota", 512) org.Spaces = []cf.SpaceFields{developmentSpaceFields, stagingSpaceFields} org.Domains = []cf.DomainFields{domainFields, cfAppDomainFields} reqFactory := &testreq.FakeReqFactory{Organization: org, LoginSuccess: true} args := []string{"my-org"} ui := callShowOrg(t, args, reqFactory) assert.Equal(t, reqFactory.OrganizationName, "my-org") testassert.SliceContains(t, ui.Outputs, testassert.Lines{ {"Getting info for org", "my-org", "my-user"}, {"OK"}, {"my-org"}, {" domains:", "cfapps.io", "cf-app.com"}, {" quota: ", "cantina-quota", "512M"}, {" spaces:", "development", "staging"}, }) }
func TestCreateRoute(t *testing.T) { space := cf.SpaceFields{} space.Guid = "my-space-guid" space.Name = "my-space" domain := cf.DomainFields{} domain.Guid = "domain-guid" domain.Name = "example.com" reqFactory := &testreq.FakeReqFactory{ LoginSuccess: true, TargetedOrgSuccess: true, Domain: cf.Domain{DomainFields: domain}, Space: cf.Space{SpaceFields: space}, } routeRepo := &testapi.FakeRouteRepository{} ui := callCreateRoute(t, []string{"-n", "host", "my-space", "example.com"}, reqFactory, routeRepo) testassert.SliceContains(t, ui.Outputs, testassert.Lines{ {"Creating route", "host.example.com", "my-org", "my-space", "my-user"}, {"OK"}, }) assert.Equal(t, routeRepo.CreateInSpaceHost, "host") assert.Equal(t, routeRepo.CreateInSpaceDomainGuid, "domain-guid") assert.Equal(t, routeRepo.CreateInSpaceSpaceGuid, "my-space-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 TestDeleteRouteWithConfirmation(t *testing.T) { domain := cf.DomainFields{} domain.Guid = "domain-guid" domain.Name = "example.com" reqFactory := &testreq.FakeReqFactory{LoginSuccess: true} route := cf.Route{} route.Guid = "route-guid" route.Host = "my-host" route.Domain = domain routeRepo := &testapi.FakeRouteRepository{ FindByHostAndDomainRoute: route, } ui := callDeleteRoute(t, "y", []string{"-n", "my-host", "example.com"}, reqFactory, routeRepo) testassert.SliceContains(t, ui.Prompts, testassert.Lines{ {"Really delete", "my-host"}, }) testassert.SliceContains(t, ui.Outputs, testassert.Lines{ {"Deleting route", "my-host.example.com"}, {"OK"}, }) assert.Equal(t, routeRepo.DeleteRouteGuid, "route-guid") }
func (cmd *CreateRoute) CreateRoute(hostName string, domain cf.DomainFields, space cf.SpaceFields) (route cf.Route, apiResponse net.ApiResponse) { cmd.ui.Say("Creating route %s for org %s / space %s as %s...", terminal.EntityNameColor(domain.UrlForHost(hostName)), terminal.EntityNameColor(cmd.config.OrganizationFields.Name), terminal.EntityNameColor(space.Name), terminal.EntityNameColor(cmd.config.Username()), ) route, apiResponse = cmd.routeRepo.CreateInSpace(hostName, domain.Guid, space.Guid) if apiResponse.IsNotSuccessful() { var findApiResponse net.ApiResponse route, findApiResponse = cmd.routeRepo.FindByHostAndDomain(hostName, domain.Name) if findApiResponse.IsNotSuccessful() || route.Space.Guid != space.Guid || route.Domain.Guid != domain.Guid { return } apiResponse = net.NewSuccessfulApiResponse() cmd.ui.Ok() cmd.ui.Warn("Route %s already exists", route.URL()) return } cmd.ui.Ok() return }
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 (resource RouteSummary) ToModel() (route cf.RouteSummary) { domain := cf.DomainFields{} domain.Guid = resource.Domain.Guid domain.Name = resource.Domain.Name domain.Shared = resource.Domain.OwningOrganizationGuid != "" route.Guid = resource.Guid route.Host = resource.Host route.Domain = domain return }
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 TestRouteCreator(t *testing.T) { space := cf.SpaceFields{} space.Guid = "my-space-guid" space.Name = "my-space" domain := cf.DomainFields{} domain.Guid = "domain-guid" domain.Name = "example.com" createdRoute := cf.Route{} createdRoute.Host = "my-host" createdRoute.Guid = "my-route-guid" routeRepo := &testapi.FakeRouteRepository{ CreateInSpaceCreatedRoute: createdRoute, } ui := new(testterm.FakeUI) token, err := testconfig.CreateAccessTokenWithTokenInfo(configuration.TokenInfo{ Username: "******", }) assert.NoError(t, err) org := cf.OrganizationFields{} org.Name = "my-org" config := &configuration.Configuration{ OrganizationFields: org, AccessToken: token, } cmd := NewCreateRoute(ui, config, routeRepo) route, apiResponse := cmd.CreateRoute("my-host", domain, space) assert.Equal(t, route.Guid, createdRoute.Guid) assert.True(t, apiResponse.IsSuccessful()) testassert.SliceContains(t, ui.Outputs, testassert.Lines{ {"Creating route", "my-host.example.com", "my-org", "my-space", "my-user"}, {"OK"}, }) assert.Equal(t, routeRepo.CreateInSpaceHost, "my-host") assert.Equal(t, routeRepo.CreateInSpaceDomainGuid, "domain-guid") assert.Equal(t, routeRepo.CreateInSpaceSpaceGuid, "my-space-guid") }
func TestMapRouteWhenRouteNotReserved(t *testing.T) { domain := cf.DomainFields{} domain.Name = "my-domain.com" route := cf.Route{} route.Guid = "my-app-guid" route.Host = "my-host" route.Domain = domain app := cf.Application{} app.Guid = "my-app-guid" app.Name = "my-app" routeRepo := &testapi.FakeRouteRepository{} reqFactory := &testreq.FakeReqFactory{LoginSuccess: true, Application: app} routeCreator := &testcmd.FakeRouteCreator{ReservedRoute: route} callMapRoute(t, []string{"-n", "my-host", "my-app", "my-domain.com"}, reqFactory, routeRepo, routeCreator) assert.Equal(t, routeCreator.ReservedRoute, route) }
func (cmd *Push) route(hostName string, domain cf.DomainFields) (route cf.Route) { route, apiResponse := cmd.routeRepo.FindByHostAndDomain(hostName, domain.Name) if apiResponse.IsNotSuccessful() { cmd.ui.Say("Creating route %s...", terminal.EntityNameColor(domain.UrlForHost(hostName))) route, apiResponse = cmd.routeRepo.Create(hostName, domain.Guid) if apiResponse.IsNotSuccessful() { cmd.ui.Failed(apiResponse.Message) return } cmd.ui.Ok() cmd.ui.Say("") } else { cmd.ui.Say("Using route %s", terminal.EntityNameColor(route.URL())) } return }
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 TestShowSpaceInfoSuccess(t *testing.T) { org := cf.OrganizationFields{} org.Name = "my-org" app := cf.ApplicationFields{} app.Name = "app1" app.Guid = "app1-guid" apps := []cf.ApplicationFields{app} domain := cf.DomainFields{} domain.Name = "domain1" domain.Guid = "domain1-guid" domains := []cf.DomainFields{domain} serviceInstance := cf.ServiceInstanceFields{} serviceInstance.Name = "service1" serviceInstance.Guid = "service1-guid" services := []cf.ServiceInstanceFields{serviceInstance} space := cf.Space{} space.Name = "space1" space.Organization = org space.Applications = apps space.Domains = domains space.ServiceInstances = services reqFactory := &testreq.FakeReqFactory{LoginSuccess: true, TargetedOrgSuccess: true, Space: space} ui := callShowSpace(t, []string{"space1"}, reqFactory) testassert.SliceContains(t, ui.Outputs, testassert.Lines{ {"Getting info for space", "space1", "my-org", "my-user"}, {"OK"}, {"space1"}, {"Org", "my-org"}, {"Apps", "app1"}, {"Domains", "domain1"}, {"Services", "service1"}, }) }
func TestCreateRouteIsIdempotent(t *testing.T) { space := cf.SpaceFields{} space.Guid = "my-space-guid" space.Name = "my-space" domain := cf.DomainFields{} domain.Guid = "domain-guid" domain.Name = "example.com" reqFactory := &testreq.FakeReqFactory{ LoginSuccess: true, TargetedOrgSuccess: true, Domain: cf.Domain{DomainFields: domain}, Space: cf.Space{SpaceFields: space}, } route := cf.Route{} route.Guid = "my-route-guid" route.Host = "host" route.Domain = domain route.Space = space routeRepo := &testapi.FakeRouteRepository{ CreateInSpaceErr: true, FindByHostAndDomainRoute: route, } ui := callCreateRoute(t, []string{"-n", "host", "my-space", "example.com"}, reqFactory, routeRepo) testassert.SliceContains(t, ui.Outputs, testassert.Lines{ {"Creating route"}, {"OK"}, {"host.example.com", "already exists"}, }) assert.Equal(t, routeRepo.CreateInSpaceHost, "host") assert.Equal(t, routeRepo.CreateInSpaceDomainGuid, "domain-guid") assert.Equal(t, routeRepo.CreateInSpaceSpaceGuid, "my-space-guid") }
func TestListingRoutes(t *testing.T) { domain := cf.DomainFields{} domain.Name = "example.com" domain2 := cf.DomainFields{} domain2.Name = "cfapps.com" domain3 := cf.DomainFields{} domain3.Name = "another-example.com" app1 := cf.ApplicationFields{} app1.Name = "dora" app2 := cf.ApplicationFields{} app2.Name = "dora2" app3 := cf.ApplicationFields{} app3.Name = "my-app" app4 := cf.ApplicationFields{} app4.Name = "my-app2" app5 := cf.ApplicationFields{} app5.Name = "july" route := cf.Route{} route.Host = "hostname-1" route.Domain = domain route.Apps = []cf.ApplicationFields{app1, app2} route2 := cf.Route{} route2.Host = "hostname-2" route2.Domain = domain2 route2.Apps = []cf.ApplicationFields{app3, app4} route3 := cf.Route{} route3.Host = "hostname-3" route3.Domain = domain3 route3.Apps = []cf.ApplicationFields{app5} routes := []cf.Route{route, route2, route3} routeRepo := &testapi.FakeRouteRepository{Routes: routes} ui := callListRoutes(t, []string{}, &testreq.FakeReqFactory{}, routeRepo) testassert.SliceContains(t, ui.Outputs, testassert.Lines{ {"Getting routes", "my-user"}, {"host", "domain", "apps"}, {"hostname-1", "example.com", "dora", "dora2"}, {"hostname-2", "cfapps.com", "my-app", "my-app2"}, {"hostname-3", "another-example.com", "july"}, }) }
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"}, }) }