github.com/sleungcy-sap/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  })