github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/actor/v3action/process_instance_test.go (about)

     1  package v3action_test
     2  
     3  import (
     4  	"errors"
     5  	"time"
     6  
     7  	"code.cloudfoundry.org/cli/actor/actionerror"
     8  	. "code.cloudfoundry.org/cli/actor/v3action"
     9  	"code.cloudfoundry.org/cli/actor/v3action/v3actionfakes"
    10  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
    11  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  )
    15  
    16  var _ = Describe("instance actions", func() {
    17  	var (
    18  		actor                     *Actor
    19  		fakeCloudControllerClient *v3actionfakes.FakeCloudControllerClient
    20  	)
    21  
    22  	BeforeEach(func() {
    23  		fakeCloudControllerClient = new(v3actionfakes.FakeCloudControllerClient)
    24  		actor = NewActor(fakeCloudControllerClient, nil, nil, nil)
    25  	})
    26  
    27  	Describe("Instance", func() {
    28  		Describe("StartTime", func() {
    29  			It("returns the time that the instance started", func() {
    30  				uptime, err := time.ParseDuration("86400s")
    31  				Expect(err).ToNot(HaveOccurred())
    32  				instance := ProcessInstance{Uptime: uptime}
    33  				Expect(instance.StartTime()).To(BeTemporally("~", time.Now().Add(-24*time.Hour), 10*time.Second))
    34  			})
    35  		})
    36  	})
    37  
    38  	Describe("DeleteInstanceByApplicationNameSpaceProcessTypeAndIndex", func() {
    39  		var (
    40  			executeErr error
    41  			warnings   Warnings
    42  		)
    43  
    44  		JustBeforeEach(func() {
    45  			warnings, executeErr = actor.DeleteInstanceByApplicationNameSpaceProcessTypeAndIndex("some-app-name", "some-space-guid", "some-process-type", 666)
    46  		})
    47  
    48  		When("getting the application returns an error", func() {
    49  			BeforeEach(func() {
    50  				fakeCloudControllerClient.GetApplicationsReturns([]ccv3.Application{}, ccv3.Warnings{"some-get-app-warning"}, errors.New("some-get-app-error"))
    51  			})
    52  
    53  			It("returns all warnings and the error", func() {
    54  				Expect(executeErr).To(MatchError("some-get-app-error"))
    55  				Expect(warnings).To(ConsistOf("some-get-app-warning"))
    56  			})
    57  		})
    58  
    59  		When("getting the application succeeds", func() {
    60  			BeforeEach(func() {
    61  				fakeCloudControllerClient.GetApplicationsReturns([]ccv3.Application{{GUID: "some-app-guid"}}, ccv3.Warnings{"some-get-app-warning"}, nil)
    62  			})
    63  
    64  			When("deleting the instance returns ProcessNotFoundError", func() {
    65  				BeforeEach(func() {
    66  					fakeCloudControllerClient.DeleteApplicationProcessInstanceReturns(ccv3.Warnings{"some-delete-warning"}, ccerror.ProcessNotFoundError{})
    67  				})
    68  
    69  				It("returns all warnings and the ProcessNotFoundError error", func() {
    70  					Expect(executeErr).To(Equal(actionerror.ProcessNotFoundError{ProcessType: "some-process-type"}))
    71  					Expect(warnings).To(ConsistOf("some-get-app-warning", "some-delete-warning"))
    72  				})
    73  			})
    74  
    75  			When("deleting the instance returns InstanceNotFoundError", func() {
    76  				BeforeEach(func() {
    77  					fakeCloudControllerClient.DeleteApplicationProcessInstanceReturns(ccv3.Warnings{"some-delete-warning"}, ccerror.InstanceNotFoundError{})
    78  				})
    79  
    80  				It("returns all warnings and the ProcessInstanceNotFoundError error", func() {
    81  					Expect(executeErr).To(Equal(actionerror.ProcessInstanceNotFoundError{ProcessType: "some-process-type", InstanceIndex: 666}))
    82  					Expect(warnings).To(ConsistOf("some-get-app-warning", "some-delete-warning"))
    83  				})
    84  			})
    85  
    86  			When("deleting the instance returns other error", func() {
    87  				BeforeEach(func() {
    88  					fakeCloudControllerClient.DeleteApplicationProcessInstanceReturns(ccv3.Warnings{"some-delete-warning"}, errors.New("some-delete-error"))
    89  				})
    90  
    91  				It("returns all warnings and the error", func() {
    92  					Expect(executeErr).To(MatchError("some-delete-error"))
    93  					Expect(warnings).To(ConsistOf("some-get-app-warning", "some-delete-warning"))
    94  				})
    95  			})
    96  
    97  			When("deleting the instance succeeds", func() {
    98  				BeforeEach(func() {
    99  					fakeCloudControllerClient.DeleteApplicationProcessInstanceReturns(ccv3.Warnings{"some-delete-warning"}, nil)
   100  				})
   101  
   102  				It("returns all warnings and no error", func() {
   103  					Expect(executeErr).ToNot(HaveOccurred())
   104  					Expect(warnings).To(ConsistOf("some-get-app-warning", "some-delete-warning"))
   105  
   106  					Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1))
   107  					Expect(fakeCloudControllerClient.GetApplicationsArgsForCall(0)).To(ConsistOf(
   108  						ccv3.Query{Key: ccv3.NameFilter, Values: []string{"some-app-name"}},
   109  						ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{"some-space-guid"}},
   110  					))
   111  
   112  					Expect(fakeCloudControllerClient.DeleteApplicationProcessInstanceCallCount()).To(Equal(1))
   113  					appGUID, processType, instanceIndex := fakeCloudControllerClient.DeleteApplicationProcessInstanceArgsForCall(0)
   114  					Expect(appGUID).To(Equal("some-app-guid"))
   115  					Expect(processType).To(Equal("some-process-type"))
   116  					Expect(instanceIndex).To(Equal(666))
   117  				})
   118  			})
   119  		})
   120  	})
   121  })