github.com/loafoe/cli@v7.1.0+incompatible/actor/v2v3action/application_summary_test.go (about) 1 package v2v3action_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/v2v3action" 9 "code.cloudfoundry.org/cli/actor/v2v3action/v2v3actionfakes" 10 "code.cloudfoundry.org/cli/actor/v3action" 11 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 12 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 13 14 . "github.com/onsi/ginkgo" 15 . "github.com/onsi/ginkgo/extensions/table" 16 . "github.com/onsi/gomega" 17 ) 18 19 var _ = Describe("Application Summary Actions", func() { 20 var ( 21 actor *Actor 22 fakeV2Actor *v2v3actionfakes.FakeV2Actor 23 fakeV3Actor *v2v3actionfakes.FakeV3Actor 24 ) 25 26 BeforeEach(func() { 27 fakeV2Actor = new(v2v3actionfakes.FakeV2Actor) 28 fakeV3Actor = new(v2v3actionfakes.FakeV3Actor) 29 actor = NewActor(fakeV2Actor, fakeV3Actor) 30 }) 31 32 Describe("ApplicationSummary", func() { 33 DescribeTable("GetIsolationSegmentName", 34 func(summary ApplicationSummary, isoName string, exists bool) { 35 name, ok := summary.GetIsolationSegmentName() 36 Expect(ok).To(Equal(exists)) 37 Expect(name).To(Equal(isoName)) 38 }, 39 40 Entry("when the there are application instances and the isolationSegmentName is set", 41 ApplicationSummary{ 42 ApplicationInstanceWithStats: []v2action.ApplicationInstanceWithStats{{IsolationSegment: "some-name"}}, 43 }, 44 "some-name", 45 true, 46 ), 47 48 Entry("when the there are application instances and the isolationSegmentName is blank", 49 ApplicationSummary{ 50 ApplicationInstanceWithStats: []v2action.ApplicationInstanceWithStats{{}}, 51 }, 52 "", 53 false, 54 ), 55 56 Entry("when the there are no application instances", ApplicationSummary{}, "", false), 57 ) 58 }) 59 60 Describe("GetApplicationSummaryByNameAndSpace", func() { 61 var ( 62 appName string 63 spaceGUID string 64 withObfuscatedValues bool 65 66 summary ApplicationSummary 67 warnings Warnings 68 executeErr error 69 ) 70 71 BeforeEach(func() { 72 appName = "some-app-name" 73 spaceGUID = "some-space-guid" 74 withObfuscatedValues = true 75 }) 76 77 JustBeforeEach(func() { 78 summary, warnings, executeErr = actor.GetApplicationSummaryByNameAndSpace(appName, spaceGUID, withObfuscatedValues) 79 }) 80 81 When("getting the V3 Application Summary is successful", func() { 82 Context("regardless of the application state", func() { 83 BeforeEach(func() { 84 v3Summary := v3action.ApplicationSummary{ 85 Application: v3action.Application{ 86 GUID: "some-app-guid", 87 }, 88 ProcessSummaries: v3action.ProcessSummaries{ 89 {Process: v3action.Process{Type: "console"}}, 90 {Process: v3action.Process{Type: constant.ProcessTypeWeb}}, 91 }, 92 } 93 fakeV3Actor.GetApplicationSummaryByNameAndSpaceReturns(v3Summary, v3action.Warnings{"v3-summary-warning"}, nil) 94 }) 95 96 It("returns the v3 application summary with sorted processes and warnings", func() { 97 Expect(executeErr).ToNot(HaveOccurred()) 98 Expect(warnings).To(ConsistOf("v3-summary-warning")) 99 Expect(summary.ApplicationSummary).To(Equal(v3action.ApplicationSummary{ 100 Application: v3action.Application{ 101 GUID: "some-app-guid", 102 }, 103 ProcessSummaries: v3action.ProcessSummaries{ 104 {Process: v3action.Process{Type: constant.ProcessTypeWeb}}, 105 {Process: v3action.Process{Type: "console"}}, 106 }, 107 })) 108 109 Expect(fakeV3Actor.GetApplicationSummaryByNameAndSpaceCallCount()).To(Equal(1)) 110 passedAppName, passedSpaceGUID, passedWithObfuscatedValues := fakeV3Actor.GetApplicationSummaryByNameAndSpaceArgsForCall(0) 111 Expect(passedAppName).To(Equal(appName)) 112 Expect(passedSpaceGUID).To(Equal(spaceGUID)) 113 Expect(passedWithObfuscatedValues).To(Equal(withObfuscatedValues)) 114 }) 115 116 When("getting the routes is successful", func() { 117 BeforeEach(func() { 118 routes := v2action.Routes{ 119 {GUID: "some-route-guid"}, 120 {GUID: "some-other-route-guid"}, 121 } 122 123 fakeV2Actor.GetApplicationRoutesReturns(routes, v2action.Warnings{"v2-routes-warnings"}, nil) 124 }) 125 126 It("adds the routes to the summary", func() { 127 Expect(executeErr).ToNot(HaveOccurred()) 128 Expect(warnings).To(ConsistOf("v2-routes-warnings", "v3-summary-warning")) 129 130 Expect(summary.Routes).To(Equal(v2action.Routes{ 131 {GUID: "some-route-guid"}, 132 {GUID: "some-other-route-guid"}, 133 })) 134 135 Expect(fakeV2Actor.GetApplicationRoutesCallCount()).To(Equal(1)) 136 Expect(fakeV2Actor.GetApplicationRoutesArgsForCall(0)).To(Equal("some-app-guid")) 137 }) 138 }) 139 140 When("getting the application routes errors", func() { 141 When("a generic error is returned", func() { 142 BeforeEach(func() { 143 fakeV2Actor.GetApplicationRoutesReturns(nil, v2action.Warnings{"v2-routes-warnings"}, errors.New("some-error")) 144 }) 145 146 It("returns warnings and the error", func() { 147 Expect(executeErr).To(MatchError("some-error")) 148 Expect(warnings).To(ConsistOf("v2-routes-warnings", "v3-summary-warning")) 149 }) 150 }) 151 152 When("a ResourceNotFoundError is returned", func() { 153 BeforeEach(func() { 154 fakeV2Actor.GetApplicationRoutesReturns(nil, v2action.Warnings{"v2-routes-warnings"}, ccerror.ResourceNotFoundError{}) 155 }) 156 157 It("adds warnings and continues", func() { 158 Expect(executeErr).ToNot(HaveOccurred()) 159 Expect(warnings).To(ConsistOf("v2-routes-warnings", "v3-summary-warning")) 160 }) 161 }) 162 }) 163 }) 164 165 When("the application is running", func() { 166 BeforeEach(func() { 167 v3Summary := v3action.ApplicationSummary{ 168 Application: v3action.Application{ 169 GUID: "some-app-guid", 170 State: constant.ApplicationStarted, 171 }, 172 } 173 fakeV3Actor.GetApplicationSummaryByNameAndSpaceReturns(v3Summary, v3action.Warnings{"v3-summary-warning"}, nil) 174 }) 175 176 When("getting the application instances with stats is successful", func() { 177 BeforeEach(func() { 178 stats := []v2action.ApplicationInstanceWithStats{{ID: 0}, {ID: 1}} 179 fakeV2Actor.GetApplicationInstancesWithStatsByApplicationReturns(stats, v2action.Warnings{"v2-app-instances-warning"}, nil) 180 }) 181 182 It("returns the application summary with application instances with stats", func() { 183 Expect(executeErr).ToNot(HaveOccurred()) 184 Expect(warnings).To(ConsistOf("v2-app-instances-warning", "v3-summary-warning")) 185 Expect(summary.ApplicationInstanceWithStats).To(Equal([]v2action.ApplicationInstanceWithStats{{ID: 0}, {ID: 1}})) 186 187 Expect(fakeV2Actor.GetApplicationInstancesWithStatsByApplicationCallCount()).To(Equal(1)) 188 }) 189 }) 190 191 When("getting the application instances with stats returns an error", func() { 192 When("a generic error is returned", func() { 193 BeforeEach(func() { 194 fakeV2Actor.GetApplicationInstancesWithStatsByApplicationReturns(nil, v2action.Warnings{"v2-app-instances-warning"}, errors.New("boom")) 195 }) 196 197 It("returns error and warnings", func() { 198 Expect(executeErr).To(MatchError("boom")) 199 Expect(warnings).To(ConsistOf("v2-app-instances-warning", "v3-summary-warning")) 200 }) 201 }) 202 203 When("a ApplicationInstancesNotFoundError is returned", func() { 204 BeforeEach(func() { 205 fakeV2Actor.GetApplicationInstancesWithStatsByApplicationReturns(nil, v2action.Warnings{"v2-app-instances-warning"}, actionerror.ApplicationInstancesNotFoundError{}) 206 }) 207 208 It("adds warnings and continues", func() { 209 Expect(executeErr).ToNot(HaveOccurred()) 210 Expect(warnings).To(ConsistOf("v2-app-instances-warning", "v3-summary-warning")) 211 }) 212 }) 213 }) 214 }) 215 216 When("the application is stopped", func() { 217 BeforeEach(func() { 218 v3Summary := v3action.ApplicationSummary{ 219 Application: v3action.Application{ 220 GUID: "some-app-guid", 221 State: constant.ApplicationStopped, 222 }, 223 } 224 fakeV3Actor.GetApplicationSummaryByNameAndSpaceReturns(v3Summary, v3action.Warnings{"v3-summary-warning"}, nil) 225 }) 226 227 It("does not get application instances with stats", func() { 228 Expect(executeErr).ToNot(HaveOccurred()) 229 Expect(warnings).To(ConsistOf("v3-summary-warning")) 230 231 Expect(fakeV2Actor.GetApplicationInstancesWithStatsByApplicationCallCount()).To(Equal(0)) 232 }) 233 }) 234 }) 235 236 When("getting the V3 Application Summary returns an error", func() { 237 BeforeEach(func() { 238 fakeV3Actor.GetApplicationSummaryByNameAndSpaceReturns(v3action.ApplicationSummary{}, v3action.Warnings{"v3-summary-warning"}, errors.New("CRAZY!")) 239 }) 240 241 It("returns back error and warnings", func() { 242 Expect(executeErr).To(MatchError("CRAZY!")) 243 Expect(warnings).To(ConsistOf("v3-summary-warning")) 244 }) 245 }) 246 }) 247 })