github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v6/logs_command_test.go (about) 1 package v6_test 2 3 import ( 4 "context" 5 "errors" 6 "time" 7 8 "code.cloudfoundry.org/cli/actor/actionerror" 9 "code.cloudfoundry.org/cli/actor/sharedaction" 10 "code.cloudfoundry.org/cli/actor/sharedaction/sharedactionfakes" 11 "code.cloudfoundry.org/cli/actor/v2action" 12 "code.cloudfoundry.org/cli/command/commandfakes" 13 . "code.cloudfoundry.org/cli/command/v6" 14 "code.cloudfoundry.org/cli/command/v6/v6fakes" 15 "code.cloudfoundry.org/cli/util/configv3" 16 "code.cloudfoundry.org/cli/util/ui" 17 . "github.com/onsi/ginkgo" 18 . "github.com/onsi/gomega" 19 . "github.com/onsi/gomega/gbytes" 20 ) 21 22 var _ = Describe("logs command", func() { 23 var ( 24 cmd LogsCommand 25 testUI *ui.UI 26 fakeConfig *commandfakes.FakeConfig 27 fakeSharedActor *commandfakes.FakeSharedActor 28 fakeActor *v6fakes.FakeLogsActor 29 logCacheClient *sharedactionfakes.FakeLogCacheClient 30 binaryName string 31 executeErr error 32 ) 33 34 BeforeEach(func() { 35 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 36 fakeConfig = new(commandfakes.FakeConfig) 37 fakeSharedActor = new(commandfakes.FakeSharedActor) 38 fakeActor = new(v6fakes.FakeLogsActor) 39 logCacheClient = new(sharedactionfakes.FakeLogCacheClient) 40 41 cmd = LogsCommand{ 42 UI: testUI, 43 Config: fakeConfig, 44 SharedActor: fakeSharedActor, 45 Actor: fakeActor, 46 LogCacheClient: logCacheClient, 47 } 48 49 binaryName = "faceman" 50 fakeConfig.BinaryNameReturns(binaryName) 51 cmd.RequiredArgs.AppName = "some-app" 52 fakeConfig.CurrentUserReturns(configv3.User{Name: "some-user"}, nil) 53 }) 54 55 JustBeforeEach(func() { 56 executeErr = cmd.Execute(nil) 57 }) 58 59 When("the checkTarget fails", func() { 60 BeforeEach(func() { 61 fakeSharedActor.CheckTargetReturns( 62 actionerror.NotLoggedInError{BinaryName: binaryName}) 63 }) 64 It("returns an error", func() { 65 orgRequired, spaceRequired := fakeSharedActor.CheckTargetArgsForCall(0) 66 Expect(orgRequired).To(BeTrue()) 67 Expect(spaceRequired).To(BeTrue()) 68 69 Expect(executeErr).To(MatchError( 70 actionerror.NotLoggedInError{BinaryName: binaryName})) 71 }) 72 }) 73 74 When("checkTarget succeeds", func() { 75 BeforeEach(func() { 76 fakeConfig.TargetedSpaceReturns(configv3.Space{ 77 Name: "some-space-name", 78 GUID: "some-space-guid", 79 }) 80 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 81 Name: "some-org-name", 82 }) 83 }) 84 85 When("the --recent flag is provided", func() { 86 BeforeEach(func() { 87 cmd.Recent = true 88 }) 89 90 It("displays flavor text", func() { 91 Expect(testUI.Out).To(Say("Retrieving logs for app some-app in org some-org-name / space some-space-name as some-user...")) 92 }) 93 94 When("the logs actor returns an error", func() { 95 var expectedErr error 96 BeforeEach(func() { 97 expectedErr = errors.New("some-error") 98 fakeActor.GetRecentLogsForApplicationByNameAndSpaceReturns( 99 nil, 100 v2action.Warnings{"some-warning-1", "some-warning-2"}, 101 expectedErr) 102 }) 103 104 It("displays the error", func() { 105 Expect(executeErr).To(MatchError(expectedErr)) 106 Expect(testUI.Err).To(Say("some-warning-1")) 107 Expect(testUI.Err).To(Say("some-warning-2")) 108 }) 109 }) 110 111 When("the logs actor returns logs", func() { 112 BeforeEach(func() { 113 fakeActor.GetRecentLogsForApplicationByNameAndSpaceReturns( 114 []sharedaction.LogMessage{ 115 *sharedaction.NewLogMessage( 116 "i am message 1", 117 "1", 118 time.Unix(0, 0), 119 "app", 120 "1", 121 ), 122 *sharedaction.NewLogMessage( 123 "i am message 2", 124 "1", 125 time.Unix(1, 0), 126 "another-app", 127 "2", 128 ), 129 }, 130 v2action.Warnings{"some-warning-1", "some-warning-2"}, 131 nil) 132 }) 133 134 It("displays the recent log messages and warnings", func() { 135 Expect(executeErr).NotTo(HaveOccurred()) 136 Expect(testUI.Err).To(Say("some-warning-1")) 137 Expect(testUI.Err).To(Say("some-warning-2")) 138 139 Expect(testUI.Out).To(Say("i am message 1")) 140 Expect(testUI.Out).To(Say("i am message 2")) 141 142 Expect(fakeActor.GetRecentLogsForApplicationByNameAndSpaceCallCount()).To(Equal(1)) 143 appName, spaceGUID, client := fakeActor.GetRecentLogsForApplicationByNameAndSpaceArgsForCall(0) 144 145 Expect(appName).To(Equal("some-app")) 146 Expect(spaceGUID).To(Equal("some-space-guid")) 147 Expect(client).To(Equal(logCacheClient)) 148 }) 149 }) 150 }) 151 152 When("the --recent flag is not provided", func() { 153 BeforeEach(func() { 154 cmd.Recent = false 155 }) 156 157 When("the logs setup returns an error", func() { 158 var expectedErr error 159 160 BeforeEach(func() { 161 expectedErr = errors.New("some-error") 162 fakeActor.GetStreamingLogsForApplicationByNameAndSpaceReturns(nil, nil, nil, v2action.Warnings{"some-warning-1", "some-warning-2"}, expectedErr) 163 }) 164 165 It("displays the error and all warnings", func() { 166 Expect(executeErr).To(MatchError(expectedErr)) 167 Expect(testUI.Err).To(Say("some-warning-1")) 168 Expect(testUI.Err).To(Say("some-warning-2")) 169 }) 170 }) 171 172 When("the logs stream returns an error", func() { 173 var expectedErr error 174 175 BeforeEach(func() { 176 expectedErr = errors.New("some-error") 177 178 fakeActor.GetStreamingLogsForApplicationByNameAndSpaceStub = func(_ string, _ string, _ sharedaction.LogCacheClient) (<-chan sharedaction.LogMessage, <-chan error, context.CancelFunc, v2action.Warnings, error) { 179 messages := make(chan sharedaction.LogMessage) 180 logErrs := make(chan error) 181 182 go func() { 183 logErrs <- expectedErr 184 close(messages) 185 close(logErrs) 186 }() 187 188 return messages, logErrs, func() {}, v2action.Warnings{"some-warning-1", "some-warning-2"}, nil 189 } 190 }) 191 192 It("displays the error and all warnings", func() { 193 Expect(executeErr).To(MatchError(expectedErr)) 194 Expect(testUI.Err).To(Say("some-warning-1")) 195 Expect(testUI.Err).To(Say("some-warning-2")) 196 }) 197 }) 198 199 When("the logs actor returns logs", func() { 200 BeforeEach(func() { 201 fakeActor.GetStreamingLogsForApplicationByNameAndSpaceStub = func(_ string, _ string, _ sharedaction.LogCacheClient) (<-chan sharedaction.LogMessage, <-chan error, context.CancelFunc, v2action.Warnings, error) { 202 messages := make(chan sharedaction.LogMessage) 203 logErrs := make(chan error) 204 message1 := sharedaction.NewLogMessage( 205 "i am message 1", 206 "1", 207 time.Unix(0, 0), 208 "app", 209 "1", 210 ) 211 message2 := sharedaction.NewLogMessage( 212 "i am message 2", 213 "1", time.Unix(1, 0), 214 "another-app", 215 "2", 216 ) 217 218 go func() { 219 messages <- *message1 220 messages <- *message2 221 close(messages) 222 close(logErrs) 223 }() 224 225 return messages, logErrs, func() {}, v2action.Warnings{"some-warning-1", "some-warning-2"}, nil 226 } 227 }) 228 229 It("displays flavor text", func() { 230 Expect(testUI.Out).To(Say("Retrieving logs for app some-app in org some-org-name / space some-space-name as some-user...")) 231 }) 232 233 It("displays all streaming log messages and warnings", func() { 234 Expect(executeErr).NotTo(HaveOccurred()) 235 Expect(testUI.Err).To(Say("some-warning-1")) 236 Expect(testUI.Err).To(Say("some-warning-2")) 237 238 Expect(testUI.Out).To(Say("i am message 1")) 239 Expect(testUI.Out).To(Say("i am message 2")) 240 241 Expect(fakeActor.GetStreamingLogsForApplicationByNameAndSpaceCallCount()).To(Equal(1)) 242 appName, spaceGUID, client := fakeActor.GetStreamingLogsForApplicationByNameAndSpaceArgsForCall(0) 243 244 Expect(appName).To(Equal("some-app")) 245 Expect(spaceGUID).To(Equal("some-space-guid")) 246 Expect(client).To(Equal(logCacheClient)) 247 }) 248 }) 249 }) 250 }) 251 })