github.com/DaAlbrecht/cf-cli@v0.0.0-20231128151943-1fe19bb400b9/integration/v7/isolated/create_space_quota_command_test.go (about)

     1  package isolated
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccversion"
     5  	. "code.cloudfoundry.org/cli/cf/util/testhelpers/matchers"
     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("create-space-quota command", func() {
    14  	var (
    15  		userName       string
    16  		orgName        string
    17  		spaceQuotaName string
    18  	)
    19  
    20  	Describe("help", func() {
    21  		When("--help flag is set", func() {
    22  			It("appears in cf help -a", func() {
    23  				session := helpers.CF("help", "-a")
    24  				Eventually(session).Should(Exit(0))
    25  				Expect(session).To(HaveCommandInCategoryWithDescription("create-space-quota", "SPACE ADMIN", "Define a new quota for a space"))
    26  			})
    27  
    28  			It("Displays command usage to output", func() {
    29  				session := helpers.CF("create-space-quota", "--help")
    30  				Eventually(session).Should(Say("NAME:"))
    31  				Eventually(session).Should(Say("create-space-quota - Define a new quota for a space"))
    32  				Eventually(session).Should(Say("USAGE:"))
    33  				Eventually(session).Should(Say(`cf create-space-quota QUOTA \[-m TOTAL_MEMORY\] \[-i INSTANCE_MEMORY\] \[-r ROUTES\] \[-s SERVICE_INSTANCES\] \[-a APP_INSTANCES\] \[--allow-paid-service-plans\] \[--reserved-route-ports RESERVED_ROUTE_PORTS\] \[-l LOG_VOLUME\]`))
    34  				Eventually(session).Should(Say("OPTIONS:"))
    35  				Eventually(session).Should(Say(`-a\s+Total number of application instances. \(Default: unlimited\)`))
    36  				Eventually(session).Should(Say(`--allow-paid-service-plans\s+Allow provisioning instances of paid service plans. \(Default: disallowed\)`))
    37  				Eventually(session).Should(Say(`-i\s+Maximum amount of memory a process can have \(e.g. 1024M, 1G, 10G\). \(Default: unlimited\)`))
    38  				Eventually(session).Should(Say(`-m\s+Total amount of memory all processes can have \(e.g. 1024M, 1G, 10G\). -1 represents an unlimited amount. \(Default: 0\)`))
    39  				Eventually(session).Should(Say(`-r\s+Total number of routes. -1 represents an unlimited amount. \(Default: 0\)`))
    40  				Eventually(session).Should(Say(`--reserved-route-ports\s+Maximum number of routes that may be created with ports. -1 represents an unlimited amount. \(Default: 0\)`))
    41  				Eventually(session).Should(Say(`-s\s+Total number of service instances. -1 represents an unlimited amount. \(Default: 0\)`))
    42  				Eventually(session).Should(Say(`-l\s+Total log volume per second all processes can have, in bytes \(e.g. 128B, 4K, 1M\). -1 represents an unlimited amount. \(Default: -1\).`))
    43  				Eventually(session).Should(Say("SEE ALSO:"))
    44  				Eventually(session).Should(Say("create-space, set-space-quota, space-quotas"))
    45  				Eventually(session).Should(Exit(0))
    46  			})
    47  		})
    48  	})
    49  
    50  	When("the environment is not setup correctly", func() {
    51  		It("fails with the appropriate errors", func() {
    52  			helpers.CheckEnvironmentTargetedCorrectly(true, false, orgName, "create-space-quota", spaceQuotaName)
    53  		})
    54  	})
    55  
    56  	When("the environment is set up correctly", func() {
    57  		BeforeEach(func() {
    58  			userName = helpers.LoginCF()
    59  			orgName = helpers.CreateAndTargetOrg()
    60  			spaceQuotaName = helpers.QuotaName()
    61  		})
    62  
    63  		When("the quota name is not provided", func() {
    64  			It("tells the user that the quota name is required, prints help text, and exits 1", func() {
    65  				session := helpers.CF("create-space-quota")
    66  
    67  				Eventually(session.Err).Should(Say("Incorrect Usage: the required argument `SPACE_QUOTA_NAME` was not provided"))
    68  				Eventually(session).Should(Say("NAME:"))
    69  				Eventually(session).Should(Exit(1))
    70  			})
    71  		})
    72  
    73  		When("a nonexistent flag is provided", func() {
    74  			It("tells the user that the flag is invalid", func() {
    75  				session := helpers.CF("create-space-quota", "--nonexistent")
    76  
    77  				Eventually(session.Err).Should(Say("Incorrect Usage: unknown flag `nonexistent'"))
    78  				Eventually(session).Should(Say("NAME:"))
    79  				Eventually(session).Should(Exit(1))
    80  			})
    81  		})
    82  
    83  		When("the quota does not exist", func() {
    84  			When("no flags are provided", func() {
    85  				It("creates the quota with the default values", func() {
    86  					session := helpers.CF("create-space-quota", spaceQuotaName)
    87  					Eventually(session).Should(Say("Creating space quota %s for org %s as %s...", spaceQuotaName, orgName, userName))
    88  					Eventually(session).Should(Say("OK"))
    89  					Eventually(session).Should(Exit(0))
    90  
    91  					session = helpers.CF("space-quota", spaceQuotaName)
    92  					Eventually(session).Should(Say("Getting space quota %s for org %s as %s...", spaceQuotaName, orgName, userName))
    93  					Eventually(session).Should(Say(`total memory:\s+0`))
    94  					Eventually(session).Should(Say(`instance memory:\s+unlimited`))
    95  					Eventually(session).Should(Say(`routes:\s+0`))
    96  					Eventually(session).Should(Say(`service instances:\s+0`))
    97  					Eventually(session).Should(Say(`paid service plans:\s+disallowed`))
    98  					Eventually(session).Should(Say(`app instances:\s+unlimited`))
    99  					Eventually(session).Should(Say(`route ports:\s+0`))
   100  					Eventually(session).Should(Say(`log volume per second:\s+unlimited`))
   101  					Eventually(session).Should(Exit(0))
   102  				})
   103  			})
   104  
   105  			When("all the optional flags are provided", func() {
   106  				It("creates the quota with the specified values", func() {
   107  					session := helpers.CF("create-space-quota", spaceQuotaName,
   108  						"-a", "2",
   109  						"--allow-paid-service-plans",
   110  						"-i", "3M",
   111  						"-m", "4M",
   112  						"-r", "15",
   113  						"--reserved-route-ports", "6",
   114  						"-s", "7")
   115  					Eventually(session).Should(Say("Creating space quota %s for org %s as %s...", spaceQuotaName, orgName, userName))
   116  					Eventually(session).Should(Say("OK"))
   117  					Eventually(session).Should(Exit(0))
   118  
   119  					session = helpers.CF("space-quota", spaceQuotaName)
   120  					Eventually(session).Should(Say("Getting space quota %s for org %s as %s...", spaceQuotaName, orgName, userName))
   121  					Eventually(session).Should(Say(`total memory:\s+4M`))
   122  					Eventually(session).Should(Say(`instance memory:\s+3M`))
   123  					Eventually(session).Should(Say(`routes:\s+15`))
   124  					Eventually(session).Should(Say(`service instances:\s+7`))
   125  					Eventually(session).Should(Say(`paid service plans:\s+allowed`))
   126  					Eventually(session).Should(Say(`app instances:\s+2`))
   127  					Eventually(session).Should(Say(`route ports:\s+6`))
   128  					Eventually(session).Should(Say(`log volume per second:\s+unlimited`))
   129  					Eventually(session).Should(Exit(0))
   130  				})
   131  
   132  				When("CAPI supports log rate limits", func() {
   133  					BeforeEach(func() {
   134  						helpers.SkipIfVersionLessThan(ccversion.MinVersionLogRateLimitingV3)
   135  					})
   136  
   137  					It("creates the quota with the specified values", func() {
   138  						session := helpers.CF("create-space-quota", spaceQuotaName, "-l", "2K")
   139  						Eventually(session).Should(Say("Creating space quota %s for org %s as %s...", spaceQuotaName, orgName, userName))
   140  						Eventually(session).Should(Say("OK"))
   141  						Eventually(session).Should(Exit(0))
   142  
   143  						session = helpers.CF("space-quota", spaceQuotaName)
   144  						Eventually(session).Should(Say(`log volume per second:\s+2K`))
   145  						Eventually(session).Should(Exit(0))
   146  					})
   147  				})
   148  			})
   149  		})
   150  
   151  		When("the quota already exists", func() {
   152  			BeforeEach(func() {
   153  				Eventually(helpers.CF("create-space-quota", spaceQuotaName)).Should(Exit(0))
   154  			})
   155  
   156  			It("notifies the user that the quota already exists and exits 0", func() {
   157  				session := helpers.CF("create-space-quota", spaceQuotaName)
   158  				Eventually(session).Should(Say("Creating space quota %s for org %s as %s...", spaceQuotaName, orgName, userName))
   159  				Eventually(session.Err).Should(Say(`Space Quota '%s' already exists\.`, spaceQuotaName))
   160  				Eventually(session).Should(Say("OK"))
   161  				Eventually(session).Should(Exit(0))
   162  			})
   163  		})
   164  	})
   165  })