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