github.com/sleungcy/cli@v7.1.0+incompatible/integration/v6/isolated/disable_service_access_command_test.go (about)

     1  package isolated
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/integration/helpers"
     5  	"code.cloudfoundry.org/cli/integration/helpers/servicebrokerstub"
     6  	. "github.com/onsi/ginkgo"
     7  	. "github.com/onsi/gomega"
     8  	. "github.com/onsi/gomega/gbytes"
     9  	. "github.com/onsi/gomega/gexec"
    10  )
    11  
    12  var _ = Describe("disable service access command", func() {
    13  	Describe("help", func() {
    14  		When("--help flag is set", func() {
    15  			It("displays command usage to output", func() {
    16  				session := helpers.CF("disable-service-access", "--help")
    17  				Eventually(session).Should(Say("NAME:"))
    18  				Eventually(session).Should(Say("\\s+disable-service-access - Disable access to a service or service plan for one or all orgs"))
    19  				Eventually(session).Should(Say("USAGE:"))
    20  				Eventually(session).Should(Say("\\s+cf disable-service-access SERVICE \\[-b BROKER\\] \\[-p PLAN\\] \\[-o ORG\\]"))
    21  				Eventually(session).Should(Say("OPTIONS:"))
    22  				Eventually(session).Should(Say("\\s+\\-b\\s+Disable access to a service from a particular service broker. Required when service name is ambiguous"))
    23  				Eventually(session).Should(Say("\\s+\\-o\\s+Disable access for a specified organization"))
    24  				Eventually(session).Should(Say("\\s+\\-p\\s+Disable access to a specified service plan"))
    25  				Eventually(session).Should(Say("SEE ALSO:"))
    26  				Eventually(session).Should(Say("\\s+marketplace, service-access, service-brokers"))
    27  				Eventually(session).Should(Exit(0))
    28  			})
    29  		})
    30  
    31  		When("no service argument was provided", func() {
    32  			It("displays a warning, the help text, and exits 1", func() {
    33  				session := helpers.CF("disable-service-access")
    34  				Eventually(session.Err).Should(Say("Incorrect Usage: the required argument `SERVICE` was not provided"))
    35  				Eventually(session).Should(Say("NAME:"))
    36  				Eventually(session).Should(Say("\\s+disable-service-access - Disable access to a service or service plan for one or all orgs"))
    37  				Eventually(session).Should(Say("USAGE:"))
    38  				Eventually(session).Should(Say("\\s+cf disable-service-access SERVICE \\[-b BROKER\\] \\[-p PLAN\\] \\[-o ORG\\]"))
    39  				Eventually(session).Should(Say("OPTIONS:"))
    40  				Eventually(session).Should(Say("\\s+\\-b\\s+Disable access to a service from a particular service broker. Required when service name is ambiguous"))
    41  				Eventually(session).Should(Say("\\s+\\-o\\s+Disable access for a specified organization"))
    42  				Eventually(session).Should(Say("\\s+\\-p\\s+Disable access to a specified service plan"))
    43  				Eventually(session).Should(Say("SEE ALSO:"))
    44  				Eventually(session).Should(Say("\\s+marketplace, service-access, service-brokers"))
    45  				Eventually(session).Should(Exit(1))
    46  			})
    47  		})
    48  
    49  		When("an extra argument is provided", func() {
    50  			It("displays an error, and exits 1", func() {
    51  				session := helpers.CF("disable-service-access", "a-service", "extra-arg")
    52  				Eventually(session).Should(Say("FAILED"))
    53  				Eventually(session.Err).Should(Say(`Incorrect Usage: unexpected argument "extra-arg"`))
    54  				Eventually(session).Should(Say("NAME:"))
    55  				Eventually(session).Should(Say("\\s+disable-service-access - Disable access to a service or service plan for one or all orgs"))
    56  				Eventually(session).Should(Say("USAGE:"))
    57  				Eventually(session).Should(Say("\\s+cf disable-service-access SERVICE \\[-b BROKER\\] \\[-p PLAN\\] \\[-o ORG\\]"))
    58  				Eventually(session).Should(Say("OPTIONS:"))
    59  				Eventually(session).Should(Say("\\s+\\-b\\s+Disable access to a service from a particular service broker. Required when service name is ambiguous"))
    60  				Eventually(session).Should(Say("\\s+\\-o\\s+Disable access for a specified organization"))
    61  				Eventually(session).Should(Say("\\s+\\-p\\s+Disable access to a specified service plan"))
    62  				Eventually(session).Should(Say("SEE ALSO:"))
    63  				Eventually(session).Should(Say("\\s+marketplace, service-access, service-brokers"))
    64  				Eventually(session).Should(Exit(1))
    65  			})
    66  		})
    67  	})
    68  
    69  	Context("not logged in", func() {
    70  		BeforeEach(func() {
    71  			helpers.LogoutCF()
    72  		})
    73  
    74  		It("displays FAILED, an informative error message, and exits 1", func() {
    75  			session := helpers.CF("disable-service-access", "does-not-matter")
    76  			Eventually(session).Should(Say("FAILED"))
    77  			Eventually(session.Err).Should(Say("Not logged in. Use 'cf login' or 'cf login --sso' to log in."))
    78  			Eventually(session).Should(Exit(1))
    79  		})
    80  	})
    81  
    82  	Context("logged in", func() {
    83  
    84  		var username string
    85  
    86  		BeforeEach(func() {
    87  			username, _ = helpers.GetCredentials()
    88  			helpers.LoginCF()
    89  		})
    90  
    91  		Context("the service does not exist", func() {
    92  			When("only the service is specified", func() {
    93  				It("displays FAILED, an informative error message, and exits 1", func() {
    94  					session := helpers.CF("disable-service-access", "some-service")
    95  					Eventually(session).Should(Say("Disabling access to all plans of service some-service for all orgs as %s\\.\\.\\.", username))
    96  					Eventually(session.Err).Should(Say("Service offering 'some-service' not found"))
    97  					Eventually(session).Should(Say("FAILED"))
    98  					Eventually(session).Should(Exit(1))
    99  				})
   100  			})
   101  		})
   102  
   103  		Context("a service broker is registered", func() {
   104  			var (
   105  				orgName   string
   106  				spaceName string
   107  				broker    *servicebrokerstub.ServiceBrokerStub
   108  			)
   109  
   110  			BeforeEach(func() {
   111  				orgName = helpers.NewOrgName()
   112  				spaceName = helpers.NewSpaceName()
   113  				helpers.SetupCF(orgName, spaceName)
   114  
   115  				broker = servicebrokerstub.New().WithPlans(2).Create().Register()
   116  			})
   117  
   118  			AfterEach(func() {
   119  				helpers.TargetOrgAndSpace(orgName, spaceName)
   120  				broker.Forget()
   121  				helpers.QuickDeleteOrg(orgName)
   122  			})
   123  
   124  			When("a service has access enabled for all orgs and plans", func() {
   125  				BeforeEach(func() {
   126  					session := helpers.CF("enable-service-access", broker.FirstServiceOfferingName())
   127  					Eventually(session).Should(Exit(0))
   128  				})
   129  
   130  				When("a service name is provided", func() {
   131  					It("displays an informative message, exits 0, and disables the service for all orgs", func() {
   132  						session := helpers.CF("disable-service-access", broker.FirstServiceOfferingName())
   133  						Eventually(session).Should(Say("Disabling access to all plans of service %s for all orgs as %s...", broker.FirstServiceOfferingName(), username))
   134  						Eventually(session).Should(Say("OK"))
   135  						Eventually(session).Should(Exit(0))
   136  
   137  						session = helpers.CF("service-access", "-e", broker.FirstServiceOfferingName())
   138  						Eventually(session).Should(Exit(0))
   139  						Eventually(session).Should(Say("broker:\\s+%s", broker.Name))
   140  						Eventually(session).Should(Say("%s\\s+%s\\s+none",
   141  							broker.FirstServiceOfferingName(),
   142  							broker.FirstServicePlanName(),
   143  						))
   144  					})
   145  				})
   146  
   147  				When("a service name and plan name are provided", func() {
   148  					It("displays an informative message, exits 0, and disables the plan for all orgs", func() {
   149  						session := helpers.CF("disable-service-access", broker.FirstServiceOfferingName(), "-p", broker.FirstServicePlanName())
   150  						Eventually(session).Should(Say("Disabling access of plan %s for service %s as %s...", broker.FirstServicePlanName(), broker.FirstServiceOfferingName(), username))
   151  						Eventually(session).Should(Say("OK"))
   152  						Eventually(session).Should(Exit(0))
   153  
   154  						session = helpers.CF("service-access", "-e", broker.FirstServiceOfferingName())
   155  						Eventually(session).Should(Exit(0))
   156  
   157  						Expect(string(session.Out.Contents())).To(MatchRegexp(
   158  							`%s\s+%s\s+none`,
   159  							broker.FirstServiceOfferingName(),
   160  							broker.FirstServicePlanName(),
   161  						))
   162  
   163  						Expect(string(session.Out.Contents())).To(MatchRegexp(
   164  							`%s\s+%s\s+all`,
   165  							broker.FirstServiceOfferingName(),
   166  							broker.Services[0].Plans[1].Name,
   167  						))
   168  					})
   169  				})
   170  			})
   171  
   172  			When("a service has access enabled for multiple orgs and a specific plan", func() {
   173  				var orgName2 string
   174  
   175  				BeforeEach(func() {
   176  					orgName2 = helpers.NewOrgName()
   177  					spaceName2 := helpers.NewSpaceName()
   178  					helpers.CreateOrgAndSpace(orgName2, spaceName2)
   179  					Eventually(helpers.CF("enable-service-access", broker.FirstServiceOfferingName(), "-o", orgName, "-p", broker.FirstServicePlanName())).Should(Exit(0))
   180  					Eventually(helpers.CF("enable-service-access", broker.FirstServiceOfferingName(), "-o", orgName2, "-p", broker.FirstServicePlanName())).Should(Exit(0))
   181  				})
   182  
   183  				AfterEach(func() {
   184  					helpers.QuickDeleteOrg(orgName2)
   185  				})
   186  
   187  				When("a service name and org is provided", func() {
   188  					It("displays an informative message, and exits 0, and disables the service for the given org", func() {
   189  						session := helpers.CF("disable-service-access", broker.FirstServiceOfferingName(), "-o", orgName)
   190  						Eventually(session).Should(Say("Disabling access to all plans of service %s for the org %s as %s...", broker.FirstServiceOfferingName(), orgName, username))
   191  						Eventually(session).Should(Say("OK"))
   192  						Eventually(session).Should(Exit(0))
   193  
   194  						session = helpers.CF("service-access", "-e", broker.FirstServiceOfferingName())
   195  						Eventually(session).Should(Exit(0))
   196  						Eventually(session).Should(Say("broker:\\s+%s", broker.Name))
   197  						Eventually(session).Should(Say("%s\\s+%s\\s+limited\\s+%s",
   198  							broker.FirstServiceOfferingName(),
   199  							broker.FirstServicePlanName(),
   200  							orgName2,
   201  						))
   202  					})
   203  				})
   204  
   205  				When("a service name, plan name and org is provided", func() {
   206  					It("displays an informative message, and exits 0, disables the service for the given org and plan", func() {
   207  						session := helpers.CF("disable-service-access", broker.FirstServiceOfferingName(), "-p", broker.FirstServicePlanName(), "-o", orgName)
   208  						Eventually(session).Should(Say("Disabling access to plan %s of service %s for org %s as %s...", broker.FirstServicePlanName(), broker.FirstServiceOfferingName(), orgName, username))
   209  						Eventually(session).Should(Say("OK"))
   210  						Eventually(session).Should(Exit(0))
   211  
   212  						session = helpers.CF("service-access", "-e", broker.FirstServiceOfferingName())
   213  						Eventually(session).Should(Exit(0))
   214  						Eventually(session).Should(Say("broker:\\s+%s", broker.Name))
   215  						Eventually(session).Should(Say("%s\\s+%s\\s+limited\\s+%s",
   216  							broker.FirstServiceOfferingName(),
   217  							broker.FirstServicePlanName(),
   218  							orgName2,
   219  						))
   220  					})
   221  				})
   222  			})
   223  
   224  			When("the org does not exist", func() {
   225  				It("displays FAILED, an informative error message, and exits 1", func() {
   226  					session := helpers.CF("disable-service-access", broker.FirstServiceOfferingName(), "-o", "not-a-real-org")
   227  					Eventually(session).Should(Say("Disabling access to all plans of service %s for the org not-a-real-org as %s...", broker.FirstServiceOfferingName(), username))
   228  					Eventually(session).Should(Say("FAILED"))
   229  					Eventually(session.Err).Should(Say("Organization 'not-a-real-org' not found"))
   230  					Eventually(session).Should(Exit(1))
   231  				})
   232  			})
   233  
   234  			When("the plan does not exist", func() {
   235  				It("displays FAILED, an informative error message, and exits 1", func() {
   236  					session := helpers.CF("disable-service-access", broker.FirstServiceOfferingName(), "-p", "plan-does-not-exist")
   237  					Eventually(session).Should(Say("Disabling access of plan plan-does-not-exist for service %s as %s...", broker.FirstServiceOfferingName(), username))
   238  					Eventually(session).Should(Say("FAILED"))
   239  					Eventually(session.Err).Should(Say("The plan plan-does-not-exist could not be found for service %s", broker.FirstServiceOfferingName()))
   240  					Eventually(session).Should(Exit(1))
   241  				})
   242  			})
   243  
   244  			When("two services with the same name are enabled", func() {
   245  				var secondBroker *servicebrokerstub.ServiceBrokerStub
   246  
   247  				BeforeEach(func() {
   248  					secondBroker = servicebrokerstub.New()
   249  					secondBroker.Services[0].Name = broker.FirstServiceOfferingName()
   250  					secondBroker.Create().Register()
   251  					Eventually(helpers.CF("enable-service-access", broker.FirstServiceOfferingName(), "-b", broker.Name)).Should(Exit(0))
   252  					Eventually(helpers.CF("enable-service-access", secondBroker.FirstServiceOfferingName(), "-b", secondBroker.Name)).Should(Exit(0))
   253  				})
   254  
   255  				AfterEach(func() {
   256  					secondBroker.Forget()
   257  				})
   258  
   259  				When("a service name and broker name are provided", func() {
   260  					It("displays an informative message, exits 0, and disables access to the service", func() {
   261  						session := helpers.CF("disable-service-access", broker.FirstServiceOfferingName(), "-b", secondBroker.Name)
   262  						Eventually(session).Should(Say("Disabling access to all plans of service %s from broker %s for all orgs as %s...", broker.FirstServiceOfferingName(), secondBroker.Name, username))
   263  						Eventually(session).Should(Say("OK"))
   264  						Eventually(session).Should(Exit(0))
   265  
   266  						session = helpers.CF("service-access", "-b", secondBroker.Name)
   267  						Eventually(session).Should(Exit(0))
   268  						Eventually(session).Should(Say("broker:\\s+%s", secondBroker.Name))
   269  						Eventually(session).Should(Say("%s\\s+%s\\s+none",
   270  							secondBroker.FirstServiceOfferingName(),
   271  							secondBroker.FirstServicePlanName(),
   272  						))
   273  					})
   274  				})
   275  			})
   276  		})
   277  
   278  		Context("multiple service brokers are registered", func() {
   279  			var (
   280  				orgName   string
   281  				spaceName string
   282  				broker1   *servicebrokerstub.ServiceBrokerStub
   283  				broker2   *servicebrokerstub.ServiceBrokerStub
   284  			)
   285  
   286  			BeforeEach(func() {
   287  				orgName = helpers.NewOrgName()
   288  				spaceName = helpers.NewSpaceName()
   289  				helpers.SetupCF(orgName, spaceName)
   290  
   291  				broker1 = servicebrokerstub.Register()
   292  				broker2 = servicebrokerstub.New()
   293  				broker2.Services[0].Name = broker1.FirstServiceOfferingName()
   294  				broker2.Services[0].Plans[0].Name = broker1.FirstServicePlanName()
   295  				broker2.Create().Register()
   296  			})
   297  
   298  			AfterEach(func() {
   299  				helpers.TargetOrgAndSpace(orgName, spaceName)
   300  				broker1.Forget()
   301  				broker2.Forget()
   302  				helpers.QuickDeleteOrg(orgName)
   303  			})
   304  
   305  			When("two services have access enabled in the same org", func() {
   306  				BeforeEach(func() {
   307  					session := helpers.CF("enable-service-access", broker1.FirstServiceOfferingName(), "-b", broker1.Name, "-o", orgName)
   308  					Eventually(session).Should(Exit(0))
   309  					session = helpers.CF("enable-service-access", broker1.FirstServiceOfferingName(), "-b", broker2.Name, "-o", orgName)
   310  					Eventually(session).Should(Exit(0))
   311  				})
   312  
   313  				It("fails to disable access when no broker is specified", func() {
   314  					session := helpers.CF("disable-service-access", broker1.FirstServiceOfferingName(), "-o", orgName)
   315  					Eventually(session.Err).Should(Say("Service '%s' is provided by multiple service brokers. Specify a broker by using the '-b' flag.", broker1.FirstServiceOfferingName()))
   316  					Eventually(session).Should(Exit(1))
   317  				})
   318  
   319  				It("successfully disables access when the broker is specified", func() {
   320  					session := helpers.CF("disable-service-access", broker1.FirstServiceOfferingName(), "-o", orgName, "-b", broker1.Name)
   321  					Eventually(session).Should(Exit(0))
   322  
   323  					session = helpers.CF("marketplace")
   324  					Consistently(session.Out).ShouldNot(Say("%s/s+%s/.+%s", broker1.FirstServiceOfferingName(), broker1.FirstServicePlanName(), broker1.Name))
   325  					Eventually(session).Should(Exit(0))
   326  				})
   327  			})
   328  
   329  			When("two services have access enabled in different orgs", func() {
   330  				var otherOrgName string
   331  
   332  				BeforeEach(func() {
   333  					otherOrgName = helpers.NewOrgName()
   334  					helpers.SetupCF(otherOrgName, spaceName)
   335  
   336  					session := helpers.CF("enable-service-access", broker1.FirstServiceOfferingName(), "-b", broker1.Name, "-o", otherOrgName)
   337  					Eventually(session).Should(Exit(0))
   338  					session = helpers.CF("enable-service-access", broker1.FirstServiceOfferingName(), "-b", broker2.Name, "-o", orgName)
   339  					Eventually(session).Should(Exit(0))
   340  				})
   341  
   342  				It("fails to disable access when no broker is specified", func() {
   343  					session := helpers.CF("disable-service-access", broker1.FirstServiceOfferingName(), "-o", orgName)
   344  					Eventually(session.Err).Should(Say("Service '%s' is provided by multiple service brokers. Specify a broker by using the '-b' flag.", broker1.FirstServiceOfferingName()))
   345  					Eventually(session).Should(Exit(1))
   346  
   347  					session = helpers.CF("disable-service-access", broker1.FirstServiceOfferingName(), "-o", otherOrgName)
   348  					Eventually(session.Err).Should(Say("Service '%s' is provided by multiple service brokers. Specify a broker by using the '-b' flag.", broker1.FirstServiceOfferingName()))
   349  					Eventually(session).Should(Exit(1))
   350  				})
   351  
   352  				It("successfully disables access when the broker is specified", func() {
   353  					session := helpers.CF("disable-service-access", broker1.FirstServiceOfferingName(), "-o", orgName, "-b", broker1.Name)
   354  					Eventually(session).Should(Exit(0))
   355  
   356  					session = helpers.CF("marketplace")
   357  					Consistently(session.Out).ShouldNot(Say("%s/s+%s/.+%s", broker1.FirstServiceOfferingName(), broker1.FirstServicePlanName(), broker1.Name))
   358  					Eventually(session).Should(Exit(0))
   359  				})
   360  			})
   361  
   362  			When("two services have plan enabeled in different orgs", func() {
   363  				var otherOrgName string
   364  
   365  				BeforeEach(func() {
   366  					otherOrgName = helpers.NewOrgName()
   367  					helpers.SetupCF(otherOrgName, spaceName)
   368  
   369  					session := helpers.CF("enable-service-access", broker1.FirstServiceOfferingName(), "-b", broker1.Name, "-p", broker1.FirstServicePlanName(), "-o", otherOrgName)
   370  					Eventually(session).Should(Exit(0))
   371  					session = helpers.CF("enable-service-access", broker1.FirstServiceOfferingName(), "-b", broker2.Name, "-p", broker1.FirstServicePlanName(), "-o", orgName)
   372  					Eventually(session).Should(Exit(0))
   373  				})
   374  
   375  				It("fails to disable access when no broker is specified", func() {
   376  					session := helpers.CF("disable-service-access", broker1.FirstServiceOfferingName(), "-p", broker1.FirstServicePlanName(), "-o", orgName)
   377  					Eventually(session.Err).Should(Say("Service '%s' is provided by multiple service brokers. Specify a broker by using the '-b' flag.", broker1.FirstServiceOfferingName()))
   378  					Eventually(session).Should(Exit(1))
   379  
   380  					session = helpers.CF("disable-service-access", broker1.FirstServiceOfferingName(), "-p", broker1.FirstServicePlanName(), "-o", otherOrgName)
   381  					Eventually(session.Err).Should(Say("Service '%s' is provided by multiple service brokers. Specify a broker by using the '-b' flag.", broker1.FirstServiceOfferingName()))
   382  					Eventually(session).Should(Exit(1))
   383  				})
   384  
   385  				It("successfully disables access when the broker is specified", func() {
   386  					session := helpers.CF("disable-service-access", broker1.FirstServiceOfferingName(), "-p", broker1.FirstServicePlanName(), "-o", orgName, "-b", broker1.Name)
   387  					Eventually(session).Should(Exit(0))
   388  
   389  					session = helpers.CF("marketplace")
   390  					Consistently(session.Out).ShouldNot(Say("%s/s+%s/.+%s", broker1.FirstServiceOfferingName(), broker1.FirstServicePlanName(), broker1.Name))
   391  					Eventually(session).Should(Exit(0))
   392  				})
   393  			})
   394  		})
   395  	})
   396  })