github.com/loggregator/cli@v6.33.1-0.20180224010324-82334f081791+incompatible/integration/push/tcp_routes_in_manifest_test.go (about) 1 package push 2 3 import ( 4 "path/filepath" 5 6 "code.cloudfoundry.org/cli/integration/helpers" 7 . "github.com/onsi/ginkgo" 8 . "github.com/onsi/gomega" 9 . "github.com/onsi/gomega/gbytes" 10 . "github.com/onsi/gomega/gexec" 11 ) 12 13 var _ = Describe("TCP routes in manifest", func() { 14 var ( 15 app string 16 domain helpers.Domain 17 route1 helpers.Route 18 route2 helpers.Route 19 ) 20 21 BeforeEach(func() { 22 app = helpers.NewAppName() 23 domain = helpers.NewDomain(organization, helpers.DomainName()) 24 route1 = helpers.NewTCPRoute(space, domain.Name, 1024) 25 route2 = helpers.NewTCPRoute(space, domain.Name, 1025) 26 }) 27 28 Context("when the domain exists", func() { 29 BeforeEach(func() { 30 domain.CreateWithRouterGroup(helpers.FindOrCreateTCPRouterGroup(GinkgoParallelNode())) 31 }) 32 33 AfterEach(func() { 34 domain.DeleteShared() 35 }) 36 37 Context("when the routes are new", func() { 38 It("creates and maps the routes", func() { 39 helpers.WithHelloWorldApp(func(dir string) { 40 helpers.WriteManifest(filepath.Join(dir, "manifest.yml"), map[string]interface{}{ 41 "applications": []map[string]interface{}{ 42 { 43 "name": app, 44 "routes": []map[string]string{ 45 {"route": route1.String()}, 46 {"route": route2.String()}, 47 }, 48 }, 49 }, 50 }) 51 52 session := helpers.CustomCF(helpers.CFEnv{WorkingDirectory: dir}, PushCommandName, "--no-start") 53 Eventually(session).Should(Say("Getting app info\\.\\.\\.")) 54 55 Eventually(session).Should(Say("Creating app with these attributes\\.\\.\\.")) 56 Eventually(session).Should(Say("\\+\\s+name:\\s+%s", app)) 57 Eventually(session).Should(Say("\\s+routes:")) 58 Eventually(session).Should(Say("(?i)\\+\\s+%s", route1)) 59 Eventually(session).Should(Say("(?i)\\+\\s+%s", route2)) 60 Eventually(session).Should(Exit(0)) 61 }) 62 63 session := helpers.CF("app", app) 64 Eventually(session).Should(Say("name:\\s+%s", app)) 65 Eventually(session).Should(Say("routes:\\s+(%s, %s)|(%s, %s)", route1, route2, route2, route1)) 66 Eventually(session).Should(Exit(0)) 67 }) 68 }) 69 70 Context("when a route already exist", func() { 71 Context("when the routes exist in the current space", func() { 72 BeforeEach(func() { 73 route2.Create() 74 }) 75 76 It("creates and maps the new route; maps the old route", func() { 77 helpers.WithHelloWorldApp(func(dir string) { 78 helpers.WriteManifest(filepath.Join(dir, "manifest.yml"), map[string]interface{}{ 79 "applications": []map[string]interface{}{ 80 { 81 "name": app, 82 "routes": []map[string]string{ 83 {"route": route1.String()}, 84 {"route": route2.String()}, 85 }, 86 }, 87 }, 88 }) 89 90 session := helpers.CustomCF(helpers.CFEnv{WorkingDirectory: dir}, PushCommandName, "--no-start") 91 Eventually(session).Should(Say("Getting app info\\.\\.\\.")) 92 93 Eventually(session).Should(Say("Creating app with these attributes\\.\\.\\.")) 94 Eventually(session).Should(Say("\\+\\s+name:\\s+%s", app)) 95 Eventually(session).Should(Say("\\s+routes:")) 96 Eventually(session).Should(Say("(?i)\\+\\s+%s", route1)) 97 Eventually(session).Should(Say("(?i)\\+\\s+%s", route2)) 98 Eventually(session).Should(Exit(0)) 99 }) 100 101 session := helpers.CF("app", app) 102 Eventually(session).Should(Say("name:\\s+%s", app)) 103 Eventually(session).Should(Say("routes:\\s+(%s, %s)|(%s, %s)", route1, route2, route2, route1)) 104 Eventually(session).Should(Exit(0)) 105 }) 106 }) 107 108 Context("when the routes exist in another space", func() { 109 var otherSpace string 110 111 BeforeEach(func() { 112 otherSpace = helpers.NewSpaceName() 113 helpers.CreateSpace(otherSpace) 114 route2.Space = otherSpace 115 route2.Create() 116 }) 117 118 AfterEach(func() { 119 helpers.QuickDeleteSpace(otherSpace) 120 }) 121 122 It("returns an error", func() { 123 helpers.WithHelloWorldApp(func(dir string) { 124 helpers.WriteManifest(filepath.Join(dir, "manifest.yml"), map[string]interface{}{ 125 "applications": []map[string]interface{}{ 126 { 127 "name": app, 128 "routes": []map[string]string{ 129 {"route": route1.String()}, 130 {"route": route2.String()}, 131 }, 132 }, 133 }, 134 }) 135 136 session := helpers.CustomCF(helpers.CFEnv{WorkingDirectory: dir}, PushCommandName, "--no-start") 137 Eventually(session).Should(Say("Getting app info\\.\\.\\.")) 138 Eventually(session.Err).Should(Say("The app cannot be mapped to route %s because the route is not in this space. Apps must be mapped to routes in the same space.", route2)) 139 Eventually(session).Should(Exit(1)) 140 }) 141 }) 142 }) 143 }) 144 145 Context("when a host is provided", func() { 146 BeforeEach(func() { 147 route1.Host = "some-host" 148 }) 149 150 It("returns an error", func() { 151 helpers.WithHelloWorldApp(func(dir string) { 152 helpers.WriteManifest(filepath.Join(dir, "manifest.yml"), map[string]interface{}{ 153 "applications": []map[string]interface{}{ 154 { 155 "name": app, 156 "routes": []map[string]string{ 157 {"route": route1.String()}, 158 {"route": route2.String()}, 159 }, 160 }, 161 }, 162 }) 163 164 session := helpers.CustomCF(helpers.CFEnv{WorkingDirectory: dir}, PushCommandName, "--no-start") 165 Eventually(session).Should(Say("Getting app info\\.\\.\\.")) 166 Eventually(session.Err).Should(Say("Host and path not allowed in route with TCP domain %s", route1.Domain)) 167 Eventually(session).Should(Exit(1)) 168 }) 169 }) 170 }) 171 172 Context("when an path is provided", func() { 173 It("returns an error", func() { 174 helpers.WithHelloWorldApp(func(dir string) { 175 helpers.WriteManifest(filepath.Join(dir, "manifest.yml"), map[string]interface{}{ 176 "applications": []map[string]interface{}{ 177 { 178 "name": app, 179 "routes": []map[string]string{ 180 {"route": route1.String() + "/some-path"}, 181 }, 182 }, 183 }, 184 }) 185 186 session := helpers.CustomCF(helpers.CFEnv{WorkingDirectory: dir}, PushCommandName, "--no-start") 187 Eventually(session.Err).Should(Say("Host and path not allowed in route with TCP domain %s", route1.Domain)) 188 Eventually(session).Should(Exit(1)) 189 }) 190 }) 191 }) 192 }) 193 194 Context("when the domains don't exist", func() { 195 It("returns an error", func() { 196 helpers.WithHelloWorldApp(func(dir string) { 197 helpers.WriteManifest(filepath.Join(dir, "manifest.yml"), map[string]interface{}{ 198 "applications": []map[string]interface{}{ 199 { 200 "name": app, 201 "routes": []map[string]string{ 202 {"route": route1.String()}, 203 }, 204 }, 205 }, 206 }) 207 208 session := helpers.CustomCF(helpers.CFEnv{WorkingDirectory: dir}, PushCommandName, "--no-start") 209 Eventually(session).Should(Say("Getting app info\\.\\.\\.")) 210 Eventually(session.Err).Should(Say("The route %s did not match any existing domains.", route1)) 211 Eventually(session).Should(Exit(1)) 212 }) 213 }) 214 }) 215 })