github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v6/space_command_test.go (about) 1 package v6_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/v3action" 9 "code.cloudfoundry.org/cli/command/commandfakes" 10 . "code.cloudfoundry.org/cli/command/v6" 11 "code.cloudfoundry.org/cli/command/v6/v6fakes" 12 "code.cloudfoundry.org/cli/util/configv3" 13 "code.cloudfoundry.org/cli/util/ui" 14 . "github.com/onsi/ginkgo" 15 . "github.com/onsi/gomega" 16 . "github.com/onsi/gomega/gbytes" 17 ) 18 19 var _ = Describe("space Command", func() { 20 var ( 21 cmd SpaceCommand 22 testUI *ui.UI 23 fakeConfig *commandfakes.FakeConfig 24 fakeSharedActor *commandfakes.FakeSharedActor 25 fakeActor *v6fakes.FakeSpaceActor 26 fakeActorV3 *v6fakes.FakeSpaceActorV3 27 binaryName string 28 executeErr error 29 ) 30 31 BeforeEach(func() { 32 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 33 fakeConfig = new(commandfakes.FakeConfig) 34 fakeSharedActor = new(commandfakes.FakeSharedActor) 35 fakeActor = new(v6fakes.FakeSpaceActor) 36 fakeActorV3 = new(v6fakes.FakeSpaceActorV3) 37 38 cmd = SpaceCommand{ 39 UI: testUI, 40 Config: fakeConfig, 41 SharedActor: fakeSharedActor, 42 Actor: fakeActor, 43 ActorV3: fakeActorV3, 44 } 45 46 binaryName = "faceman" 47 fakeConfig.BinaryNameReturns(binaryName) 48 }) 49 50 JustBeforeEach(func() { 51 executeErr = cmd.Execute(nil) 52 }) 53 54 When("checking the target fails", func() { 55 BeforeEach(func() { 56 fakeSharedActor.CheckTargetReturns( 57 actionerror.NotLoggedInError{BinaryName: binaryName}) 58 }) 59 60 It("returns an error", func() { 61 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 62 63 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 64 targetedOrganizationRequired, targetedSpaceRequired := fakeSharedActor.CheckTargetArgsForCall(0) 65 Expect(targetedOrganizationRequired).To(Equal(true)) 66 Expect(targetedSpaceRequired).To(Equal(false)) 67 }) 68 }) 69 70 When("the --guid flag is provided", func() { 71 BeforeEach(func() { 72 cmd.RequiredArgs.Space = "some-space" 73 cmd.GUID = true 74 }) 75 76 When("no errors occur", func() { 77 BeforeEach(func() { 78 fakeConfig.TargetedOrganizationReturns( 79 configv3.Organization{GUID: "some-org-guid"}, 80 ) 81 fakeActor.GetSpaceByOrganizationAndNameReturns( 82 v2action.Space{GUID: "some-space-guid"}, 83 v2action.Warnings{"warning-1", "warning-2"}, 84 nil) 85 }) 86 87 It("displays the space guid and outputs all warnings", func() { 88 Expect(executeErr).ToNot(HaveOccurred()) 89 90 Expect(testUI.Out).To(Say("some-space-guid")) 91 Expect(testUI.Err).To(Say("warning-1")) 92 Expect(testUI.Err).To(Say("warning-2")) 93 94 Expect(fakeActor.GetSpaceByOrganizationAndNameCallCount()).To(Equal(1)) 95 orgGUID, spaceName := fakeActor.GetSpaceByOrganizationAndNameArgsForCall(0) 96 Expect(orgGUID).To(Equal("some-org-guid")) 97 Expect(spaceName).To(Equal("some-space")) 98 }) 99 }) 100 101 When("getting the space returns an error", func() { 102 When("the error is translatable", func() { 103 BeforeEach(func() { 104 fakeActor.GetSpaceByOrganizationAndNameReturns( 105 v2action.Space{}, 106 v2action.Warnings{"warning-1", "warning-2"}, 107 actionerror.SpaceNotFoundError{Name: "some-space"}) 108 }) 109 110 It("returns a translatable error and outputs all warnings", func() { 111 Expect(executeErr).To(MatchError(actionerror.SpaceNotFoundError{Name: "some-space"})) 112 113 Expect(testUI.Err).To(Say("warning-1")) 114 Expect(testUI.Err).To(Say("warning-2")) 115 }) 116 }) 117 118 When("the error is not translatable", func() { 119 var expectedErr error 120 121 BeforeEach(func() { 122 expectedErr = errors.New("get space error") 123 fakeActor.GetSpaceByOrganizationAndNameReturns( 124 v2action.Space{}, 125 v2action.Warnings{"warning-1", "warning-2"}, 126 expectedErr) 127 }) 128 129 It("returns the error and all warnings", func() { 130 Expect(executeErr).To(MatchError(expectedErr)) 131 132 Expect(testUI.Err).To(Say("warning-1")) 133 Expect(testUI.Err).To(Say("warning-2")) 134 }) 135 }) 136 }) 137 }) 138 139 When("the --guid flag is not provided", func() { 140 When("no errors occur", func() { 141 BeforeEach(func() { 142 fakeConfig.CurrentUserReturns( 143 configv3.User{ 144 Name: "some-user", 145 }, 146 nil) 147 148 cmd.RequiredArgs.Space = "some-space" 149 150 fakeConfig.TargetedOrganizationReturns( 151 configv3.Organization{ 152 GUID: "some-org-guid", 153 Name: "some-org", 154 }, 155 ) 156 157 fakeActor.GetSpaceSummaryByOrganizationAndNameReturns( 158 v2action.SpaceSummary{ 159 Space: v2action.Space{ 160 Name: "some-space", 161 GUID: "some-space-guid", 162 }, 163 OrgName: "some-org", 164 OrgDefaultIsolationSegmentGUID: "some-org-default-isolation-segment-guid", 165 AppNames: []string{"app1", "app2", "app3"}, 166 ServiceInstanceNames: []string{"service1", "service2", "service3"}, 167 SpaceQuotaName: "some-space-quota", 168 RunningSecurityGroupNames: []string{"public_networks", "dns", "load_balancer"}, 169 StagingSecurityGroupNames: []string{"staging-sec-1", "staging-sec-2"}, 170 }, 171 v2action.Warnings{"warning-1", "warning-2"}, 172 nil, 173 ) 174 }) 175 176 When("there is no v3 API", func() { 177 BeforeEach(func() { 178 cmd.ActorV3 = nil 179 }) 180 181 It("displays the space summary with no isolation segment row", func() { 182 Expect(executeErr).To(BeNil()) 183 Expect(testUI.Out).ToNot(Say("isolation segment:")) 184 }) 185 }) 186 187 When("there is a v3 API", func() { 188 When("retrieving the data is successful", func() { 189 BeforeEach(func() { 190 fakeActorV3.GetEffectiveIsolationSegmentBySpaceReturns( 191 v3action.IsolationSegment{ 192 Name: "some-isolation-segment", 193 }, 194 v3action.Warnings{"v3-warning-1", "v3-warning-2"}, 195 nil, 196 ) 197 }) 198 199 It("displays warnings and a table with space name, org, apps, services, isolation segment, space quota and security groups", func() { 200 Expect(executeErr).To(BeNil()) 201 202 Expect(testUI.Out).To(Say(`Getting info for space some-space in org some-org as some-user\.\.\.`)) 203 Expect(testUI.Out).To(Say(`name:\s+some-space`)) 204 Expect(testUI.Out).To(Say(`org:\s+some-org`)) 205 Expect(testUI.Out).To(Say(`apps:\s+app1, app2, app3`)) 206 Expect(testUI.Out).To(Say(`services:\s+service1, service2, service3`)) 207 Expect(testUI.Out).To(Say(`isolation segment:\s+some-isolation-segment`)) 208 Expect(testUI.Out).To(Say(`space quota:\s+some-space-quota`)) 209 Expect(testUI.Out).To(Say(`running security groups:\s+public_networks, dns, load_balancer`)) 210 Expect(testUI.Out).To(Say(`staging security groups:\s+staging-sec-1, staging-sec-2`)) 211 212 Expect(testUI.Err).To(Say("warning-1")) 213 Expect(testUI.Err).To(Say("warning-2")) 214 Expect(testUI.Err).To(Say("v3-warning-1")) 215 Expect(testUI.Err).To(Say("v3-warning-2")) 216 217 Expect(fakeConfig.CurrentUserCallCount()).To(Equal(1)) 218 Expect(fakeActor.GetSpaceSummaryByOrganizationAndNameCallCount()).To(Equal(1)) 219 orgGUID, spaceName := fakeActor.GetSpaceSummaryByOrganizationAndNameArgsForCall(0) 220 Expect(orgGUID).To(Equal("some-org-guid")) 221 Expect(spaceName).To(Equal("some-space")) 222 Expect(fakeActorV3.GetEffectiveIsolationSegmentBySpaceCallCount()).To(Equal(1)) 223 spaceGUID, orgDefaultIsolationSegmentGUID := fakeActorV3.GetEffectiveIsolationSegmentBySpaceArgsForCall(0) 224 Expect(spaceGUID).To(Equal("some-space-guid")) 225 Expect(orgDefaultIsolationSegmentGUID).To(Equal("some-org-default-isolation-segment-guid")) 226 }) 227 }) 228 229 When("getting the isolation segment returns an error", func() { 230 Context("a generic error", func() { 231 var expectedErr error 232 233 BeforeEach(func() { 234 expectedErr = errors.New("get isolation segment error") 235 fakeActorV3.GetEffectiveIsolationSegmentBySpaceReturns( 236 v3action.IsolationSegment{}, 237 v3action.Warnings{"v3-warning-1", "v3-warning-2"}, 238 expectedErr) 239 }) 240 241 It("returns the error and all warnings", func() { 242 Expect(executeErr).To(MatchError(expectedErr)) 243 244 Expect(testUI.Err).To(Say("v3-warning-1")) 245 Expect(testUI.Err).To(Say("v3-warning-2")) 246 }) 247 }) 248 249 Context("a NoRelationshipError", func() { 250 BeforeEach(func() { 251 fakeActorV3.GetEffectiveIsolationSegmentBySpaceReturns( 252 v3action.IsolationSegment{}, 253 v3action.Warnings{"v3-warning-1", "v3-warning-2"}, 254 actionerror.NoRelationshipError{}) 255 }) 256 257 It("does not fill in the isolation segment", func() { 258 Expect(executeErr).ToNot(HaveOccurred()) 259 Expect(testUI.Out).To(Say(`(?m)isolation segment:\s*$`)) 260 }) 261 }) 262 }) 263 }) 264 }) 265 }) 266 267 When("getting the current user returns an error", func() { 268 var expectedErr error 269 270 BeforeEach(func() { 271 expectedErr = errors.New("getting current user error") 272 fakeConfig.CurrentUserReturns( 273 configv3.User{}, 274 expectedErr) 275 }) 276 277 It("returns the error", func() { 278 Expect(executeErr).To(MatchError(expectedErr)) 279 }) 280 }) 281 282 When("getting the space summary returns an error", func() { 283 When("the error is translatable", func() { 284 BeforeEach(func() { 285 fakeActor.GetSpaceSummaryByOrganizationAndNameReturns( 286 v2action.SpaceSummary{}, 287 v2action.Warnings{"warning-1", "warning-2"}, 288 actionerror.SpaceNotFoundError{Name: "some-space"}) 289 }) 290 291 It("returns a translatable error and outputs all warnings", func() { 292 Expect(executeErr).To(MatchError(actionerror.SpaceNotFoundError{Name: "some-space"})) 293 294 Expect(testUI.Err).To(Say("warning-1")) 295 Expect(testUI.Err).To(Say("warning-2")) 296 }) 297 }) 298 299 When("the error is not translatable", func() { 300 var expectedErr error 301 302 BeforeEach(func() { 303 expectedErr = errors.New("get space summary error") 304 fakeActor.GetSpaceSummaryByOrganizationAndNameReturns( 305 v2action.SpaceSummary{}, 306 v2action.Warnings{"warning-1", "warning-2"}, 307 expectedErr) 308 }) 309 310 It("returns the error and all warnings", func() { 311 Expect(executeErr).To(MatchError(expectedErr)) 312 313 Expect(testUI.Err).To(Say("warning-1")) 314 Expect(testUI.Err).To(Say("warning-2")) 315 }) 316 }) 317 }) 318 319 When("the --security-group-rules flag is provided", func() { 320 BeforeEach(func() { 321 fakeConfig.CurrentUserReturns( 322 configv3.User{ 323 Name: "some-user", 324 }, 325 nil) 326 327 cmd.RequiredArgs.Space = "some-space" 328 cmd.SecurityGroupRules = true 329 330 fakeConfig.TargetedOrganizationReturns( 331 configv3.Organization{ 332 GUID: "some-org-guid", 333 Name: "some-org", 334 }, 335 ) 336 337 fakeActor.GetSpaceSummaryByOrganizationAndNameReturns( 338 v2action.SpaceSummary{ 339 Space: v2action.Space{ 340 Name: "some-space", 341 }, 342 OrgName: "some-org", 343 AppNames: []string{"app1", "app2", "app3"}, 344 ServiceInstanceNames: []string{"service1", "service2", "service3"}, 345 SpaceQuotaName: "some-space-quota", 346 RunningSecurityGroupNames: []string{"public_networks", "dns", "load_balancer"}, 347 StagingSecurityGroupNames: []string{"staging-sec-1", "staging-sec-2"}, 348 SecurityGroupRules: []v2action.SecurityGroupRule{ 349 { 350 Description: "Public networks", 351 Destination: "0.0.0.0-9.255.255.255", 352 Lifecycle: "staging", 353 Name: "public_networks", 354 Ports: "12345", 355 Protocol: "tcp", 356 }, 357 { 358 Description: "Public networks", 359 Destination: "0.0.0.0-9.255.255.255", 360 Lifecycle: "running", 361 Name: "public_networks", 362 Ports: "12345", 363 Protocol: "tcp", 364 }, 365 { 366 Description: "More public networks", 367 Destination: "11.0.0.0-169.253.255.255", 368 Lifecycle: "staging", 369 Name: "more_public_networks", 370 Ports: "54321", 371 Protocol: "udp", 372 }, 373 { 374 Description: "More public networks", 375 Destination: "11.0.0.0-169.253.255.255", 376 Lifecycle: "running", 377 Name: "more_public_networks", 378 Ports: "54321", 379 Protocol: "udp", 380 }, 381 }, 382 }, 383 v2action.Warnings{"warning-1", "warning-2"}, 384 nil, 385 ) 386 }) 387 388 It("displays warnings and security group rules", func() { 389 Expect(executeErr).To(BeNil()) 390 391 orgGUID, spaceName := fakeActor.GetSpaceSummaryByOrganizationAndNameArgsForCall(0) 392 Expect(orgGUID).To(Equal("some-org-guid")) 393 Expect(spaceName).To(Equal("some-space")) 394 395 Expect(testUI.Out).To(Say(`name:\s+some-space`)) 396 Expect(testUI.Out).To(Say(`running security groups:\s+public_networks, dns, load_balancer`)) 397 Expect(testUI.Out).To(Say(`staging security groups:\s+staging-sec-1, staging-sec-2`)) 398 Expect(testUI.Out).To(Say(`(?m)^\n^\s+security group\s+destination\s+ports\s+protocol\s+lifecycle\s+description$`)) 399 Expect(testUI.Out).To(Say(`#0\s+public_networks\s+0.0.0.0-9.255.255.255\s+12345\s+tcp\s+staging\s+Public networks`)) 400 Expect(testUI.Out).To(Say(`(?m)^\s+public_networks\s+0.0.0.0-9.255.255.255\s+12345\s+tcp\s+running\s+Public networks`)) 401 Expect(testUI.Out).To(Say(`#1\s+more_public_networks\s+11.0.0.0-169.253.255.255\s+54321\s+udp\s+staging\s+More public networks`)) 402 Expect(testUI.Out).To(Say(`(?m)\s+more_public_networks\s+11.0.0.0-169.253.255.255\s+54321\s+udp\s+running\s+More public networks`)) 403 }) 404 }) 405 })