func (routeActor routeActor) BindRoute(app models.Application, route models.Route) error { if !app.HasRoute(route) { routeActor.ui.Say(T( "Binding {{.URL}} to {{.AppName}}...", map[string]interface{}{ "URL": terminal.EntityNameColor(route.URL()), "AppName": terminal.EntityNameColor(app.Name), }), ) err := routeActor.routeRepo.Bind(route.GUID, app.GUID) switch err := err.(type) { case nil: routeActor.ui.Ok() routeActor.ui.Say("") return nil case errors.HTTPError: if err.ErrorCode() == errors.InvalidRelation { return errors.New(T( "The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", map[string]interface{}{ "URL": route.URL(), }), ) } } return err } return nil }
func (routeActor routeActor) FindOrCreateRoute(hostname string, domain models.DomainFields, path string, port int, useRandomPort bool) (models.Route, error) { var route models.Route var err error //if tcp route use random port should skip route lookup if useRandomPort && domain.RouterGroupType == tcp { err = new(errors.ModelNotFoundError) } else { route, err = routeActor.routeRepo.Find(hostname, domain, path, port) } switch err.(type) { case nil: routeActor.ui.Say( T("Using route {{.RouteURL}}", map[string]interface{}{ "RouteURL": terminal.EntityNameColor(route.URL()), }), ) case *errors.ModelNotFoundError: if useRandomPort && domain.RouterGroupType == tcp { route, err = routeActor.CreateRandomTCPRoute(domain) } else { routeActor.ui.Say( T("Creating route {{.Hostname}}...", map[string]interface{}{ "Hostname": terminal.EntityNameColor(domain.URLForHostAndPath(hostname, path, port)), }), ) route, err = routeActor.routeRepo.Create(hostname, domain, path, port, false) } routeActor.ui.Ok() routeActor.ui.Say("") } return route, err }
}) }) Context("when there are routes in different spaces", func() { BeforeEach(func() { routeRepo.ListAllRoutesStub = func(cb func(models.Route) bool) error { space1 := models.SpaceFields{Name: "space-1"} space2 := models.SpaceFields{Name: "space-2"} domain := models.DomainFields{Name: "example.com"} domain2 := models.DomainFields{Name: "cookieclicker.co"} app1 := models.ApplicationFields{Name: "dora"} app2 := models.ApplicationFields{Name: "bora"} route := models.Route{} route.Host = "hostname-1" route.Domain = domain route.Apps = []models.ApplicationFields{app1} route.Space = space1 route.ServiceInstance = models.ServiceInstanceFields{ Name: "test-service", GUID: "service-guid", } route2 := models.Route{} route2.Host = "hostname-2" route2.Path = "/foo" route2.Domain = domain2 route2.Apps = []models.ApplicationFields{app1, app2} route2.Space = space2
}) It("passes requirements when logged in", func() { _, passed := callDeleteOrphanedRoutes("y", []string{}, requirementsFactory, routeRepo) Expect(passed).To(BeTrue()) }) It("passes when confirmation is provided", func() { var ui *testterm.FakeUI domain := models.DomainFields{Name: "example.com"} domain2 := models.DomainFields{Name: "cookieclicker.co"} app1 := models.ApplicationFields{Name: "dora"} routeRepo.ListRoutesStub = func(cb func(models.Route) bool) error { route := models.Route{} route.GUID = "route1-guid" route.Host = "hostname-1" route.Domain = domain route.Apps = []models.ApplicationFields{app1} route2 := models.Route{} route2.GUID = "route2-guid" route2.Host = "hostname-2" route2.Domain = domain2 cb(route) cb(route2) return nil }
package models_test import ( "code.cloudfoundry.org/cli/cf/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("Route", func() { Describe("URL", func() { var ( r models.Route host string path string ) AfterEach(func() { host = "" path = "" }) JustBeforeEach(func() { r = models.Route{ Host: host, Domain: models.DomainFields{ Name: "the-domain", }, Path: path, } })