github.com/ablease/cli@v6.37.1-0.20180613014814-3adbb7d7fb19+incompatible/actor/v2action/job_test.go (about)

     1  package v2action_test
     2  
     3  import (
     4  	"errors"
     5  	"io"
     6  	"io/ioutil"
     7  	"os"
     8  	"path/filepath"
     9  	"strings"
    10  
    11  	. "code.cloudfoundry.org/cli/actor/v2action"
    12  	"code.cloudfoundry.org/cli/actor/v2action/v2actionfakes"
    13  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2"
    14  	. "github.com/onsi/ginkgo"
    15  	. "github.com/onsi/gomega"
    16  )
    17  
    18  var _ = Describe("Job Actions", func() {
    19  	var (
    20  		actor                     *Actor
    21  		fakeCloudControllerClient *v2actionfakes.FakeCloudControllerClient
    22  	)
    23  
    24  	BeforeEach(func() {
    25  		fakeCloudControllerClient = new(v2actionfakes.FakeCloudControllerClient)
    26  		actor = NewActor(fakeCloudControllerClient, nil, nil)
    27  	})
    28  
    29  	Describe("UploadApplicationPackage", func() {
    30  		var (
    31  			srcDir string
    32  
    33  			appGUID           string
    34  			existingResources []Resource
    35  			reader            io.Reader
    36  			readerLength      int64
    37  
    38  			job        Job
    39  			warnings   Warnings
    40  			executeErr error
    41  		)
    42  
    43  		BeforeEach(func() {
    44  			var err error
    45  			srcDir, err = ioutil.TempDir("", "upload-src-dir")
    46  			Expect(err).ToNot(HaveOccurred())
    47  
    48  			subDir := filepath.Join(srcDir, "level1", "level2")
    49  			err = os.MkdirAll(subDir, 0777)
    50  			Expect(err).ToNot(HaveOccurred())
    51  
    52  			err = ioutil.WriteFile(filepath.Join(subDir, "tmpFile1"), []byte("why hello"), 0600)
    53  			Expect(err).ToNot(HaveOccurred())
    54  
    55  			err = ioutil.WriteFile(filepath.Join(srcDir, "tmpFile2"), []byte("Hello, Binky"), 0600)
    56  			Expect(err).ToNot(HaveOccurred())
    57  
    58  			err = ioutil.WriteFile(filepath.Join(srcDir, "tmpFile3"), []byte("Bananarama"), 0600)
    59  			Expect(err).ToNot(HaveOccurred())
    60  
    61  			appGUID = "some-app-guid"
    62  			existingResources = []Resource{{Filename: "some-resource"}, {Filename: "another-resource"}}
    63  			someString := "who reads these days"
    64  			reader = strings.NewReader(someString)
    65  			readerLength = int64(len([]byte(someString)))
    66  		})
    67  
    68  		AfterEach(func() {
    69  			Expect(os.RemoveAll(srcDir)).NotTo(HaveOccurred())
    70  		})
    71  
    72  		JustBeforeEach(func() {
    73  			job, warnings, executeErr = actor.UploadApplicationPackage(appGUID, existingResources, reader, readerLength)
    74  		})
    75  
    76  		Context("when the upload is successful", func() {
    77  			BeforeEach(func() {
    78  				fakeCloudControllerClient.UploadApplicationPackageReturns(ccv2.Job{GUID: "some-job-guid"}, ccv2.Warnings{"upload-warning-1", "upload-warning-2"}, nil)
    79  			})
    80  
    81  			It("returns all warnings", func() {
    82  				Expect(executeErr).ToNot(HaveOccurred())
    83  				Expect(warnings).To(ConsistOf("upload-warning-1", "upload-warning-2"))
    84  				Expect(job).To(Equal(Job{GUID: "some-job-guid"}))
    85  
    86  				Expect(fakeCloudControllerClient.UploadApplicationPackageCallCount()).To(Equal(1))
    87  				passedAppGUID, passedExistingResources, passedReader, passedReaderLength := fakeCloudControllerClient.UploadApplicationPackageArgsForCall(0)
    88  				Expect(passedAppGUID).To(Equal(appGUID))
    89  				Expect(passedExistingResources).To(ConsistOf(ccv2.Resource{Filename: "some-resource"}, ccv2.Resource{Filename: "another-resource"}))
    90  				Expect(passedReader).To(Equal(reader))
    91  				Expect(passedReaderLength).To(Equal(readerLength))
    92  			})
    93  		})
    94  
    95  		Context("when the upload returns an error", func() {
    96  			var err error
    97  
    98  			BeforeEach(func() {
    99  				err = errors.New("some-error")
   100  				fakeCloudControllerClient.UploadApplicationPackageReturns(ccv2.Job{}, ccv2.Warnings{"upload-warning-1", "upload-warning-2"}, err)
   101  			})
   102  
   103  			It("returns the error", func() {
   104  				Expect(executeErr).To(MatchError(err))
   105  				Expect(warnings).To(ConsistOf("upload-warning-1", "upload-warning-2"))
   106  			})
   107  		})
   108  	})
   109  
   110  	Describe("UploadDroplet", func() {
   111  		var (
   112  			srcDir string
   113  
   114  			appGUID       string
   115  			droplet       io.Reader
   116  			dropletLength int64
   117  
   118  			job        Job
   119  			warnings   Warnings
   120  			executeErr error
   121  		)
   122  
   123  		BeforeEach(func() {
   124  			// var err error
   125  			// srcDir, err = ioutil.TempDir("", "upload-src-dir")
   126  			// Expect(err).ToNot(HaveOccurred())
   127  			//
   128  			// subDir := filepath.Join(srcDir, "level1", "level2")
   129  			// err = os.MkdirAll(subDir, 0777)
   130  			// Expect(err).ToNot(HaveOccurred())
   131  			//
   132  			// err = ioutil.WriteFile(filepath.Join(subDir, "tmpFile1"), []byte("why hello"), 0600)
   133  			// Expect(err).ToNot(HaveOccurred())
   134  			//
   135  			// err = ioutil.WriteFile(filepath.Join(srcDir, "tmpFile2"), []byte("Hello, Binky"), 0600)
   136  			// Expect(err).ToNot(HaveOccurred())
   137  			//
   138  			// err = ioutil.WriteFile(filepath.Join(srcDir, "tmpFile3"), []byte("Bananarama"), 0600)
   139  			// Expect(err).ToNot(HaveOccurred())
   140  			//
   141  			appGUID = "some-app-guid"
   142  			someString := "who reads these days"
   143  
   144  			droplet = strings.NewReader(someString)
   145  			dropletLength = int64(len([]byte(someString)))
   146  		})
   147  
   148  		AfterEach(func() {
   149  			Expect(os.RemoveAll(srcDir)).NotTo(HaveOccurred())
   150  		})
   151  
   152  		JustBeforeEach(func() {
   153  			job, warnings, executeErr = actor.UploadDroplet(appGUID, droplet, dropletLength)
   154  		})
   155  
   156  		Context("when the upload is successful", func() {
   157  			BeforeEach(func() {
   158  				fakeCloudControllerClient.UploadDropletReturns(ccv2.Job{GUID: "some-job-guid"}, ccv2.Warnings{"upload-droplet-warning-1", "upload-droplet-warning-2"}, nil)
   159  			})
   160  
   161  			It("returns all warnings", func() {
   162  				Expect(executeErr).ToNot(HaveOccurred())
   163  				Expect(warnings).To(ConsistOf("upload-droplet-warning-1", "upload-droplet-warning-2"))
   164  				Expect(job).To(Equal(Job{GUID: "some-job-guid"}))
   165  
   166  				Expect(fakeCloudControllerClient.UploadDropletCallCount()).To(Equal(1))
   167  				passedAppGUID, passedDroplet, passedDropletLength := fakeCloudControllerClient.UploadDropletArgsForCall(0)
   168  				Expect(passedAppGUID).To(Equal(appGUID))
   169  				Expect(passedDroplet).To(Equal(droplet))
   170  				Expect(passedDropletLength).To(Equal(dropletLength))
   171  			})
   172  		})
   173  
   174  	})
   175  	Describe("PollJob", func() {
   176  		var (
   177  			job        Job
   178  			warnings   Warnings
   179  			executeErr error
   180  		)
   181  
   182  		JustBeforeEach(func() {
   183  			warnings, executeErr = actor.PollJob(job)
   184  		})
   185  
   186  		Context("when the job polling is successful", func() {
   187  			BeforeEach(func() {
   188  				fakeCloudControllerClient.PollJobReturns(ccv2.Warnings{"polling-warning"}, nil)
   189  			})
   190  
   191  			It("returns the warnings", func() {
   192  				Expect(executeErr).ToNot(HaveOccurred())
   193  				Expect(warnings).To(ConsistOf("polling-warning"))
   194  
   195  				Expect(fakeCloudControllerClient.PollJobCallCount()).To(Equal(1))
   196  				Expect(fakeCloudControllerClient.PollJobArgsForCall(0)).To(Equal(ccv2.Job(job)))
   197  			})
   198  		})
   199  
   200  		Context("when polling errors", func() {
   201  			var err error
   202  
   203  			BeforeEach(func() {
   204  				err = errors.New("some-error")
   205  				fakeCloudControllerClient.PollJobReturns(ccv2.Warnings{"polling-warning"}, err)
   206  			})
   207  
   208  			It("returns the error", func() {
   209  				Expect(executeErr).To(MatchError(err))
   210  				Expect(warnings).To(ConsistOf("polling-warning"))
   211  			})
   212  		})
   213  	})
   214  })