github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/uniter/runner/jujuc/juju-log_test.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Copyright 2014 Cloudbase Solutions SRL 3 // Licensed under the AGPLv3, see LICENCE file for details. 4 5 package jujuc_test 6 7 import ( 8 "fmt" 9 "strings" 10 11 "github.com/golang/mock/gomock" 12 "github.com/juju/cmd" 13 "github.com/juju/cmd/cmdtesting" 14 "github.com/juju/errors" 15 "github.com/juju/loggo" 16 jc "github.com/juju/testing/checkers" 17 gc "gopkg.in/check.v1" 18 19 "github.com/juju/juju/worker/uniter/runner/jujuc" 20 ) 21 22 type JujuLogSuite struct { 23 relationSuite 24 } 25 26 var _ = gc.Suite(&JujuLogSuite{}) 27 28 func (s *JujuLogSuite) newJujuLogCommand(c *gc.C) cmd.Command { 29 ctx, _ := s.newHookContext(-1, "") 30 cmd, err := jujuc.NewJujuLogCommand(ctx) 31 c.Assert(err, jc.ErrorIsNil) 32 return jujuc.NewJujucCommandWrappedForTest(cmd) 33 } 34 35 func (s *JujuLogSuite) newJujuLogCommandWithMocks(ctrl *gomock.Controller, name string) (cmd.Command, *jujuc.MockJujuLogContext, *jujuc.MockJujuLogCommandLogger) { 36 logger := jujuc.NewMockJujuLogCommandLogger(ctrl) 37 38 factory := jujuc.NewMockJujuLogCommandLoggerFactory(ctrl) 39 factory.EXPECT().GetLogger(fmt.Sprintf("unit.%s.juju-log", name)).Return(logger) 40 41 ctx := jujuc.NewMockJujuLogContext(ctrl) 42 43 cmd := jujuc.NewJujuLogCommandWithMocks(ctx, factory) 44 return jujuc.NewJujucCommandWrappedForTest(cmd), ctx, logger 45 } 46 47 func (s *JujuLogSuite) TestRequiresMessage(c *gc.C) { 48 cmd := s.newJujuLogCommand(c) 49 err := cmdtesting.InitCommand(cmd, []string{}) 50 c.Assert(err, gc.ErrorMatches, "no message specified") 51 } 52 53 func (s *JujuLogSuite) TestLogInitMissingLevel(c *gc.C) { 54 cmd := s.newJujuLogCommand(c) 55 err := cmdtesting.InitCommand(cmd, []string{"-l"}) 56 c.Assert(err, gc.ErrorMatches, "option needs an argument.*") 57 58 err = cmdtesting.InitCommand(cmd, []string{"--log-level"}) 59 c.Assert(err, gc.ErrorMatches, "option needs an argument.*") 60 } 61 62 func (s *JujuLogSuite) TestLogInitMissingMessage(c *gc.C) { 63 cmd := s.newJujuLogCommand(c) 64 err := cmdtesting.InitCommand(cmd, []string{"-l", "FATAL"}) 65 c.Assert(err, gc.ErrorMatches, "no message specified") 66 67 err = cmdtesting.InitCommand(cmd, []string{"--log-level", "FATAL"}) 68 c.Assert(err, gc.ErrorMatches, "no message specified") 69 } 70 71 func (s *JujuLogSuite) TestLogDeprecation(c *gc.C) { 72 cmd := s.newJujuLogCommand(c) 73 ctx, err := cmdtesting.RunCommand(c, cmd, "--format", "foo", "msg") 74 c.Assert(err, jc.ErrorIsNil) 75 c.Assert(cmdtesting.Stderr(ctx), gc.Equals, "--format flag deprecated for command \"juju-log\"") 76 } 77 78 func (s *JujuLogSuite) TestRunWithNoErrorsLogsOnRun(c *gc.C) { 79 ctrl := gomock.NewController(c) 80 defer ctrl.Finish() 81 82 messages := []string{"foo", "msg"} 83 84 cmd, context, logger := s.newJujuLogCommandWithMocks(ctrl, "") 85 logger.EXPECT().Logf(loggo.INFO, "%s%s", ": ", strings.Join(messages, " ")) 86 87 relation := jujuc.NewMockContextRelation(ctrl) 88 relation.EXPECT().FakeId().Return("") 89 90 context.EXPECT().HookRelation().Return(relation, nil) 91 context.EXPECT().UnitName().Return("") 92 93 ctx, err := cmdtesting.RunCommand(c, cmd, messages...) 94 c.Assert(err, jc.ErrorIsNil) 95 c.Assert(cmdtesting.Stderr(ctx), gc.Equals, "") 96 c.Assert(cmdtesting.Stdout(ctx), gc.Equals, "") 97 } 98 99 func (s *JujuLogSuite) TestRunWithErrorIsNotImplementedLogsOnRun(c *gc.C) { 100 ctrl := gomock.NewController(c) 101 defer ctrl.Finish() 102 103 messages := []string{"foo", "msg"} 104 105 cmd, context, logger := s.newJujuLogCommandWithMocks(ctrl, "") 106 logger.EXPECT().Logf(loggo.INFO, "%s%s", "", strings.Join(messages, " ")) 107 108 context.EXPECT().HookRelation().Return(nil, errors.NotImplementedf("not implemented")) 109 context.EXPECT().UnitName().Return("") 110 111 ctx, err := cmdtesting.RunCommand(c, cmd, messages...) 112 c.Assert(err, jc.ErrorIsNil) 113 c.Assert(cmdtesting.Stderr(ctx), gc.Equals, "") 114 c.Assert(cmdtesting.Stdout(ctx), gc.Equals, "") 115 } 116 117 func (s *JujuLogSuite) TestRunWithErrorIsNotFoundLogsOnRun(c *gc.C) { 118 ctrl := gomock.NewController(c) 119 defer ctrl.Finish() 120 121 messages := []string{"foo", "msg"} 122 123 cmd, context, logger := s.newJujuLogCommandWithMocks(ctrl, "") 124 logger.EXPECT().Logf(loggo.INFO, "%s%s", "", strings.Join(messages, " ")) 125 126 context.EXPECT().HookRelation().Return(nil, errors.NotFoundf("not found")) 127 context.EXPECT().UnitName().Return("") 128 129 ctx, err := cmdtesting.RunCommand(c, cmd, messages...) 130 c.Assert(err, jc.ErrorIsNil) 131 c.Assert(cmdtesting.Stderr(ctx), gc.Equals, "") 132 c.Assert(cmdtesting.Stdout(ctx), gc.Equals, "") 133 } 134 135 func (s *JujuLogSuite) TestRunWithErrorDoesNotLogOnRun(c *gc.C) { 136 ctrl := gomock.NewController(c) 137 defer ctrl.Finish() 138 139 messages := []string{"foo", "msg"} 140 141 cmd, context, _ := s.newJujuLogCommandWithMocks(ctrl, "") 142 143 context.EXPECT().HookRelation().Return(nil, errors.New("bad")) 144 context.EXPECT().UnitName().Return("") 145 146 ctx, err := cmdtesting.RunCommand(c, cmd, messages...) 147 c.Assert(errors.Cause(err), gc.ErrorMatches, "bad") 148 c.Assert(cmdtesting.Stderr(ctx), gc.Equals, "") 149 c.Assert(cmdtesting.Stdout(ctx), gc.Equals, "") 150 }