github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+incompatible/actor/cfnetworkingaction/policy_test.go (about) 1 package cfnetworkingaction_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cfnetworking-cli-api/cfnetworking/cfnetv1" 7 . "code.cloudfoundry.org/cli/actor/cfnetworkingaction" 8 "code.cloudfoundry.org/cli/actor/cfnetworkingaction/cfnetworkingactionfakes" 9 "code.cloudfoundry.org/cli/actor/v3action" 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/gomega" 12 ) 13 14 var _ = Describe("Policy", func() { 15 var ( 16 actor *Actor 17 fakeV3Actor *cfnetworkingactionfakes.FakeV3Actor 18 fakeNetworkingClient *cfnetworkingactionfakes.FakeNetworkingClient 19 20 warnings Warnings 21 executeErr error 22 ) 23 24 BeforeEach(func() { 25 fakeV3Actor = new(cfnetworkingactionfakes.FakeV3Actor) 26 fakeNetworkingClient = new(cfnetworkingactionfakes.FakeNetworkingClient) 27 28 fakeV3Actor.GetApplicationByNameAndSpaceStub = func(appName string, spaceGUID string) (v3action.Application, v3action.Warnings, error) { 29 if appName == "appA" { 30 return v3action.Application{GUID: "appAGUID"}, []string{"v3ActorWarningA"}, nil 31 } else if appName == "appB" { 32 return v3action.Application{GUID: "appBGUID"}, []string{"v3ActorWarningB"}, nil 33 } 34 return v3action.Application{}, nil, nil 35 } 36 37 actor = NewActor(fakeNetworkingClient, fakeV3Actor) 38 }) 39 40 Describe("AddNetworkPolicy", func() { 41 JustBeforeEach(func() { 42 spaceGuid := "space" 43 srcApp := "appA" 44 destApp := "appB" 45 protocol := "tcp" 46 startPort := 8080 47 endPort := 8090 48 warnings, executeErr = actor.AddNetworkPolicy(spaceGuid, srcApp, destApp, protocol, startPort, endPort) 49 }) 50 51 It("creates policies", func() { 52 Expect(warnings).To(Equal(Warnings([]string{"v3ActorWarningA", "v3ActorWarningB"}))) 53 Expect(executeErr).NotTo(HaveOccurred()) 54 55 Expect(fakeV3Actor.GetApplicationByNameAndSpaceCallCount()).To(Equal(2)) 56 sourceAppName, spaceGUID := fakeV3Actor.GetApplicationByNameAndSpaceArgsForCall(0) 57 Expect(sourceAppName).To(Equal("appA")) 58 Expect(spaceGUID).To(Equal("space")) 59 60 destAppName, spaceGUID := fakeV3Actor.GetApplicationByNameAndSpaceArgsForCall(1) 61 Expect(destAppName).To(Equal("appB")) 62 Expect(spaceGUID).To(Equal("space")) 63 64 Expect(fakeNetworkingClient.CreatePoliciesCallCount()).To(Equal(1)) 65 Expect(fakeNetworkingClient.CreatePoliciesArgsForCall(0)).To(Equal([]cfnetv1.Policy{ 66 { 67 Source: cfnetv1.PolicySource{ 68 ID: "appAGUID", 69 }, 70 Destination: cfnetv1.PolicyDestination{ 71 ID: "appBGUID", 72 Protocol: "tcp", 73 Ports: cfnetv1.Ports{ 74 Start: 8080, 75 End: 8090, 76 }, 77 }, 78 }, 79 })) 80 }) 81 82 Context("when getting the source app fails ", func() { 83 BeforeEach(func() { 84 fakeV3Actor.GetApplicationByNameAndSpaceReturns(v3action.Application{}, []string{"v3ActorWarningA"}, errors.New("banana")) 85 }) 86 It("returns a sensible error", func() { 87 Expect(warnings).To(Equal(Warnings([]string{"v3ActorWarningA"}))) 88 Expect(executeErr).To(MatchError("banana")) 89 }) 90 }) 91 92 Context("when getting the destination app fails ", func() { 93 BeforeEach(func() { 94 fakeV3Actor.GetApplicationByNameAndSpaceStub = func(appName string, spaceGUID string) (v3action.Application, v3action.Warnings, error) { 95 if appName == "appB" { 96 return v3action.Application{}, []string{"v3ActorWarningB"}, errors.New("banana") 97 } 98 return v3action.Application{}, []string{"v3ActorWarningA"}, nil 99 } 100 }) 101 It("returns a sensible error", func() { 102 Expect(warnings).To(Equal(Warnings([]string{"v3ActorWarningA", "v3ActorWarningB"}))) 103 Expect(executeErr).To(MatchError("banana")) 104 }) 105 }) 106 107 Context("when creating the policy fails", func() { 108 BeforeEach(func() { 109 fakeNetworkingClient.CreatePoliciesReturns(errors.New("apple")) 110 }) 111 It("returns a sensible error", func() { 112 Expect(executeErr).To(MatchError("apple")) 113 }) 114 }) 115 }) 116 117 Describe("NetworkPoliciesBySpaceAndAppName", func() { 118 var ( 119 policies []Policy 120 srcApp string 121 ) 122 123 BeforeEach(func() { 124 fakeNetworkingClient.ListPoliciesReturns([]cfnetv1.Policy{{ 125 Source: cfnetv1.PolicySource{ 126 ID: "appAGUID", 127 }, 128 Destination: cfnetv1.PolicyDestination{ 129 ID: "appBGUID", 130 Protocol: "tcp", 131 Ports: cfnetv1.Ports{ 132 Start: 8080, 133 End: 8080, 134 }, 135 }, 136 }, { 137 Source: cfnetv1.PolicySource{ 138 ID: "appBGUID", 139 }, 140 Destination: cfnetv1.PolicyDestination{ 141 ID: "appBGUID", 142 Protocol: "tcp", 143 Ports: cfnetv1.Ports{ 144 Start: 8080, 145 End: 8080, 146 }, 147 }, 148 }, { 149 Source: cfnetv1.PolicySource{ 150 ID: "appCGUID", 151 }, 152 Destination: cfnetv1.PolicyDestination{ 153 ID: "appCGUID", 154 Protocol: "tcp", 155 Ports: cfnetv1.Ports{ 156 Start: 8080, 157 End: 8080, 158 }, 159 }, 160 }}, nil) 161 162 fakeV3Actor.GetApplicationsBySpaceStub = func(_ string) ([]v3action.Application, v3action.Warnings, error) { 163 return []v3action.Application{ 164 { 165 Name: "appA", 166 GUID: "appAGUID", 167 }, 168 { 169 Name: "appB", 170 GUID: "appBGUID", 171 }, 172 }, []string{"GetApplicationsBySpaceWarning"}, nil 173 } 174 175 }) 176 177 JustBeforeEach(func() { 178 spaceGuid := "space" 179 policies, warnings, executeErr = actor.NetworkPoliciesBySpaceAndAppName(spaceGuid, srcApp) 180 }) 181 182 Context("when listing policies based on a source app", func() { 183 BeforeEach(func() { 184 srcApp = "appA" 185 }) 186 187 It("lists only policies for which the app is a source", func() { 188 Expect(policies).To(Equal( 189 []Policy{{ 190 SourceName: "appA", 191 DestinationName: "appB", 192 Protocol: "tcp", 193 StartPort: 8080, 194 EndPort: 8080, 195 }}, 196 )) 197 }) 198 199 It("passes through the source app argument", func() { 200 Expect(warnings).To(Equal(Warnings([]string{"GetApplicationsBySpaceWarning", "v3ActorWarningA"}))) 201 Expect(executeErr).NotTo(HaveOccurred()) 202 203 Expect(fakeV3Actor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1)) 204 sourceAppName, spaceGUID := fakeV3Actor.GetApplicationByNameAndSpaceArgsForCall(0) 205 Expect(sourceAppName).To(Equal("appA")) 206 Expect(spaceGUID).To(Equal("space")) 207 208 Expect(fakeNetworkingClient.ListPoliciesCallCount()).To(Equal(1)) 209 Expect(fakeNetworkingClient.ListPoliciesArgsForCall(0)).To(Equal([]string{"appAGUID"})) 210 }) 211 }) 212 213 Context("when getting the applications fails", func() { 214 BeforeEach(func() { 215 fakeV3Actor.GetApplicationsBySpaceReturns([]v3action.Application{}, []string{"GetApplicationsBySpaceWarning"}, errors.New("banana")) 216 }) 217 218 It("returns a sensible error", func() { 219 Expect(policies).To(Equal([]Policy{})) 220 Expect(warnings).To(Equal(Warnings([]string{"GetApplicationsBySpaceWarning"}))) 221 Expect(executeErr).To(MatchError("banana")) 222 }) 223 }) 224 225 Context("when getting the source app fails ", func() { 226 BeforeEach(func() { 227 fakeV3Actor.GetApplicationByNameAndSpaceStub = func(appName string, spaceGUID string) (v3action.Application, v3action.Warnings, error) { 228 if appName == "appA" { 229 return v3action.Application{}, []string{"v3ActorWarningA"}, errors.New("banana") 230 } 231 return v3action.Application{}, []string{"v3ActorWarningB"}, nil 232 } 233 234 srcApp = "appA" 235 }) 236 237 It("returns a sensible error", func() { 238 Expect(policies).To(Equal([]Policy{})) 239 Expect(warnings).To(Equal(Warnings([]string{"GetApplicationsBySpaceWarning", "v3ActorWarningA"}))) 240 Expect(executeErr).To(MatchError("banana")) 241 }) 242 }) 243 244 Context("when listing the policy fails", func() { 245 BeforeEach(func() { 246 fakeNetworkingClient.ListPoliciesReturns([]cfnetv1.Policy{}, errors.New("apple")) 247 }) 248 It("returns a sensible error", func() { 249 Expect(executeErr).To(MatchError("apple")) 250 }) 251 }) 252 }) 253 254 Describe("NetworkPoliciesBySpace", func() { 255 var ( 256 policies []Policy 257 ) 258 259 BeforeEach(func() { 260 fakeNetworkingClient.ListPoliciesReturns([]cfnetv1.Policy{{ 261 Source: cfnetv1.PolicySource{ 262 ID: "appAGUID", 263 }, 264 Destination: cfnetv1.PolicyDestination{ 265 ID: "appBGUID", 266 Protocol: "tcp", 267 Ports: cfnetv1.Ports{ 268 Start: 8080, 269 End: 8080, 270 }, 271 }, 272 }, { 273 Source: cfnetv1.PolicySource{ 274 ID: "appBGUID", 275 }, 276 Destination: cfnetv1.PolicyDestination{ 277 ID: "appBGUID", 278 Protocol: "tcp", 279 Ports: cfnetv1.Ports{ 280 Start: 8080, 281 End: 8080, 282 }, 283 }, 284 }, { 285 Source: cfnetv1.PolicySource{ 286 ID: "appCGUID", 287 }, 288 Destination: cfnetv1.PolicyDestination{ 289 ID: "appCGUID", 290 Protocol: "tcp", 291 Ports: cfnetv1.Ports{ 292 Start: 8080, 293 End: 8080, 294 }, 295 }, 296 }}, nil) 297 298 fakeV3Actor.GetApplicationsBySpaceStub = func(_ string) ([]v3action.Application, v3action.Warnings, error) { 299 return []v3action.Application{ 300 { 301 Name: "appA", 302 GUID: "appAGUID", 303 }, 304 { 305 Name: "appB", 306 GUID: "appBGUID", 307 }, 308 }, []string{"GetApplicationsBySpaceWarning"}, nil 309 } 310 311 }) 312 313 JustBeforeEach(func() { 314 spaceGuid := "space" 315 policies, warnings, executeErr = actor.NetworkPoliciesBySpace(spaceGuid) 316 }) 317 318 It("lists policies", func() { 319 Expect(policies).To(Equal( 320 []Policy{{ 321 SourceName: "appA", 322 DestinationName: "appB", 323 Protocol: "tcp", 324 StartPort: 8080, 325 EndPort: 8080, 326 }, { 327 SourceName: "appB", 328 DestinationName: "appB", 329 Protocol: "tcp", 330 StartPort: 8080, 331 EndPort: 8080, 332 }}, 333 )) 334 Expect(warnings).To(Equal(Warnings([]string{"GetApplicationsBySpaceWarning"}))) 335 Expect(executeErr).NotTo(HaveOccurred()) 336 337 Expect(fakeV3Actor.GetApplicationsBySpaceCallCount()).To(Equal(1)) 338 Expect(fakeV3Actor.GetApplicationByNameAndSpaceCallCount()).To(Equal(0)) 339 340 Expect(fakeNetworkingClient.ListPoliciesCallCount()).To(Equal(1)) 341 Expect(fakeNetworkingClient.ListPoliciesArgsForCall(0)).To(BeNil()) 342 }) 343 344 Context("when getting the applications fails", func() { 345 BeforeEach(func() { 346 fakeV3Actor.GetApplicationsBySpaceReturns([]v3action.Application{}, []string{"GetApplicationsBySpaceWarning"}, errors.New("banana")) 347 }) 348 349 It("returns a sensible error", func() { 350 Expect(policies).To(Equal([]Policy{})) 351 Expect(warnings).To(Equal(Warnings([]string{"GetApplicationsBySpaceWarning"}))) 352 Expect(executeErr).To(MatchError("banana")) 353 }) 354 }) 355 356 Context("when listing the policy fails", func() { 357 BeforeEach(func() { 358 fakeNetworkingClient.ListPoliciesReturns([]cfnetv1.Policy{}, errors.New("apple")) 359 }) 360 It("returns a sensible error", func() { 361 Expect(executeErr).To(MatchError("apple")) 362 }) 363 }) 364 }) 365 366 Describe("RemoveNetworkPolicy", func() { 367 BeforeEach(func() { 368 fakeNetworkingClient.ListPoliciesReturns([]cfnetv1.Policy{ 369 { 370 Source: cfnetv1.PolicySource{ 371 ID: "appAGUID", 372 }, 373 Destination: cfnetv1.PolicyDestination{ 374 ID: "appBGUID", 375 Protocol: "udp", 376 Ports: cfnetv1.Ports{ 377 Start: 123, 378 End: 345, 379 }, 380 }, 381 }, 382 }, nil) 383 }) 384 385 JustBeforeEach(func() { 386 spaceGuid := "space" 387 srcApp := "appA" 388 destApp := "appB" 389 protocol := "udp" 390 startPort := 123 391 endPort := 345 392 warnings, executeErr = actor.RemoveNetworkPolicy(spaceGuid, srcApp, destApp, protocol, startPort, endPort) 393 }) 394 It("removes policies", func() { 395 Expect(warnings).To(Equal(Warnings([]string{"v3ActorWarningA", "v3ActorWarningB"}))) 396 Expect(executeErr).NotTo(HaveOccurred()) 397 398 Expect(fakeV3Actor.GetApplicationByNameAndSpaceCallCount()).To(Equal(2)) 399 sourceAppName, spaceGUID := fakeV3Actor.GetApplicationByNameAndSpaceArgsForCall(0) 400 Expect(sourceAppName).To(Equal("appA")) 401 Expect(spaceGUID).To(Equal("space")) 402 403 destAppName, spaceGUID := fakeV3Actor.GetApplicationByNameAndSpaceArgsForCall(1) 404 Expect(destAppName).To(Equal("appB")) 405 Expect(spaceGUID).To(Equal("space")) 406 407 Expect(fakeNetworkingClient.ListPoliciesCallCount()).To(Equal(1)) 408 409 Expect(fakeNetworkingClient.RemovePoliciesCallCount()).To(Equal(1)) 410 Expect(fakeNetworkingClient.RemovePoliciesArgsForCall(0)).To(Equal([]cfnetv1.Policy{ 411 { 412 Source: cfnetv1.PolicySource{ 413 ID: "appAGUID", 414 }, 415 Destination: cfnetv1.PolicyDestination{ 416 ID: "appBGUID", 417 Protocol: "udp", 418 Ports: cfnetv1.Ports{ 419 Start: 123, 420 End: 345, 421 }, 422 }, 423 }, 424 })) 425 }) 426 427 Context("when the policy does not exist", func() { 428 BeforeEach(func() { 429 fakeNetworkingClient.ListPoliciesReturns([]cfnetv1.Policy{}, nil) 430 }) 431 432 It("returns an error", func() { 433 Expect(warnings).To(Equal(Warnings([]string{"v3ActorWarningA", "v3ActorWarningB"}))) 434 Expect(executeErr).To(MatchError("Policy does not exist.")) 435 }) 436 }) 437 438 Context("when getting the source app fails ", func() { 439 BeforeEach(func() { 440 fakeV3Actor.GetApplicationByNameAndSpaceReturns(v3action.Application{}, []string{"v3ActorWarningA"}, errors.New("banana")) 441 }) 442 It("returns a sensible error", func() { 443 Expect(warnings).To(Equal(Warnings([]string{"v3ActorWarningA"}))) 444 Expect(executeErr).To(MatchError("banana")) 445 }) 446 }) 447 448 Context("when getting the destination app fails ", func() { 449 BeforeEach(func() { 450 fakeV3Actor.GetApplicationByNameAndSpaceReturnsOnCall(0, v3action.Application{}, []string{"v3ActorWarningA"}, nil) 451 fakeV3Actor.GetApplicationByNameAndSpaceReturnsOnCall(1, v3action.Application{}, []string{"v3ActorWarningB"}, errors.New("banana")) 452 }) 453 454 It("returns a sensible error", func() { 455 Expect(warnings).To(Equal(Warnings([]string{"v3ActorWarningA", "v3ActorWarningB"}))) 456 Expect(executeErr).To(MatchError("banana")) 457 }) 458 }) 459 460 Context("when listing policies fails", func() { 461 BeforeEach(func() { 462 fakeNetworkingClient.ListPoliciesReturns([]cfnetv1.Policy{}, errors.New("apple")) 463 }) 464 It("returns a sensible error", func() { 465 Expect(executeErr).To(MatchError("apple")) 466 }) 467 }) 468 469 Context("when removing the policy fails", func() { 470 BeforeEach(func() { 471 fakeNetworkingClient.RemovePoliciesReturns(errors.New("apple")) 472 }) 473 It("returns a sensible error", func() { 474 Expect(executeErr).To(MatchError("apple")) 475 }) 476 }) 477 }) 478 })