github.com/Thanhphan1147/cloudfoundry-cli@v7.1.0+incompatible/actor/v2action/application_instance_test.go (about)

     1  package v2action_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/actor/actionerror"
     7  	. "code.cloudfoundry.org/cli/actor/v2action"
     8  	"code.cloudfoundry.org/cli/actor/v2action/v2actionfakes"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
    10  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2"
    11  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant"
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  )
    15  
    16  var _ = Describe("Application Instance Actions", func() {
    17  	var (
    18  		actor                     *Actor
    19  		fakeCloudControllerClient *v2actionfakes.FakeCloudControllerClient
    20  	)
    21  
    22  	BeforeEach(func() {
    23  		fakeCloudControllerClient = new(v2actionfakes.FakeCloudControllerClient)
    24  		actor = NewActor(fakeCloudControllerClient, nil, nil)
    25  	})
    26  
    27  	Describe("ApplicationInstance", func() {
    28  		var instance ApplicationInstance
    29  
    30  		BeforeEach(func() {
    31  			instance = ApplicationInstance{}
    32  		})
    33  
    34  		Describe("Crashed", func() {
    35  			Context("instance is crashed", func() {
    36  				It("returns true", func() {
    37  					instance.State = constant.ApplicationInstanceCrashed
    38  					Expect(instance.Crashed()).To(BeTrue())
    39  				})
    40  			})
    41  
    42  			Context("instance is *not* crashed", func() {
    43  				It("returns false", func() {
    44  					instance.State = constant.ApplicationInstanceRunning
    45  					Expect(instance.Crashed()).To(BeFalse())
    46  				})
    47  			})
    48  		})
    49  
    50  		Describe("Flapping", func() {
    51  			Context("instance is flapping", func() {
    52  				It("returns true", func() {
    53  					instance.State = constant.ApplicationInstanceFlapping
    54  					Expect(instance.Flapping()).To(BeTrue())
    55  				})
    56  			})
    57  
    58  			Context("instance is *not* flapping", func() {
    59  				It("returns false", func() {
    60  					instance.State = constant.ApplicationInstanceCrashed
    61  					Expect(instance.Flapping()).To(BeFalse())
    62  				})
    63  			})
    64  		})
    65  
    66  		Describe("Running", func() {
    67  			Context("instance is running", func() {
    68  				It("returns true", func() {
    69  					instance.State = constant.ApplicationInstanceRunning
    70  					Expect(instance.Running()).To(BeTrue())
    71  				})
    72  			})
    73  
    74  			Context("instance is *not* running", func() {
    75  				It("returns false", func() {
    76  					instance.State = constant.ApplicationInstanceCrashed
    77  					Expect(instance.Running()).To(BeFalse())
    78  				})
    79  			})
    80  		})
    81  	})
    82  
    83  	Describe("GetApplicationInstancesByApplication", func() {
    84  		When("the application exists", func() {
    85  			BeforeEach(func() {
    86  				fakeCloudControllerClient.GetApplicationApplicationInstancesReturns(
    87  					map[int]ccv2.ApplicationInstance{
    88  						0: {ID: 0, Details: "hello", Since: 1485985587.12345, State: constant.ApplicationInstanceRunning},
    89  						1: {ID: 1, Details: "hi", Since: 1485985587.567},
    90  					},
    91  					ccv2.Warnings{"instance-warning-1", "instance-warning-2"},
    92  					nil)
    93  			})
    94  
    95  			It("returns the application instances and all warnings", func() {
    96  				instances, warnings, err := actor.GetApplicationInstancesByApplication("some-app-guid")
    97  				Expect(err).ToNot(HaveOccurred())
    98  				Expect(instances).To(ConsistOf(
    99  					ApplicationInstance{
   100  						ID:      0,
   101  						Details: "hello",
   102  						Since:   1485985587.12345,
   103  						State:   constant.ApplicationInstanceRunning,
   104  					},
   105  					ApplicationInstance{
   106  						ID:      1,
   107  						Details: "hi",
   108  						Since:   1485985587.567,
   109  					},
   110  				))
   111  				Expect(warnings).To(ConsistOf("instance-warning-1", "instance-warning-2"))
   112  
   113  				Expect(fakeCloudControllerClient.GetApplicationApplicationInstancesCallCount()).To(Equal(1))
   114  				Expect(fakeCloudControllerClient.GetApplicationApplicationInstancesArgsForCall(0)).To(Equal("some-app-guid"))
   115  			})
   116  		})
   117  
   118  		When("an error is encountered", func() {
   119  			var expectedErr error
   120  
   121  			BeforeEach(func() {
   122  				expectedErr = errors.New("banana")
   123  				fakeCloudControllerClient.GetApplicationApplicationInstancesReturns(
   124  					nil,
   125  					ccv2.Warnings{"instances-warning"},
   126  					expectedErr)
   127  			})
   128  
   129  			It("returns the error and all warnings", func() {
   130  				_, warnings, err := actor.GetApplicationInstancesByApplication("some-app-guid")
   131  				Expect(err).To(MatchError(expectedErr))
   132  				Expect(warnings).To(ConsistOf("instances-warning"))
   133  			})
   134  
   135  			When("the application does not exist", func() {
   136  				BeforeEach(func() {
   137  					fakeCloudControllerClient.GetApplicationApplicationInstancesReturns(
   138  						nil,
   139  						nil,
   140  						ccerror.ResourceNotFoundError{})
   141  				})
   142  
   143  				It("returns an ApplicationInstancesNotFoundError", func() {
   144  					_, _, err := actor.GetApplicationInstancesByApplication("some-app-guid")
   145  					Expect(err).To(MatchError(actionerror.ApplicationInstancesNotFoundError{ApplicationGUID: "some-app-guid"}))
   146  				})
   147  			})
   148  
   149  			When("the app has not been staged yet", func() {
   150  				When("getting instances returns a CF-NotStaged error", func() {
   151  					BeforeEach(func() {
   152  						fakeCloudControllerClient.GetApplicationApplicationInstancesReturns(
   153  							nil,
   154  							nil,
   155  							ccerror.NotStagedError{})
   156  					})
   157  
   158  					It("returns an ApplicationInstancesNotFoundError", func() {
   159  						_, _, err := actor.GetApplicationInstancesByApplication("some-app-guid")
   160  						Expect(err).To(MatchError(actionerror.ApplicationInstancesNotFoundError{ApplicationGUID: "some-app-guid"}))
   161  					})
   162  				})
   163  			})
   164  
   165  			When("getting instances returns a CF-InstancesError", func() {
   166  				BeforeEach(func() {
   167  					fakeCloudControllerClient.GetApplicationApplicationInstancesReturns(
   168  						nil,
   169  						nil,
   170  						ccerror.InstancesError{})
   171  				})
   172  
   173  				It("returns an ApplicationInstancesNotFoundError", func() {
   174  					_, _, err := actor.GetApplicationInstancesByApplication("some-app-guid")
   175  					Expect(err).To(MatchError(actionerror.ApplicationInstancesNotFoundError{ApplicationGUID: "some-app-guid"}))
   176  				})
   177  			})
   178  		})
   179  	})
   180  })