github.com/loafoe/cli@v7.1.0+incompatible/integration/v7/isolated/delete_route_command_test.go (about) 1 package isolated 2 3 import ( 4 "regexp" 5 6 . "code.cloudfoundry.org/cli/cf/util/testhelpers/matchers" 7 8 "code.cloudfoundry.org/cli/integration/helpers" 9 . "github.com/onsi/ginkgo" 10 . "github.com/onsi/gomega" 11 . "github.com/onsi/gomega/gbytes" 12 . "github.com/onsi/gomega/gexec" 13 ) 14 15 var _ = Describe("delete-route command", func() { 16 Context("Help", func() { 17 It("appears in cf help -a", func() { 18 session := helpers.CF("help", "-a") 19 Eventually(session).Should(Exit(0)) 20 Expect(session).To(HaveCommandInCategoryWithDescription("delete-route", "ROUTES", "Delete a route")) 21 }) 22 23 It("displays the help information", func() { 24 session := helpers.CF("delete-route", "--help") 25 Eventually(session).Should(Say(`NAME:`)) 26 Eventually(session).Should(Say(`delete-route - Delete a route\n`)) 27 Eventually(session).Should(Say(`\n`)) 28 29 Eventually(session).Should(Say(`USAGE:`)) 30 Eventually(session).Should(Say(`Delete an HTTP route:\n`)) 31 Eventually(session).Should(Say(`cf delete-route DOMAIN \[--hostname HOSTNAME\] \[--path PATH\] \[-f\]\n`)) 32 Eventually(session).Should(Say(`Delete a TCP route:\n`)) 33 Eventually(session).Should(Say(`cf delete-route DOMAIN --port PORT \[-f\]\n`)) 34 Eventually(session).Should(Say(`\n`)) 35 36 Eventually(session).Should(Say(`EXAMPLES:`)) 37 Eventually(session).Should(Say(`cf delete-route example.com\s+# example.com`)) 38 Eventually(session).Should(Say(`cf delete-route example.com --hostname myhost\s+# myhost.example.com`)) 39 Eventually(session).Should(Say(`cf delete-route example.com --hostname myhost --path foo\s+# myhost.example.com/foo`)) 40 Eventually(session).Should(Say(`cf delete-route example.com --port 5000\s+# example.com:5000`)) 41 Eventually(session).Should(Say(`\n`)) 42 43 Eventually(session).Should(Say(`OPTIONS:`)) 44 Eventually(session).Should(Say(`-f\s+Force deletion without confirmation`)) 45 Eventually(session).Should(Say(`--hostname, -n\s+Hostname used to identify the HTTP route \(required for shared domains\)`)) 46 Eventually(session).Should(Say(`--path\s+Path used to identify the HTTP route`)) 47 Eventually(session).Should(Say(`--port\s+Port used to identify the TCP route`)) 48 Eventually(session).Should(Say(`\n`)) 49 50 Eventually(session).Should(Say(`SEE ALSO:`)) 51 Eventually(session).Should(Say(`delete-orphaned-routes, routes, unmap-route`)) 52 53 Eventually(session).Should(Exit(0)) 54 }) 55 }) 56 57 When("the environment is not setup correctly", func() { 58 It("fails with the appropriate errors", func() { 59 helpers.CheckEnvironmentTargetedCorrectly(true, false, ReadOnlyOrg, "delete-route", "some-domain") 60 }) 61 }) 62 63 When("the environment is set up correctly", func() { 64 var ( 65 buffer *Buffer 66 orgName string 67 spaceName string 68 domainName string 69 ) 70 71 BeforeEach(func() { 72 buffer = NewBuffer() 73 orgName = helpers.NewOrgName() 74 spaceName = helpers.NewSpaceName() 75 domainName = helpers.NewDomainName() 76 77 helpers.SetupCF(orgName, spaceName) 78 }) 79 80 AfterEach(func() { 81 helpers.QuickDeleteOrg(orgName) 82 }) 83 When("the -f flag is not given", func() { 84 var ( 85 domain helpers.Domain 86 ) 87 88 BeforeEach(func() { 89 domain = helpers.NewDomain(orgName, domainName) 90 domain.CreatePrivate() 91 }) 92 93 AfterEach(func() { 94 domain.Delete() 95 }) 96 97 When("the user enters 'y'", func() { 98 BeforeEach(func() { 99 _, err := buffer.Write([]byte("y\n")) 100 Expect(err).ToNot(HaveOccurred()) 101 102 Eventually(helpers.CF("create-route", domainName)).Should(Exit(0)) 103 }) 104 105 When("the user attempts to delete a route with a private domain", func() { 106 It("it asks for confirmation and deletes the domain", func() { 107 session := helpers.CFWithStdin(buffer, "delete-route", domainName) 108 Eventually(session).Should(Say("This action impacts all apps using this route.")) 109 Eventually(session).Should(Say("Deleting this route will make apps unreachable via this route.")) 110 Eventually(session).Should(Say(`Really delete the route %s\?`, domainName)) 111 Eventually(session).Should(Say(regexp.QuoteMeta(`Deleting route %s...`), domainName)) 112 Eventually(session).Should(Say("OK")) 113 Eventually(session).Should(Exit(0)) 114 115 Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete")) 116 }) 117 }) 118 }) 119 120 When("the user enters 'n'", func() { 121 BeforeEach(func() { 122 _, err := buffer.Write([]byte("n\n")) 123 Expect(err).ToNot(HaveOccurred()) 124 }) 125 126 It("it asks for confirmation and does not delete the domain", func() { 127 session := helpers.CFWithStdin(buffer, "delete-route", domainName) 128 Eventually(session).Should(Say("This action impacts all apps using this route.")) 129 Eventually(session).Should(Say("Deleting this route will make apps unreachable via this route.")) 130 Eventually(session).Should(Say(`Really delete the route %s\?`, domainName)) 131 Eventually(session).Should(Say(`'%s' has not been deleted`, domainName)) 132 Consistently(session).ShouldNot(Say("OK")) 133 Eventually(session).Should(Exit(0)) 134 }) 135 }) 136 }) 137 138 When("the -f flag is given", func() { 139 BeforeEach(func() { 140 domainName = helpers.NewDomainName() 141 }) 142 143 When("the route does not exist", func() { 144 var ( 145 domain helpers.Domain 146 ) 147 148 BeforeEach(func() { 149 domain = helpers.NewDomain(orgName, domainName) 150 domain.CreatePrivate() 151 }) 152 153 AfterEach(func() { 154 domain.Delete() 155 }) 156 157 It("warns the user that it has already been deleted and runs to completion without failing", func() { 158 session := helpers.CF("delete-route", domainName, "-f") 159 Eventually(session).Should(Say(`Deleting route %s\.\.\.`, domainName)) 160 Eventually(session).Should(Say(`Unable to delete\. Route with domain '%s' not found\.`, domainName)) 161 Eventually(session).Should(Exit(0)) 162 }) 163 }) 164 165 When("the route exist", func() { 166 When("the domain is private", func() { 167 var domain helpers.Domain 168 169 BeforeEach(func() { 170 domain = helpers.NewDomain(orgName, domainName) 171 domain.Create() 172 }) 173 174 AfterEach(func() { 175 domain.Delete() 176 }) 177 178 When("no flags are used", func() { 179 It("deletes the route", func() { 180 Eventually(helpers.CF("create-route", domainName)).Should(Exit(0)) 181 182 session := helpers.CF("delete-route", domainName, "-f") 183 Eventually(session).Should(Say(`Deleting route %s\.\.\.`, domainName)) 184 Eventually(session).Should(Say(`OK`)) 185 Eventually(session).Should(Exit(0)) 186 187 Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete")) 188 189 session = helpers.CF("routes") 190 Consistently(session).ShouldNot(Say(`%s`, domainName)) 191 Eventually(session).Should(Exit(0)) 192 }) 193 }) 194 195 When("passing in a hostname", func() { 196 It("deletes the route with the hostname", func() { 197 hostname := "tiramisu" 198 Eventually(helpers.CF("create-route", domainName, "-n", hostname)).Should(Exit(0)) 199 200 session := helpers.CF("delete-route", domainName, "-n", hostname, "-f") 201 Eventually(session).Should(Say(`Deleting route %s\.%s\.\.\.`, hostname, domainName)) 202 Eventually(session).Should(Say(`OK`)) 203 Eventually(session).Should(Exit(0)) 204 205 Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete")) 206 207 session = helpers.CF("routes") 208 Consistently(session).ShouldNot(Say(`%s\s+%s`, hostname, domainName)) 209 Eventually(session).Should(Exit(0)) 210 }) 211 }) 212 213 When("passing in a path", func() { 214 It("deletes the route with the path", func() { 215 path := "/flan" 216 Eventually(helpers.CF("create-route", domainName, "--path", path)).Should(Exit(0)) 217 218 session := helpers.CF("delete-route", domainName, "--path", path, "-f") 219 Eventually(session).Should(Say(`Deleting route %s%s\.\.\.`, domainName, path)) 220 Eventually(session).Should(Say(`OK`)) 221 Eventually(session).Should(Exit(0)) 222 223 Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete")) 224 225 session = helpers.CF("routes") 226 Consistently(session).ShouldNot(Say(`%s\s+%s`, domainName, path)) 227 Eventually(session).Should(Exit(0)) 228 }) 229 }) 230 231 When("passing in hostname and path with a leading '/'", func() { 232 It("deletes the route with hostname and path", func() { 233 hostname := "tiramisu" 234 pathString := "/recipes" 235 Eventually(helpers.CF("create-route", domainName, "-n", hostname, "--path", pathString)).Should(Exit(0)) 236 237 session := helpers.CF("delete-route", domainName, "-n", hostname, "--path", pathString, "-f") 238 Eventually(session).Should(Say(`Deleting route %s\.%s%s\.\.\.`, hostname, domainName, pathString)) 239 Eventually(session).Should(Say(`OK`)) 240 Eventually(session).Should(Exit(0)) 241 242 Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete")) 243 244 session = helpers.CF("routes") 245 Consistently(session).ShouldNot(Say(`%s\s+%s\s+%s`, hostname, domainName, pathString)) 246 Eventually(session).Should(Exit(0)) 247 }) 248 }) 249 250 When("passing in hostname and path without a leading '/'", func() { 251 It("deletes the route with hostname and path", func() { 252 hostname := "tiramisu" 253 pathString := "more-recipes" 254 Eventually(helpers.CF("create-route", domainName, "-n", hostname, "--path", pathString)).Should(Exit(0)) 255 256 session := helpers.CF("delete-route", domainName, "-n", hostname, "--path", pathString, "-f") 257 Eventually(session).Should(Say(`Deleting route %s\.%s\/%s\.\.\.`, hostname, domainName, pathString)) 258 Eventually(session).Should(Say(`OK`)) 259 Eventually(session).Should(Exit(0)) 260 261 Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete")) 262 263 session = helpers.CF("routes") 264 Consistently(session).ShouldNot(Say(`%s\s+%s\s+\/%s`, hostname, domainName, pathString)) 265 Eventually(session).Should(Exit(0)) 266 }) 267 }) 268 269 When("passing in empty hostname and path", func() { 270 It("deletes the route with hostname and path", func() { 271 hostname := "" 272 pathString := "/recipes" 273 Eventually(helpers.CF("create-route", domainName, "-n", hostname, "--path", pathString)).Should(Exit(0)) 274 275 session := helpers.CF("delete-route", domainName, "-n", hostname, "--path", pathString, "-f") 276 Eventually(session).Should(Say(`Deleting route %s%s\.\.\.`, domainName, pathString)) 277 Eventually(session).Should(Say(`OK`)) 278 Eventually(session).Should(Exit(0)) 279 280 Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete")) 281 282 session = helpers.CF("routes") 283 Consistently(session).ShouldNot(Say(`%s\s+%s`, domainName, pathString)) 284 Eventually(session).Should(Exit(0)) 285 }) 286 }) 287 288 When("passing in path without specifying a hostname", func() { 289 It("deletes the route with hostname and path", func() { 290 pathString := "/recipes" 291 Eventually(helpers.CF("create-route", domainName, "--path", pathString)).Should(Exit(0)) 292 293 session := helpers.CF("delete-route", domainName, "--path", pathString, "-f") 294 Eventually(session).Should(Say(`Deleting route %s%s\.\.\.`, domainName, pathString)) 295 Eventually(session).Should(Say(`OK`)) 296 Eventually(session).Should(Exit(0)) 297 298 Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete")) 299 300 session = helpers.CF("routes") 301 Consistently(session).ShouldNot(Say(`%s\s+%s`, domainName, pathString)) 302 Eventually(session).Should(Exit(0)) 303 }) 304 }) 305 306 }) 307 308 When("the domain is shared", func() { 309 var domain helpers.Domain 310 311 BeforeEach(func() { 312 domain = helpers.NewDomain("", domainName) 313 domain.CreateShared() 314 }) 315 316 AfterEach(func() { 317 domain.DeleteShared() 318 }) 319 320 When("no flags are used", func() { 321 It("fails with a helpful message", func() { 322 session := helpers.CF("delete-route", domainName, "-f") 323 Eventually(session).Should(Say(`Deleting route %s\.\.\.`, domainName)) 324 Eventually(session).Should(Say(`Unable to delete\. Route with domain '%s' not found\.`, domainName)) 325 Eventually(session).Should(Say(`OK`)) 326 Eventually(session).Should(Exit(0)) 327 }) 328 }) 329 330 When("passing in a hostname", func() { 331 It("deletes the route with the hostname", func() { 332 hostname := "tiramisu" 333 Eventually(helpers.CF("create-route", domainName, "-n", hostname)).Should(Exit(0)) 334 335 session := helpers.CF("delete-route", domainName, "-n", hostname, "-f") 336 Eventually(session).Should(Say(`Deleting route %s\.%s\.\.\.`, hostname, domainName)) 337 Eventually(session).Should(Say(`OK`)) 338 Eventually(session).Should(Exit(0)) 339 340 Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete")) 341 }) 342 }) 343 344 When("passing in hostname and path with a leading '/'", func() { 345 It("deletes the route with hostname and path", func() { 346 hostname := "tiramisu" 347 pathString := "/recipes" 348 Eventually(helpers.CF("create-route", domainName, "-n", hostname, "--path", pathString)).Should(Exit(0)) 349 350 session := helpers.CF("delete-route", domainName, "-n", hostname, "--path", pathString, "-f") 351 Eventually(session).Should(Say(`Deleting route %s\.%s%s\.\.\.`, hostname, domainName, pathString)) 352 Eventually(session).Should(Say(`OK`)) 353 Eventually(session).Should(Exit(0)) 354 355 Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete")) 356 }) 357 }) 358 359 When("passing in hostname and path without a leading '/'", func() { 360 It("deletes the route with hostname and path", func() { 361 hostname := "tiramisu" 362 pathString := "more-recipes" 363 Eventually(helpers.CF("create-route", domainName, "-n", hostname, "--path", pathString)).Should(Exit(0)) 364 365 session := helpers.CF("delete-route", domainName, "-n", hostname, "--path", pathString, "-f") 366 Eventually(session).Should(Say(`Deleting route %s\.%s\/%s\.\.\.`, hostname, domainName, pathString)) 367 Eventually(session).Should(Say(`OK`)) 368 Eventually(session).Should(Exit(0)) 369 370 Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete")) 371 }) 372 }) 373 374 When("The the route has a port", func() { 375 var tcpDomain helpers.Domain 376 var port string 377 378 BeforeEach(func() { 379 port = "1026" 380 tcpDomainName := helpers.NewDomainName() 381 tcpDomain = helpers.NewDomain(orgName, tcpDomainName) 382 tcpDomain.CreateWithRouterGroup(helpers.FindOrCreateTCPRouterGroup(0)) 383 384 Eventually(helpers.CF("create-route", tcpDomainName, "--port", port)).Should(Exit(0)) 385 }) 386 387 AfterEach(func() { 388 tcpDomain.DeleteShared() 389 }) 390 391 It("deletes the route with the port", func() { 392 session := helpers.CF("delete-route", tcpDomain.Name, "--port", port, "-f") 393 Eventually(session).Should(Say(`Deleting route %s:%s\.\.\.`, tcpDomain.Name, port)) 394 Eventually(session).Should(Say(`OK`)) 395 Eventually(session).Should(Exit(0)) 396 session = helpers.CF("routes") 397 Consistently(session).ShouldNot(Say(`%s`, tcpDomain.Name)) 398 Eventually(session).Should(Exit(0)) 399 }) 400 }) 401 }) 402 }) 403 }) 404 405 When("the domain does not exist", func() { 406 It("displays error and exits 0", func() { 407 session := helpers.CF("delete-route", "some-domain", "-f") 408 Eventually(session).Should(Say("OK")) 409 Eventually(session).Should(Exit(0)) 410 Expect(string(session.Err.Contents())).To(Equal("Domain 'some-domain' not found.\n")) 411 }) 412 }) 413 414 When("the domain is not specified", func() { 415 It("displays error and exits 1", func() { 416 session := helpers.CF("delete-route") 417 Eventually(session.Err).Should(Say("Incorrect Usage: the required argument `DOMAIN` was not provided\n")) 418 Eventually(session.Err).Should(Say("\n")) 419 Eventually(session).Should(Say("NAME:\n")) 420 Eventually(session).Should(Exit(1)) 421 }) 422 }) 423 }) 424 })