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

     1  package isolated
     2  
     3  import (
     4  	"fmt"
     5  
     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("run-task command", func() {
    14  	When("--help flag is set", func() {
    15  		It("Displays command usage to output", func() {
    16  			session := helpers.CF("run-task", "--help")
    17  			Eventually(session).Should(Say("NAME:"))
    18  			Eventually(session).Should(Say("   run-task - Run a one-off task on an app"))
    19  			Eventually(session).Should(Say("USAGE:"))
    20  			Eventually(session).Should(Say(`   cf run-task APP_NAME COMMAND \[-k DISK] \[-m MEMORY\] \[--name TASK_NAME\]`))
    21  			Eventually(session).Should(Say("TIP:"))
    22  			Eventually(session).Should(Say("   Use 'cf logs' to display the logs of the app and all its tasks. If your task name is unique, grep this command's output for the task name to view task-specific logs."))
    23  			Eventually(session).Should(Say("EXAMPLES:"))
    24  			Eventually(session).Should(Say(`   cf run-task my-app "bundle exec rake db:migrate" --name migrate`))
    25  			Eventually(session).Should(Say("ALIAS:"))
    26  			Eventually(session).Should(Say("   rt"))
    27  			Eventually(session).Should(Say("OPTIONS:"))
    28  			Eventually(session).Should(Say(`   -k          Disk limit \(e\.g\. 256M, 1024M, 1G\)`))
    29  			Eventually(session).Should(Say(`   -m          Memory limit \(e\.g\. 256M, 1024M, 1G\)`))
    30  			Eventually(session).Should(Say(`   --name      Name to give the task \(generated if omitted\)`))
    31  			Eventually(session).Should(Say("SEE ALSO:"))
    32  			Eventually(session).Should(Say("   logs, tasks, terminate-task"))
    33  			Eventually(session).Should(Exit(0))
    34  		})
    35  	})
    36  
    37  	When("the environment is not setup correctly", func() {
    38  		It("fails with the appropriate errors", func() {
    39  			helpers.CheckEnvironmentTargetedCorrectly(true, true, ReadOnlyOrg, "run-task", "app-name", "some-command")
    40  		})
    41  	})
    42  
    43  	When("the environment is setup correctly", func() {
    44  		var (
    45  			orgName   string
    46  			spaceName string
    47  			appName   string
    48  		)
    49  
    50  		BeforeEach(func() {
    51  			orgName = helpers.NewOrgName()
    52  			spaceName = helpers.NewSpaceName()
    53  			appName = helpers.PrefixedRandomName("APP")
    54  
    55  			helpers.SetupCF(orgName, spaceName)
    56  		})
    57  
    58  		AfterEach(func() {
    59  			helpers.QuickDeleteOrg(orgName)
    60  		})
    61  
    62  		When("the application exists", func() {
    63  			BeforeEach(func() {
    64  				helpers.WithHelloWorldApp(func(appDir string) {
    65  					Eventually(helpers.CF("push", appName, "-p", appDir, "-b", "staticfile_buildpack")).Should(Exit(0))
    66  				})
    67  			})
    68  
    69  			When("the task name is not provided", func() {
    70  				It("creates a new task", func() {
    71  					session := helpers.CF("run-task", appName, "echo hi")
    72  					userName, _ := helpers.GetCredentials()
    73  					Eventually(session).Should(Say("Creating task for app %s in org %s / space %s as %s...", appName, orgName, spaceName, userName))
    74  					Eventually(session).Should(Say("OK"))
    75  					Eventually(session).Should(Say("Task has been submitted successfully for execution."))
    76  					Eventually(session).Should(Say(`task name:\s+.+`))
    77  					Eventually(session).Should(Say(`task id:\s+1`))
    78  					Eventually(session).Should(Exit(0))
    79  				})
    80  			})
    81  
    82  			When("the task name is provided", func() {
    83  				It("creates a new task with the provided name", func() {
    84  					session := helpers.CF("run-task", appName, "echo hi", "--name", "some-task-name")
    85  					userName, _ := helpers.GetCredentials()
    86  					Eventually(session).Should(Say("Creating task for app %s in org %s / space %s as %s...", appName, orgName, spaceName, userName))
    87  					Eventually(session).Should(Say("OK"))
    88  					Eventually(session).Should(Say("Task has been submitted successfully for execution."))
    89  					Eventually(session).Should(Say(`task name:\s+some-task-name`))
    90  					Eventually(session).Should(Say(`task id:\s+1`))
    91  					Eventually(session).Should(Exit(0))
    92  
    93  					taskSession := helpers.CF("tasks", appName)
    94  					Eventually(taskSession).Should(Say(`1\s+some-task-name`))
    95  					Eventually(taskSession).Should(Exit(0))
    96  				})
    97  			})
    98  
    99  			When("disk space is provided", func() {
   100  				When("the provided disk space is invalid", func() {
   101  					It("displays error and exits 1", func() {
   102  						session := helpers.CF("run-task", appName, "echo hi", "-k", "invalid")
   103  						Eventually(session.Err).Should(Say("Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB"))
   104  
   105  						Eventually(session).Should(Exit(1))
   106  					})
   107  				})
   108  
   109  				When("the provided disk space is valid", func() {
   110  					It("runs the task with the provided disk space", func() {
   111  						diskSpace := 123
   112  						session := helpers.CF("run-task", appName, "echo hi", "-k", fmt.Sprintf("%dM", diskSpace))
   113  						Eventually(session).Should(Exit(0))
   114  
   115  						session = helpers.CF("tasks", appName, "-v")
   116  						Eventually(session).Should(Say("\"disk_in_mb\": %d", diskSpace))
   117  						Eventually(session).Should(Exit(0))
   118  					})
   119  				})
   120  			})
   121  
   122  			When("task memory is provided", func() {
   123  				When("the provided memory is invalid", func() {
   124  					It("displays error and exits 1", func() {
   125  						session := helpers.CF("run-task", appName, "echo hi", "-m", "invalid")
   126  						Eventually(session.Err).Should(Say("Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB"))
   127  						Eventually(session).Should(Exit(1))
   128  					})
   129  				})
   130  
   131  				When("the provided memory is valid", func() {
   132  					It("runs the task with the provided memory", func() {
   133  						taskMemory := 123
   134  						session := helpers.CF("run-task", appName, "echo hi", "-m", fmt.Sprintf("%dM", taskMemory))
   135  						Eventually(session).Should(Exit(0))
   136  
   137  						session = helpers.CF("tasks", appName, "-v")
   138  						Eventually(session).Should(Say("\"memory_in_mb\": %d", taskMemory))
   139  						Eventually(session).Should(Exit(0))
   140  					})
   141  				})
   142  			})
   143  		})
   144  
   145  		When("the application is not staged", func() {
   146  			BeforeEach(func() {
   147  				helpers.WithHelloWorldApp(func(appDir string) {
   148  					Eventually(helpers.CF("push", appName, "--no-start", "-p", appDir, "-b", "staticfile_buildpack")).Should(Exit(0))
   149  				})
   150  			})
   151  
   152  			It("fails and outputs task must have a droplet message", func() {
   153  				session := helpers.CF("run-task", appName, "echo hi")
   154  				Eventually(session).Should(Say("FAILED"))
   155  				Eventually(session.Err).Should(Say(`Error running task: App is not staged.`))
   156  				Eventually(session).Should(Exit(1))
   157  			})
   158  		})
   159  
   160  		When("the application is staged but stopped", func() {
   161  			BeforeEach(func() {
   162  				helpers.WithHelloWorldApp(func(appDir string) {
   163  					Eventually(helpers.CF("push", appName, "-p", appDir, "-b", "staticfile_buildpack")).Should(Exit(0))
   164  				})
   165  				session := helpers.CF("stop", appName)
   166  				Eventually(session).Should(Exit(0))
   167  			})
   168  
   169  			It("creates a new task", func() {
   170  				session := helpers.CF("run-task", appName, "echo hi")
   171  				userName, _ := helpers.GetCredentials()
   172  				Eventually(session).Should(Say("Creating task for app %s in org %s / space %s as %s...", appName, orgName, spaceName, userName))
   173  				Eventually(session).Should(Say("OK"))
   174  				Eventually(session).Should(Say("Task has been submitted successfully for execution."))
   175  				Eventually(session).Should(Say(`task name:\s+.+`))
   176  				Eventually(session).Should(Say(`task id:\s+1`))
   177  				Eventually(session).Should(Exit(0))
   178  			})
   179  		})
   180  
   181  		When("the application does not exist", func() {
   182  			It("fails and outputs an app not found message", func() {
   183  				session := helpers.CF("run-task", appName, "echo hi")
   184  				Eventually(session).Should(Say("FAILED"))
   185  				Eventually(session.Err).Should(Say(fmt.Sprintf("App '%s' not found", appName)))
   186  				Eventually(session).Should(Exit(1))
   187  			})
   188  		})
   189  	})
   190  })