github.com/randomtask1155/cli@v6.41.1-0.20181227003417-a98eed78cbde+incompatible/integration/shared/isolated/create_route_command_test.go (about) 1 package isolated 2 3 import ( 4 "fmt" 5 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccversion" 7 "code.cloudfoundry.org/cli/integration/helpers" 8 . "github.com/onsi/ginkgo" 9 . "github.com/onsi/gomega" 10 . "github.com/onsi/gomega/gbytes" 11 . "github.com/onsi/gomega/gexec" 12 ) 13 14 var _ = Describe("create-route command", func() { 15 Context("Help", func() { 16 It("displays the help information", func() { 17 session := helpers.CF("create-route", "--help") 18 Eventually(session).Should(Say(`NAME:`)) 19 Eventually(session).Should(Say(`create-route - Create a url route in a space for later use\n`)) 20 Eventually(session).Should(Say(`\n`)) 21 22 Eventually(session).Should(Say(`USAGE:`)) 23 Eventually(session).Should(Say(`Create an HTTP route:`)) 24 Eventually(session).Should(Say(`cf create-route SPACE DOMAIN \[--hostname HOSTNAME\] \[--path PATH\]\n`)) 25 Eventually(session).Should(Say(`\n`)) 26 27 Eventually(session).Should(Say(`Create a TCP route:`)) 28 Eventually(session).Should(Say(`cf create-route SPACE DOMAIN \(--port PORT \| --random-port\)\n`)) 29 Eventually(session).Should(Say(`\n`)) 30 31 Eventually(session).Should(Say(`EXAMPLES:`)) 32 Eventually(session).Should(Say(`cf create-route my-space example.com\s+# example.com`)) 33 Eventually(session).Should(Say(`cf create-route my-space example.com --hostname myapp\s+# myapp.example.com`)) 34 Eventually(session).Should(Say(`cf create-route my-space example.com --hostname myapp --path foo\s+# myapp.example.com/foo`)) 35 Eventually(session).Should(Say(`cf create-route my-space example.com --port 5000\s+# example.com:5000\n`)) 36 Eventually(session).Should(Say(`\n`)) 37 38 Eventually(session).Should(Say(`OPTIONS:`)) 39 Eventually(session).Should(Say(`--hostname, -n\s+Hostname for the HTTP route \(required for shared domains\)`)) 40 Eventually(session).Should(Say(`--path\s+Path for the HTTP route`)) 41 Eventually(session).Should(Say(`--port\s+Port for the TCP route`)) 42 Eventually(session).Should(Say(`--random-port\s+Create a random port for the TCP route\n`)) 43 Eventually(session).Should(Say(`\n`)) 44 45 Eventually(session).Should(Say(`SEE ALSO:`)) 46 Eventually(session).Should(Say(`check-route, domains, map-route`)) 47 48 Eventually(session).Should(Exit(0)) 49 }) 50 }) 51 52 Context("Flag Errors", func() { 53 When("--hostname and --port are provided", func() { 54 It("fails with a message about being unable to mix --port with the HTTP route options", func() { 55 session := helpers.CF("create-route", "some-space", "some-domain", "--hostname", "some-host", "--port", "1122") 56 Eventually(session.Err).Should(Say(`Incorrect Usage: The following arguments cannot be used together: --hostname, --port`)) 57 Eventually(session).Should(Exit(1)) 58 }) 59 }) 60 61 When("--hostname and --random-port are provided", func() { 62 It("fails with a message about being unable to mix --random-port with any other options", func() { 63 session := helpers.CF("create-route", "some-space", "some-domain", "--hostname", "some-host", "--random-port") 64 Eventually(session.Err).Should(Say(`Incorrect Usage: The following arguments cannot be used together: --hostname, --random-port`)) 65 Eventually(session).Should(Exit(1)) 66 }) 67 }) 68 69 When("--path and --port are provided", func() { 70 It("fails with a message about being unable to mix --port with the HTTP route options", func() { 71 session := helpers.CF("create-route", "some-space", "some-domain", "--path", "/some-path", "--port", "1111") 72 Eventually(session.Err).Should(Say(`Incorrect Usage: The following arguments cannot be used together: --path, --port`)) 73 Eventually(session).Should(Exit(1)) 74 }) 75 }) 76 77 When("--path and --random-port are provided", func() { 78 It("fails with a message about being unable to mix --random-port with any other options", func() { 79 session := helpers.CF("create-route", "some-space", "some-domain", "--path", "/some-path", "--random-port") 80 Eventually(session.Err).Should(Say(`Incorrect Usage: The following arguments cannot be used together: --path, --random-port`)) 81 Eventually(session).Should(Exit(1)) 82 }) 83 }) 84 85 When("both --port and --random-port are provided", func() { 86 It("fails with a message about being unable to mix --random-port with any other options", func() { 87 session := helpers.CF("create-route", "some-space", "some-domain", "--port", "1121", "--random-port") 88 Eventually(session.Err).Should(Say(`Incorrect Usage: The following arguments cannot be used together: --port, --random-port`)) 89 Eventually(session).Should(Exit(1)) 90 }) 91 }) 92 93 When("the provided port is not valid / parseable", func() { 94 It("fails with an appropriate error", func() { 95 session := helpers.CF("create-route", "some-space", "some-domain", "--port", "ABC") 96 Eventually(session.Err).Should(Say(`Incorrect Usage: invalid argument for flag '--port' \(expected int > 0\)`)) 97 Eventually(session).Should(Exit(1)) 98 }) 99 }) 100 }) 101 102 When("the environment is not setup correctly", func() { 103 When("no API endpoint is set", func() { 104 BeforeEach(func() { 105 helpers.UnsetAPI() 106 }) 107 108 It("fails with no API endpoint set message", func() { 109 session := helpers.CF("create-route", "some-space", "some-domain") 110 Eventually(session).Should(Say(`FAILED`)) 111 Eventually(session.Err).Should(Say(`No API endpoint set\. Use 'cf login' or 'cf api' to target an endpoint\.`)) 112 Eventually(session).Should(Exit(1)) 113 }) 114 }) 115 116 When("not logged in", func() { 117 BeforeEach(func() { 118 helpers.LogoutCF() 119 }) 120 121 It("fails with not logged in message", func() { 122 session := helpers.CF("create-route", "some-space", "some-domain") 123 Eventually(session).Should(Say(`FAILED`)) 124 Eventually(session.Err).Should(Say(`Not logged in\. Use 'cf login' to log in\.`)) 125 Eventually(session).Should(Exit(1)) 126 }) 127 }) 128 129 When("no organization is targeted", func() { 130 BeforeEach(func() { 131 helpers.ClearTarget() 132 }) 133 134 It("fails with 'no organization targeted' message and exits 1", func() { 135 session := helpers.CF("create-route", "some-space", "some-domain") 136 Eventually(session).Should(Say(`FAILED`)) 137 Eventually(session.Err).Should(Say(`No org targeted, use 'cf target -o ORG' to target an org\.`)) 138 Eventually(session).Should(Exit(1)) 139 }) 140 }) 141 }) 142 143 When("the environment is set up correctly", func() { 144 var ( 145 orgName string 146 spaceName string 147 ) 148 149 BeforeEach(func() { 150 orgName = helpers.NewOrgName() 151 spaceName = helpers.NewSpaceName() 152 153 helpers.SetupCF(orgName, spaceName) 154 }) 155 156 AfterEach(func() { 157 helpers.QuickDeleteOrg(orgName) 158 }) 159 160 When("the space does not exist", func() { 161 It("displays 'space not found' and exits 1", func() { 162 badSpaceName := fmt.Sprintf("%s-1", spaceName) 163 session := helpers.CF("create-route", badSpaceName, "some-domain") 164 Eventually(session).Should(Say(`FAILED`)) 165 Eventually(session.Err).Should(Say(`Space '%s' not found\.`, badSpaceName)) 166 Eventually(session).Should(Exit(1)) 167 }) 168 }) 169 170 When("the space is not specified", func() { 171 It("displays error and exits 1", func() { 172 session := helpers.CF("create-route") 173 Eventually(session.Err).Should(Say("Incorrect Usage: the required arguments `SPACE` and `DOMAIN` were not provided\n")) 174 Eventually(session.Err).Should(Say("\n")) 175 Eventually(session).Should(Say("NAME:\n")) 176 Eventually(session).Should(Exit(1)) 177 }) 178 }) 179 180 When("the domain does not exist", func() { 181 It("displays error and exits 1", func() { 182 session := helpers.CF("create-route", spaceName, "some-domain") 183 Eventually(session).Should(Say(`FAILED`)) 184 Eventually(session.Err).Should(Say(`Domain some-domain not found`)) 185 Eventually(session).Should(Exit(1)) 186 }) 187 }) 188 189 When("the domain is not specified", func() { 190 It("displays error and exits 1", func() { 191 session := helpers.CF("create-route", spaceName) 192 Eventually(session.Err).Should(Say("Incorrect Usage: the required argument `DOMAIN` was not provided\n")) 193 Eventually(session.Err).Should(Say("\n")) 194 Eventually(session).Should(Say("NAME:\n")) 195 Eventually(session).Should(Exit(1)) 196 }) 197 }) 198 199 When("the space and domain exist", func() { 200 var ( 201 userName string 202 domainName string 203 ) 204 205 BeforeEach(func() { 206 domainName = helpers.NewDomainName() 207 userName, _ = helpers.GetCredentials() 208 }) 209 210 When("the route already exists", func() { 211 var domain helpers.Domain 212 213 BeforeEach(func() { 214 domain = helpers.NewDomain(orgName, domainName) 215 domain.Create() 216 Eventually(helpers.CF("create-route", spaceName, domainName)).Should(Exit(0)) 217 }) 218 219 AfterEach(func() { 220 domain.Delete() 221 }) 222 223 It("warns the user that it has already been created and runs to completion without failing", func() { 224 session := helpers.CF("create-route", spaceName, domainName) 225 Eventually(session).Should(Say(`Creating route %s for org %s / space %s as %s\.\.\.`, domainName, orgName, spaceName, userName)) 226 Eventually(session.Err).Should(Say(`Route %s already exists\.`, domainName)) 227 Eventually(session).Should(Say(`OK`)) 228 Eventually(session).Should(Exit(0)) 229 }) 230 }) 231 232 When("the route already exists in a different space", func() { 233 var domain helpers.Domain 234 235 BeforeEach(func() { 236 domain = helpers.NewDomain(orgName, domainName) 237 domain.Create() 238 differentSpaceName := helpers.NewSpaceName() 239 helpers.CreateSpace(differentSpaceName) 240 Eventually(helpers.CF("create-route", differentSpaceName, domainName)).Should(Exit(0)) 241 }) 242 243 AfterEach(func() { 244 domain.Delete() 245 }) 246 247 It("warns the user that the route is already in use and then fails", func() { 248 session := helpers.CF("create-route", spaceName, domainName) 249 Eventually(session).Should(Say(`Creating route %s for org %s / space %s as %s\.\.\.`, domainName, orgName, spaceName, userName)) 250 Eventually(session.Err).Should(Say("The app cannot be mapped to route %s because the route exists in a different space.", domainName)) 251 Eventually(session).Should(Say(`FAILED`)) 252 Eventually(session).Should(Exit(1)) 253 }) 254 }) 255 256 When("the route does not already exist", func() { 257 When("the domain is private", func() { 258 var domain helpers.Domain 259 260 BeforeEach(func() { 261 domain = helpers.NewDomain(orgName, domainName) 262 domain.Create() 263 Eventually(helpers.CF("create-route", spaceName, domainName)).Should(Exit(0)) 264 }) 265 266 AfterEach(func() { 267 domain.Delete() 268 }) 269 270 When("no flags are used", func() { 271 It("creates the route", func() { 272 session := helpers.CF("create-route", spaceName, domainName) 273 Eventually(session).Should(Say(`Creating route %s for org %s / space %s as %s\.\.\.`, domainName, orgName, spaceName, userName)) 274 Eventually(session).Should(Exit(0)) 275 }) 276 }) 277 278 When("the path is provided but the hostname is not", func() { 279 var path string 280 281 BeforeEach(func() { 282 path = helpers.PrefixedRandomName("path") 283 }) 284 285 It("creates the route", func() { 286 session := helpers.CF("create-route", spaceName, domainName, "--path", path) 287 Eventually(session).Should(Say(`Creating route %s/%s for org %s / space %s as %s\.\.\.`, domainName, path, orgName, spaceName, userName)) 288 Eventually(session).Should(Exit(0)) 289 }) 290 }) 291 }) 292 293 When("the domain is a shared HTTP domain", func() { 294 var domain helpers.Domain 295 296 BeforeEach(func() { 297 domain = helpers.NewDomain(orgName, domainName) 298 domain.CreateShared() 299 }) 300 301 AfterEach(func() { 302 domain.DeleteShared() 303 }) 304 305 When("no flags are used", func() { 306 When("the domain already has some routes", func() { 307 var hostName string 308 309 BeforeEach(func() { 310 hostName = helpers.PrefixedRandomName("my-host") 311 Eventually(helpers.CF("create-route", spaceName, domainName, "--hostname", hostName)).Should(Exit(0)) 312 }) 313 314 It("fails with error message informing users to provide a port or random-port", func() { 315 session := helpers.CF("create-route", spaceName, domainName) 316 Eventually(session).Should(Say(`Creating route %s for org %s / space %s as %s\.\.\.`, domainName, orgName, spaceName, userName)) 317 Eventually(session).Should(Say(`FAILED`)) 318 Eventually(session.Err).Should(Say(`The route is invalid: host is required for shared-domains`)) 319 Eventually(session).Should(Exit(1)) 320 }) 321 }) 322 323 It("fails with an error message and exits 1", func() { 324 session := helpers.CF("create-route", spaceName, domainName) 325 Eventually(session).Should(Say(`Creating route %s for org %s / space %s as %s\.\.\.`, domainName, orgName, spaceName, userName)) 326 Eventually(session.Err).Should(Say(`The route is invalid: host is required for shared-domains`)) 327 Eventually(session).Should(Exit(1)) 328 }) 329 }) 330 331 When("TCP flag options are provided", func() { 332 It("fails with an error message and exits 1", func() { 333 port := "90230" 334 session := helpers.CF("create-route", spaceName, domainName, "--port", port) 335 Eventually(session).Should(Say(`Creating route %s:%s for org %s / space %s as %s\.\.\.`, domainName, port, orgName, spaceName, userName)) 336 Eventually(session.Err).Should(Say(`Port not allowed in HTTP domain %s`, domainName)) 337 Eventually(session).Should(Exit(1)) 338 }) 339 340 It("fails with an error message and exits 1", func() { 341 session := helpers.CF("create-route", spaceName, domainName, "--random-port") 342 Eventually(session).Should(Say(`Creating route %s for org %s / space %s as %s\.\.\.`, domainName, orgName, spaceName, userName)) 343 Eventually(session.Err).Should(Say(`Port not allowed in HTTP domain %s`, domainName)) 344 Eventually(session).Should(Exit(1)) 345 }) 346 }) 347 348 When("the hostname is provided", func() { 349 var hostName string 350 351 BeforeEach(func() { 352 hostName = helpers.PrefixedRandomName("my-host") 353 }) 354 355 When("no path is provided", func() { 356 It("creates the route", func() { 357 session := helpers.CF("create-route", spaceName, domainName, "--hostname", hostName) 358 Eventually(session).Should(Say(`Creating route %s.%s for org %s / space %s as %s\.\.\.`, hostName, domainName, orgName, spaceName, userName)) 359 Eventually(session).Should(Exit(0)) 360 }) 361 }) 362 363 When("a path is provided", func() { 364 It("creates the route", func() { 365 path := fmt.Sprintf("/%s", helpers.PrefixedRandomName("path")) 366 session := helpers.CF("create-route", spaceName, domainName, "--hostname", hostName, "--path", path) 367 Eventually(session).Should(Say(`Creating route %s.%s%s for org %s / space %s as %s\.\.\.`, hostName, domainName, path, orgName, spaceName, userName)) 368 Eventually(session).Should(Exit(0)) 369 }) 370 }) 371 }) 372 373 When("the hostname is not provided", func() { 374 var path string 375 376 BeforeEach(func() { 377 path = helpers.PrefixedRandomName("path") 378 }) 379 380 When("the path is provided", func() { 381 It("fails with an error message and exits 1", func() { 382 session := helpers.CF("create-route", spaceName, domainName, "--path", path) 383 Eventually(session).Should(Say(`Creating route %s/%s for org %s / space %s as %s\.\.\.`, domainName, path, orgName, spaceName, userName)) 384 Eventually(session.Err).Should(Say(`The route is invalid: host is required for shared-domains`)) 385 Eventually(session).Should(Exit(1)) 386 }) 387 }) 388 }) 389 }) 390 391 When("the domain is a shared TCP domain", func() { 392 var domain helpers.Domain 393 394 BeforeEach(func() { 395 helpers.SkipIfVersionLessThan(ccversion.MinVersionRoutingV3) 396 domain = helpers.NewDomain(orgName, domainName) 397 domain.CreateWithRouterGroup(helpers.FindOrCreateTCPRouterGroup(GinkgoParallelNode())) 398 }) 399 400 AfterEach(func() { 401 domain.DeleteShared() 402 }) 403 404 When("HTTP flag options are provided", func() { 405 It("fails with an error message and exits 1", func() { 406 hostName := helpers.PrefixedRandomName("host-") 407 path := helpers.PrefixedRandomName("path-") 408 session := helpers.CF("create-route", spaceName, domainName, "--hostname", hostName, "--path", path) 409 Eventually(session).Should(Say(`Creating route %s.%s/%s for org %s / space %s as %s\.\.\.`, hostName, domainName, path, orgName, spaceName, userName)) 410 Eventually(session.Err).Should(Say(`The route is invalid: For TCP routes you must specify a port or request a random one.`)) 411 Eventually(session).Should(Exit(1)) 412 }) 413 }) 414 415 When("a port is provided", func() { 416 It("creates the route", func() { 417 port := "1025" 418 session := helpers.CF("create-route", spaceName, domainName, "--port", port) 419 Eventually(session).Should(Say(`Creating route %s:%s for org %s / space %s as %s\.\.\.`, domainName, port, orgName, spaceName, userName)) 420 Eventually(session).Should(Exit(0)) 421 }) 422 }) 423 424 When("--random-port is provided", func() { 425 It("creates the route", func() { 426 session := helpers.CF("create-route", spaceName, domainName, "--random-port") 427 Eventually(session).Should(Say(`Creating route %s for org %s / space %s as %s\.\.\.`, domainName, orgName, spaceName, userName)) 428 Eventually(session).Should(Say(`Route %s:\d+ has been created\.`, domainName)) 429 Eventually(session).Should(Exit(0)) 430 }) 431 432 When("there are other routes in the domain we want to create the route with", func() { 433 BeforeEach(func() { 434 session := helpers.CF("create-route", spaceName, domainName, "--random-port") 435 Eventually(session).Should(Say(`Route %s:\d+ has been created\.`, domainName)) 436 Eventually(session).Should(Exit(0)) 437 }) 438 439 It("should determine that the random route does not already exist, and create it", func() { 440 session := helpers.CF("create-route", spaceName, domainName, "--random-port") 441 Eventually(session).Should(Say(`Creating route %s for org %s / space %s as %s\.\.\.`, domainName, orgName, spaceName, userName)) 442 Eventually(session).Should(Say(`Route %s:\d+ has been created\.`, domainName)) 443 Eventually(session).Should(Exit(0)) 444 }) 445 }) 446 }) 447 448 When("no options are provided", func() { 449 It("fails with error message informing users to provide a port or random-port", func() { 450 session := helpers.CF("create-route", spaceName, domainName) 451 Eventually(session).Should(Say(`Creating route %s for org %s / space %s as %s\.\.\.`, domainName, orgName, spaceName, userName)) 452 Eventually(session).Should(Say(`FAILED`)) 453 Eventually(session.Err).Should(Say(`The route is invalid: For TCP routes you must specify a port or request a random one.`)) 454 Eventually(session).Should(Exit(1)) 455 }) 456 457 When("the domain already has some routes", func() { 458 BeforeEach(func() { 459 Eventually(helpers.CF("create-route", spaceName, domainName, "--random-port")).Should(Exit(0)) 460 }) 461 462 It("fails with error message informing users to provide a port or random-port", func() { 463 session := helpers.CF("create-route", spaceName, domainName) 464 Eventually(session).Should(Say(`Creating route %s for org %s / space %s as %s\.\.\.`, domainName, orgName, spaceName, userName)) 465 Eventually(session).Should(Say(`FAILED`)) 466 Eventually(session.Err).Should(Say(`The route is invalid: For TCP routes you must specify a port or request a random one.`)) 467 Eventually(session).Should(Exit(1)) 468 }) 469 }) 470 }) 471 }) 472 }) 473 }) 474 }) 475 })