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  }