github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/routes_command_test.go (about) 1 package v7_test 2 3 import ( 4 "errors" 5 6 "github.com/LukasHeimann/cloudfoundrycli/v8/actor/actionerror" 7 "github.com/LukasHeimann/cloudfoundrycli/v8/actor/v7action" 8 "github.com/LukasHeimann/cloudfoundrycli/v8/command/commandfakes" 9 . "github.com/LukasHeimann/cloudfoundrycli/v8/command/v7" 10 "github.com/LukasHeimann/cloudfoundrycli/v8/command/v7/v7fakes" 11 "github.com/LukasHeimann/cloudfoundrycli/v8/resources" 12 "github.com/LukasHeimann/cloudfoundrycli/v8/util/configv3" 13 "github.com/LukasHeimann/cloudfoundrycli/v8/util/ui" 14 15 . "github.com/onsi/ginkgo" 16 . "github.com/onsi/gomega" 17 . "github.com/onsi/gomega/gbytes" 18 ) 19 20 var _ = Describe("routes Command", func() { 21 var ( 22 cmd RoutesCommand 23 testUI *ui.UI 24 fakeConfig *commandfakes.FakeConfig 25 fakeSharedActor *commandfakes.FakeSharedActor 26 fakeActor *v7fakes.FakeActor 27 executeErr error 28 args []string 29 binaryName string 30 ) 31 32 const tableHeaders = `space\s+host\s+domain\s+port\s+path\s+protocol\s+app-protocol\s+apps\s+service instance` 33 34 BeforeEach(func() { 35 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 36 fakeConfig = new(commandfakes.FakeConfig) 37 fakeSharedActor = new(commandfakes.FakeSharedActor) 38 fakeActor = new(v7fakes.FakeActor) 39 args = nil 40 41 binaryName = "faceman" 42 fakeConfig.BinaryNameReturns(binaryName) 43 44 cmd = RoutesCommand{ 45 BaseCommand: BaseCommand{ 46 UI: testUI, 47 Config: fakeConfig, 48 SharedActor: fakeSharedActor, 49 Actor: fakeActor, 50 }, 51 Orglevel: false, 52 } 53 }) 54 55 JustBeforeEach(func() { 56 executeErr = cmd.Execute(args) 57 }) 58 59 When("the environment is not setup correctly", func() { 60 When("checking target fails", func() { 61 BeforeEach(func() { 62 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 63 }) 64 65 It("returns an error", func() { 66 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 67 68 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 69 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 70 Expect(checkTargetedOrg).To(BeTrue()) 71 Expect(checkTargetedSpace).To(BeTrue()) 72 }) 73 }) 74 75 When("when there is no org targeted", func() { 76 BeforeEach(func() { 77 fakeSharedActor.CheckTargetReturns(actionerror.NoOrganizationTargetedError{BinaryName: binaryName}) 78 }) 79 80 It("returns an error", func() { 81 Expect(executeErr).To(MatchError(actionerror.NoOrganizationTargetedError{BinaryName: binaryName})) 82 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 83 Expect(checkTargetedOrg).To(BeTrue()) 84 Expect(checkTargetedSpace).To(BeTrue()) 85 }) 86 }) 87 }) 88 89 When("the environment is setup correctly", func() { 90 BeforeEach(func() { 91 fakeActor.GetCurrentUserReturns(configv3.User{Name: "banana"}, nil) 92 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 93 GUID: "some-org-guid", 94 Name: "some-org", 95 }) 96 97 fakeConfig.TargetedSpaceReturns(configv3.Space{ 98 GUID: "some-space-guid", 99 Name: "some-space", 100 }) 101 }) 102 103 When("getting routes succeeds", func() { 104 var ( 105 routes []resources.Route 106 ) 107 108 BeforeEach(func() { 109 routes = []resources.Route{ 110 {GUID: "route-guid-3", Host: "host-1"}, 111 {GUID: "route-guid-1"}, 112 {GUID: "route-guid-2", Host: "host-3", Path: "/path/2"}, 113 } 114 115 fakeActor.GetRoutesBySpaceReturns( 116 routes, 117 v7action.Warnings{"actor-warning-1"}, 118 nil, 119 ) 120 }) 121 122 It("delegates to the actor for summaries", func() { 123 Expect(fakeActor.GetRouteSummariesCallCount()).To(Equal(1)) 124 125 Expect(fakeActor.GetRouteSummariesArgsForCall(0)).To(Equal(routes)) 126 }) 127 128 When("getting route summaries succeeds", func() { 129 var ( 130 routeSummaries []v7action.RouteSummary 131 ) 132 133 BeforeEach(func() { 134 routeSummaries = []v7action.RouteSummary{ 135 { 136 DomainName: "domain1", 137 SpaceName: "space-1", 138 Route: resources.Route{GUID: "route-guid-1"}, 139 ServiceInstanceName: "si-1", 140 }, 141 { 142 DomainName: "domain2", 143 SpaceName: "space-2", 144 Route: resources.Route{GUID: "route-guid-2", Host: "host-3", Path: "/path/2"}, 145 }, 146 { 147 DomainName: "domain3", 148 SpaceName: "space-3", 149 Route: resources.Route{GUID: "route-guid-3", Host: "host-1", 150 Destinations: []resources.RouteDestination{ 151 {GUID: "app1-guid", Protocol: "http1"}, 152 {GUID: "app2-guid", Protocol: "http2"}, 153 }, 154 }, 155 AppNames: []string{"app1", "app2"}, 156 AppProtocols: []string{"http1", "http2"}, 157 ServiceInstanceName: "si-3", 158 }, 159 { 160 DomainName: "tcp.domain", 161 SpaceName: "space-3", 162 Route: resources.Route{GUID: "route-guid-3", Port: 1024}, 163 AppNames: []string{"app1", "app2"}, 164 }, 165 { 166 DomainName: "domain4", 167 SpaceName: "space-3", 168 Route: resources.Route{GUID: "route-guid-3", Port: 1024, 169 Destinations: []resources.RouteDestination{ 170 {GUID: "app1-guid", Protocol: "http1"}, 171 {GUID: "app2-guid", Protocol: "http1"}, 172 }, 173 }, 174 AppNames: []string{"app1", "app2"}, 175 AppProtocols: []string{"http1"}, 176 }, 177 } 178 179 fakeActor.GetRouteSummariesReturns( 180 routeSummaries, 181 v7action.Warnings{"actor-warning-2"}, 182 nil, 183 ) 184 }) 185 186 It("prints routes in a table", func() { 187 Expect(executeErr).NotTo(HaveOccurred()) 188 189 Expect(testUI.Err).To(Say("actor-warning-1")) 190 Expect(testUI.Err).To(Say("actor-warning-2")) 191 192 Expect(testUI.Out).To(Say(tableHeaders)) 193 Expect(testUI.Out).To(Say(`space-1\s+domain1\s+si-1\s+`)) 194 Expect(testUI.Out).To(Say(`space-2\s+host-3\s+domain2\s+\/path\/2`)) 195 Expect(testUI.Out).To(Say(`space-3\s+host-1\s+domain3\s+http1, http2\s+app1, app2\s+si-3`)) 196 Expect(testUI.Out).To(Say(`space-3\s+tcp\.domain\s+1024\s+app1, app2`)) 197 Expect(testUI.Out).To(Say(`space-3\s+domain4\s+1024\s+http1\s+app1, app2`)) 198 }) 199 }) 200 201 When("getting route summaries fails", func() { 202 BeforeEach(func() { 203 fakeActor.GetRouteSummariesReturns( 204 nil, 205 v7action.Warnings{"actor-warning-2", "actor-warning-3"}, 206 errors.New("summaries-error"), 207 ) 208 }) 209 210 It("prints warnings and returns error", func() { 211 Expect(executeErr).To(MatchError("summaries-error")) 212 213 Expect(testUI.Err).To(Say("actor-warning-1")) 214 Expect(testUI.Err).To(Say("actor-warning-2")) 215 Expect(testUI.Err).To(Say("actor-warning-3")) 216 }) 217 }) 218 }) 219 220 When("getting space routes fails", func() { 221 var expectedErr error 222 223 BeforeEach(func() { 224 warnings := v7action.Warnings{"warning-1", "warning-2"} 225 expectedErr = errors.New("some-error") 226 fakeActor.GetRoutesBySpaceReturns(nil, warnings, expectedErr) 227 }) 228 229 It("prints warnings and returns error", func() { 230 Expect(executeErr).To(Equal(expectedErr)) 231 232 Expect(testUI.Err).To(Say("warning-1")) 233 Expect(testUI.Err).To(Say("warning-2")) 234 Expect(testUI.Out).ToNot(Say(tableHeaders)) 235 }) 236 }) 237 238 When("--org-level is passed and getting org routes fails", func() { 239 var expectedErr error 240 241 BeforeEach(func() { 242 cmd.Orglevel = true 243 warnings := v7action.Warnings{"warning-1", "warning-2"} 244 expectedErr = errors.New("some-error") 245 fakeActor.GetRoutesByOrgReturns(nil, warnings, expectedErr) 246 }) 247 248 It("prints warnings and returns error", func() { 249 Expect(executeErr).To(MatchError(expectedErr)) 250 251 Expect(testUI.Err).To(Say("warning-1")) 252 Expect(testUI.Err).To(Say("warning-2")) 253 Expect(testUI.Out).ToNot(Say(tableHeaders)) 254 }) 255 }) 256 257 When("--labels is passed in", func() { 258 BeforeEach(func() { 259 cmd.Labels = "some_label=fun" 260 }) 261 It("passes the labels to the actor", func() { 262 _, labels := fakeActor.GetRoutesBySpaceArgsForCall(0) 263 Expect(labels).To(Equal("some_label=fun")) 264 }) 265 When("--org-level is passed in", func() { 266 BeforeEach(func() { 267 cmd.Orglevel = true 268 }) 269 It("passes the labels to the actor", func() { 270 _, labels := fakeActor.GetRoutesByOrgArgsForCall(0) 271 Expect(labels).To(Equal("some_label=fun")) 272 }) 273 }) 274 }) 275 }) 276 })