github.com/orange-cloudfoundry/cli@v7.1.0+incompatible/command/v7/add_network_policy_command_test.go (about) 1 package v7_test 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/actor/cfnetworkingaction" 6 "code.cloudfoundry.org/cli/actor/v7action" 7 "code.cloudfoundry.org/cli/command/commandfakes" 8 "code.cloudfoundry.org/cli/command/flag" 9 "code.cloudfoundry.org/cli/command/translatableerror" 10 . "code.cloudfoundry.org/cli/command/v7" 11 "code.cloudfoundry.org/cli/command/v7/v7fakes" 12 "code.cloudfoundry.org/cli/resources" 13 "code.cloudfoundry.org/cli/util/configv3" 14 "code.cloudfoundry.org/cli/util/ui" 15 . "github.com/onsi/ginkgo" 16 . "github.com/onsi/gomega" 17 . "github.com/onsi/gomega/gbytes" 18 ) 19 20 var _ = Describe("add-network-policy Command", func() { 21 var ( 22 cmd AddNetworkPolicyCommand 23 testUI *ui.UI 24 fakeConfig *commandfakes.FakeConfig 25 fakeSharedActor *commandfakes.FakeSharedActor 26 fakeNetworkingActor *v7fakes.FakeNetworkingActor 27 fakeActor *v7fakes.FakeActor 28 binaryName string 29 executeErr error 30 srcApp string 31 destApp string 32 protocol string 33 org string 34 space string 35 ) 36 37 BeforeEach(func() { 38 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 39 fakeConfig = new(commandfakes.FakeConfig) 40 fakeSharedActor = new(commandfakes.FakeSharedActor) 41 fakeNetworkingActor = new(v7fakes.FakeNetworkingActor) 42 fakeActor = new(v7fakes.FakeActor) 43 44 srcApp = "some-app" 45 destApp = "some-other-app" 46 protocol = "tcp" 47 org = "" 48 space = "" 49 50 cmd = AddNetworkPolicyCommand{ 51 BaseCommand: BaseCommand{ 52 UI: testUI, 53 Config: fakeConfig, 54 Actor: fakeActor, 55 SharedActor: fakeSharedActor, 56 }, 57 NetworkingActor: fakeNetworkingActor, 58 RequiredArgs: flag.AddNetworkPolicyArgsV7{ 59 SourceApp: srcApp, 60 DestApp: destApp, 61 }, 62 DestinationSpace: space, 63 DestinationOrg: org, 64 } 65 66 binaryName = "faceman" 67 fakeConfig.BinaryNameReturns(binaryName) 68 }) 69 70 JustBeforeEach(func() { 71 executeErr = cmd.Execute(nil) 72 }) 73 74 When("checking target fails", func() { 75 BeforeEach(func() { 76 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 77 }) 78 79 It("returns an error", func() { 80 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 81 82 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 83 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 84 Expect(checkTargetedOrg).To(BeTrue()) 85 Expect(checkTargetedSpace).To(BeTrue()) 86 }) 87 }) 88 89 When("the user is logged in, an org is targeted, and a space is targeted", func() { 90 BeforeEach(func() { 91 fakeConfig.CurrentUserReturns(configv3.User{Name: "some-user"}, nil) 92 fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "some-space", GUID: "some-space-guid"}) 93 fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "some-org"}) 94 }) 95 96 When("protocol is specified but port is not", func() { 97 BeforeEach(func() { 98 cmd.Protocol = flag.NetworkProtocol{Protocol: protocol} 99 }) 100 101 It("returns an error", func() { 102 Expect(executeErr).To(MatchError(translatableerror.NetworkPolicyProtocolOrPortNotProvidedError{})) 103 Expect(testUI.Out).NotTo(Say(`Adding network policy`)) 104 }) 105 }) 106 107 When("port is specified but protocol is not", func() { 108 BeforeEach(func() { 109 cmd.Port = flag.NetworkPort{StartPort: 8080, EndPort: 8081} 110 }) 111 112 It("returns an error", func() { 113 Expect(executeErr).To(MatchError(translatableerror.NetworkPolicyProtocolOrPortNotProvidedError{})) 114 Expect(testUI.Out).NotTo(Say(`Adding network policy`)) 115 }) 116 }) 117 118 When("both protocol and port are specificed", func() { 119 BeforeEach(func() { 120 cmd.Protocol = flag.NetworkProtocol{Protocol: protocol} 121 cmd.Port = flag.NetworkPort{StartPort: 8080, EndPort: 8081} 122 }) 123 124 When("the policy creation is successful", func() { 125 BeforeEach(func() { 126 fakeNetworkingActor.AddNetworkPolicyReturns(cfnetworkingaction.Warnings{"some-warning-1", "some-warning-2"}, nil) 127 }) 128 129 It("displays OK when no error occurs", func() { 130 Expect(executeErr).ToNot(HaveOccurred()) 131 Expect(fakeActor.GetOrganizationByNameCallCount()).To(Equal(0)) 132 Expect(fakeActor.GetSpaceByNameAndOrganizationCallCount()).To(Equal(0)) 133 Expect(fakeNetworkingActor.AddNetworkPolicyCallCount()).To(Equal(1)) 134 passedSrcSpaceGuid, passedSrcAppName, passedDestSpaceGuid, passedDestAppName, passedProtocol, passedStartPort, passedEndPort := fakeNetworkingActor.AddNetworkPolicyArgsForCall(0) 135 Expect(passedSrcSpaceGuid).To(Equal("some-space-guid")) 136 Expect(passedSrcAppName).To(Equal("some-app")) 137 Expect(passedDestSpaceGuid).To(Equal("some-space-guid")) 138 Expect(passedDestAppName).To(Equal("some-other-app")) 139 Expect(passedProtocol).To(Equal("tcp")) 140 Expect(passedStartPort).To(Equal(8080)) 141 Expect(passedEndPort).To(Equal(8081)) 142 143 Expect(testUI.Out).To(Say(`Adding network policy from app %s to app %s in org some-org / space some-space as some-user\.\.\.`, srcApp, destApp)) 144 Expect(testUI.Err).To(Say("some-warning-1")) 145 Expect(testUI.Err).To(Say("some-warning-2")) 146 Expect(testUI.Out).To(Say("OK")) 147 }) 148 }) 149 150 When("the policy creation is not successful", func() { 151 BeforeEach(func() { 152 fakeNetworkingActor.AddNetworkPolicyReturns(cfnetworkingaction.Warnings{"some-warning-1", "some-warning-2"}, actionerror.ApplicationNotFoundError{Name: srcApp}) 153 }) 154 155 It("does not display OK when an error occurs", func() { 156 Expect(executeErr).To(MatchError(actionerror.ApplicationNotFoundError{Name: srcApp})) 157 158 Expect(testUI.Out).To(Say(`Adding network policy from app %s to app %s in org some-org / space some-space as some-user\.\.\.`, srcApp, destApp)) 159 Expect(testUI.Err).To(Say("some-warning-1")) 160 Expect(testUI.Err).To(Say("some-warning-2")) 161 Expect(testUI.Out).ToNot(Say("OK")) 162 }) 163 }) 164 }) 165 166 When("both protocol and port are not specified", func() { 167 It("defaults protocol to 'tcp' and port to '8080'", func() { 168 Expect(executeErr).ToNot(HaveOccurred()) 169 170 Expect(fakeNetworkingActor.AddNetworkPolicyCallCount()).To(Equal(1)) 171 _, _, _, _, passedProtocol, passedStartPort, passedEndPort := fakeNetworkingActor.AddNetworkPolicyArgsForCall(0) 172 Expect(passedProtocol).To(Equal("tcp")) 173 Expect(passedStartPort).To(Equal(8080)) 174 Expect(passedEndPort).To(Equal(8080)) 175 }) 176 }) 177 178 When("org is specified and space is not", func() { 179 BeforeEach(func() { 180 cmd.DestinationOrg = "bananarama" 181 cmd.DestinationSpace = "" 182 fakeActor.GetOrganizationByNameReturns(resources.Organization{}, v7action.Warnings{}, actionerror.OrganizationNotFoundError{Name: "bananarama"}) 183 }) 184 185 It("returns an error", func() { 186 Expect(executeErr).To(MatchError(translatableerror.NetworkPolicyDestinationOrgWithoutSpaceError{})) 187 Expect(fakeNetworkingActor.AddNetworkPolicyCallCount()).To(Equal(0)) 188 }) 189 }) 190 191 When("invalid org is specified", func() { 192 BeforeEach(func() { 193 cmd.DestinationOrg = "bananarama" 194 cmd.DestinationSpace = "hamdinger" 195 warnings := v7action.Warnings{"some-org-warning-1", "some-org-warning-2"} 196 fakeActor.GetOrganizationByNameReturns(resources.Organization{}, warnings, actionerror.OrganizationNotFoundError{Name: "bananarama"}) 197 }) 198 199 It("returns an error", func() { 200 Expect(executeErr).To(MatchError(actionerror.OrganizationNotFoundError{Name: "bananarama"})) 201 Expect(fakeNetworkingActor.AddNetworkPolicyCallCount()).To(Equal(0)) 202 }) 203 204 It("prints the warnings", func() { 205 Expect(testUI.Err).To(Say("some-org-warning-1")) 206 Expect(testUI.Err).To(Say("some-org-warning-2")) 207 }) 208 }) 209 210 When("a valid org but invalid space is specified", func() { 211 BeforeEach(func() { 212 cmd.DestinationOrg = "bananarama" 213 cmd.DestinationSpace = "hamdinger" 214 warnings := v7action.Warnings{"some-space-warning-1", "some-space-warning-2"} 215 fakeActor.GetOrganizationByNameReturns(resources.Organization{GUID: "some-org-guid"}, v7action.Warnings{}, nil) 216 fakeActor.GetSpaceByNameAndOrganizationReturns(resources.Space{}, warnings, actionerror.SpaceNotFoundError{Name: "bananarama"}) 217 }) 218 219 It("returns an error", func() { 220 passedSpaceName, passedOrgGuid := fakeActor.GetSpaceByNameAndOrganizationArgsForCall(0) 221 Expect(passedSpaceName).To(Equal("hamdinger")) 222 Expect(passedOrgGuid).To(Equal("some-org-guid")) 223 Expect(executeErr).To(MatchError(actionerror.SpaceNotFoundError{Name: "bananarama"})) 224 Expect(fakeNetworkingActor.AddNetworkPolicyCallCount()).To(Equal(0)) 225 }) 226 227 It("prints the warnings", func() { 228 Expect(testUI.Err).To(Say("some-space-warning-1")) 229 Expect(testUI.Err).To(Say("some-space-warning-2")) 230 }) 231 }) 232 233 When("a destination space but no destination org is specified", func() { 234 BeforeEach(func() { 235 cmd.DestinationSpace = "hamdinger" 236 warnings := v7action.Warnings{"some-warning-1", "some-warning-2"} 237 fakeActor.GetSpaceByNameAndOrganizationReturns(resources.Space{GUID: "some-other-space-guid"}, warnings, nil) 238 }) 239 240 It("displays OK", func() { 241 Expect(executeErr).ToNot(HaveOccurred()) 242 Expect(fakeActor.GetOrganizationByNameCallCount()).To(Equal(0)) 243 Expect(fakeNetworkingActor.AddNetworkPolicyCallCount()).To(Equal(1)) 244 passedSrcSpaceGuid, _, passedDestSpaceGuid, _, _, _, _ := fakeNetworkingActor.AddNetworkPolicyArgsForCall(0) 245 Expect(passedSrcSpaceGuid).To(Equal("some-space-guid")) 246 Expect(passedDestSpaceGuid).To(Equal("some-other-space-guid")) 247 248 Expect(testUI.Out).To(Say(`Adding network policy from app %s in org some-org / space some-space to app %s in org some-org / space hamdinger as some-user\.\.\.`, srcApp, destApp)) 249 Expect(testUI.Out).To(Say("OK")) 250 }) 251 252 It("prints the warnings", func() { 253 Expect(testUI.Err).To(Say("some-warning-1")) 254 Expect(testUI.Err).To(Say("some-warning-2")) 255 }) 256 }) 257 258 When("a destination org and space is specified for destination app", func() { 259 BeforeEach(func() { 260 cmd.DestinationOrg = "bananarama" 261 cmd.DestinationSpace = "hamdinger" 262 fakeActor.GetOrganizationByNameReturns(resources.Organization{GUID: "some-org-guid"}, v7action.Warnings{"some-org-warning-1", "some-org-warning-2"}, nil) 263 fakeActor.GetSpaceByNameAndOrganizationReturns(resources.Space{GUID: "some-other-space-guid"}, v7action.Warnings{"some-space-warning-1", "some-space-warning-2"}, nil) 264 fakeNetworkingActor.AddNetworkPolicyReturns(cfnetworkingaction.Warnings{"some-add-warning-1", "some-add-warning-2"}, nil) 265 }) 266 267 It("displays OK", func() { 268 Expect(executeErr).ToNot(HaveOccurred()) 269 Expect(fakeNetworkingActor.AddNetworkPolicyCallCount()).To(Equal(1)) 270 passedSrcSpaceGuid, _, passedDestSpaceGuid, _, _, _, _ := fakeNetworkingActor.AddNetworkPolicyArgsForCall(0) 271 Expect(passedSrcSpaceGuid).To(Equal("some-space-guid")) 272 Expect(passedDestSpaceGuid).To(Equal("some-other-space-guid")) 273 274 Expect(testUI.Out).To(Say(`Adding network policy from app %s in org some-org / space some-space to app %s in org bananarama / space hamdinger as some-user\.\.\.`, srcApp, destApp)) 275 Expect(testUI.Err).To(Say("some-org-warning-1")) 276 Expect(testUI.Err).To(Say("some-org-warning-2")) 277 Expect(testUI.Err).To(Say("some-space-warning-1")) 278 Expect(testUI.Err).To(Say("some-space-warning-2")) 279 Expect(testUI.Err).To(Say("some-add-warning-1")) 280 Expect(testUI.Err).To(Say("some-add-warning-2")) 281 Expect(testUI.Out).To(Say("OK")) 282 }) 283 }) 284 }) 285 })