github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+incompatible/command/v3/network_policies_command_test.go (about) 1 package v3_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/actor/cfnetworkingaction" 7 "code.cloudfoundry.org/cli/actor/sharedaction" 8 "code.cloudfoundry.org/cli/command/commandfakes" 9 "code.cloudfoundry.org/cli/command/translatableerror" 10 . "code.cloudfoundry.org/cli/command/v3" 11 "code.cloudfoundry.org/cli/command/v3/v3fakes" 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("network-policies Command", func() { 20 var ( 21 cmd NetworkPoliciesCommand 22 testUI *ui.UI 23 fakeConfig *commandfakes.FakeConfig 24 fakeSharedActor *commandfakes.FakeSharedActor 25 fakeActor *v3fakes.FakeNetworkPoliciesActor 26 binaryName string 27 executeErr error 28 srcApp string 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(v3fakes.FakeNetworkPoliciesActor) 36 37 srcApp = "" 38 39 cmd = NetworkPoliciesCommand{ 40 UI: testUI, 41 SourceApp: srcApp, 42 Config: fakeConfig, 43 SharedActor: fakeSharedActor, 44 Actor: fakeActor, 45 } 46 47 binaryName = "faceman" 48 fakeConfig.BinaryNameReturns(binaryName) 49 }) 50 51 JustBeforeEach(func() { 52 executeErr = cmd.Execute(nil) 53 }) 54 55 Context("when checking target fails", func() { 56 BeforeEach(func() { 57 fakeSharedActor.CheckTargetReturns(sharedaction.NotLoggedInError{BinaryName: binaryName}) 58 }) 59 60 It("returns an error", func() { 61 Expect(executeErr).To(MatchError(translatableerror.NotLoggedInError{BinaryName: binaryName})) 62 63 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 64 passedConfig, checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 65 Expect(passedConfig).To(Equal(fakeConfig)) 66 Expect(checkTargetedOrg).To(BeTrue()) 67 Expect(checkTargetedSpace).To(BeTrue()) 68 }) 69 }) 70 71 Context("when the user is logged in", func() { 72 BeforeEach(func() { 73 fakeConfig.CurrentUserReturns(configv3.User{Name: "some-user"}, nil) 74 fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "some-space", GUID: "some-space-guid"}) 75 fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "some-org"}) 76 }) 77 78 It("outputs flavor text", func() { 79 Expect(testUI.Out).To(Say(`Listing network policies in org some-org / space some-space as some-user\.\.\.`)) 80 }) 81 82 Context("when fetching the user fails", func() { 83 BeforeEach(func() { 84 fakeConfig.CurrentUserReturns(configv3.User{}, errors.New("some-error")) 85 }) 86 87 It("returns an error", func() { 88 Expect(executeErr).To(MatchError("some-error")) 89 }) 90 }) 91 92 Context("when listing policies is successful", func() { 93 BeforeEach(func() { 94 fakeActor.NetworkPoliciesBySpaceReturns([]cfnetworkingaction.Policy{ 95 { 96 SourceName: "app1", 97 DestinationName: "app2", 98 Protocol: "tcp", 99 StartPort: 8080, 100 EndPort: 8080, 101 }, { 102 SourceName: "app2", 103 DestinationName: "app1", 104 Protocol: "udp", 105 StartPort: 1234, 106 EndPort: 2345, 107 }, 108 }, cfnetworkingaction.Warnings{"some-warning-1", "some-warning-2"}, nil) 109 }) 110 111 It("lists the policies when no error occurs", func() { 112 Expect(executeErr).ToNot(HaveOccurred()) 113 Expect(fakeActor.NetworkPoliciesBySpaceCallCount()).To(Equal(1)) 114 passedSpaceGuid := fakeActor.NetworkPoliciesBySpaceArgsForCall(0) 115 Expect(passedSpaceGuid).To(Equal("some-space-guid")) 116 117 Expect(testUI.Out).To(Say(`Listing network policies in org some-org / space some-space as some-user\.\.\.`)) 118 Expect(testUI.Out).To(Say("\n\n")) 119 Expect(testUI.Out).To(Say("source\\s+destination\\s+protocol\\s+ports")) 120 Expect(testUI.Out).To(Say("app1\\s+app2\\s+tcp\\s+8080[^-]")) 121 Expect(testUI.Out).To(Say("app2\\s+app1\\s+udp\\s+1234-2345")) 122 123 Expect(testUI.Err).To(Say("some-warning-1")) 124 Expect(testUI.Err).To(Say("some-warning-2")) 125 }) 126 127 Context("when a source app name is passed", func() { 128 BeforeEach(func() { 129 cmd.SourceApp = "some-app" 130 fakeActor.NetworkPoliciesBySpaceAndAppNameReturns([]cfnetworkingaction.Policy{ 131 { 132 SourceName: "app1", 133 DestinationName: "app2", 134 Protocol: "tcp", 135 StartPort: 8080, 136 EndPort: 8080, 137 }, { 138 SourceName: "app2", 139 DestinationName: "app1", 140 Protocol: "udp", 141 StartPort: 1234, 142 EndPort: 2345, 143 }, 144 }, cfnetworkingaction.Warnings{"some-warning-1", "some-warning-2"}, nil) 145 }) 146 147 It("lists the policies when no error occurs", func() { 148 Expect(executeErr).ToNot(HaveOccurred()) 149 Expect(fakeActor.NetworkPoliciesBySpaceAndAppNameCallCount()).To(Equal(1)) 150 passedSpaceGuid, passedSrcAppName := fakeActor.NetworkPoliciesBySpaceAndAppNameArgsForCall(0) 151 Expect(passedSpaceGuid).To(Equal("some-space-guid")) 152 Expect(passedSrcAppName).To(Equal("some-app")) 153 154 Expect(testUI.Out).To(Say(`Listing network policies of app %s in org some-org / space some-space as some-user\.\.\.`, cmd.SourceApp)) 155 Expect(testUI.Out).To(Say("\n\n")) 156 Expect(testUI.Out).To(Say("source\\s+destination\\s+protocol\\s+ports")) 157 Expect(testUI.Out).To(Say("app1\\s+app2\\s+tcp\\s+8080[^-]")) 158 Expect(testUI.Out).To(Say("app2\\s+app1\\s+udp\\s+1234-2345")) 159 160 Expect(testUI.Err).To(Say("some-warning-1")) 161 Expect(testUI.Err).To(Say("some-warning-2")) 162 }) 163 }) 164 }) 165 166 Context("when listing the policies is not successful", func() { 167 BeforeEach(func() { 168 fakeActor.NetworkPoliciesBySpaceReturns([]cfnetworkingaction.Policy{}, cfnetworkingaction.Warnings{"some-warning-1", "some-warning-2"}, translatableerror.ApplicationNotFoundError{Name: srcApp}) 169 }) 170 171 It("displays warnings and returns the error", func() { 172 Expect(executeErr).To(MatchError(translatableerror.ApplicationNotFoundError{Name: srcApp})) 173 174 Expect(testUI.Out).To(Say(`Listing network policies in org some-org / space some-space as some-user\.\.\.`)) 175 Expect(testUI.Err).To(Say("some-warning-1")) 176 Expect(testUI.Err).To(Say("some-warning-2")) 177 }) 178 }) 179 }) 180 })