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  })