github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/worker/uniter/runner/jujuc/resource-get_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package jujuc_test
     5  
     6  import (
     7  	"github.com/juju/cmd/v3"
     8  	"github.com/juju/cmd/v3/cmdtesting"
     9  	"github.com/juju/errors"
    10  	"github.com/juju/testing"
    11  	jc "github.com/juju/testing/checkers"
    12  	"go.uber.org/mock/gomock"
    13  	gc "gopkg.in/check.v1"
    14  
    15  	"github.com/juju/juju/worker/uniter/runner/jujuc"
    16  	"github.com/juju/juju/worker/uniter/runner/jujuc/mocks"
    17  )
    18  
    19  var _ = gc.Suite(&ResourceGetCmdSuite{})
    20  
    21  type ResourceGetCmdSuite struct {
    22  	testing.IsolationSuite
    23  }
    24  
    25  func (s *ResourceGetCmdSuite) TestInitNilArgs(c *gc.C) {
    26  	getCmd := jujuc.ResourceGetCmd{}
    27  	err := getCmd.Init(nil)
    28  	c.Check(err, gc.NotNil)
    29  }
    30  
    31  func (s *ResourceGetCmdSuite) TestInitTooFewArgs(c *gc.C) {
    32  	getCmd := jujuc.ResourceGetCmd{}
    33  	err := getCmd.Init([]string{})
    34  	c.Check(err, gc.NotNil)
    35  }
    36  
    37  func (s *ResourceGetCmdSuite) TestInitTooManyArgs(c *gc.C) {
    38  	getCmd := jujuc.ResourceGetCmd{}
    39  	err := getCmd.Init([]string{"spam", "eggs"})
    40  	c.Check(err, gc.NotNil)
    41  }
    42  
    43  func (s *ResourceGetCmdSuite) TestRun(c *gc.C) {
    44  	ctrl := gomock.NewController(c)
    45  	defer ctrl.Finish()
    46  
    47  	const expected = "/var/lib/juju/agents/unit-foo-1/resources/spam/a-file.tgz"
    48  	hctx := mocks.NewMockContext(ctrl)
    49  	hctx.EXPECT().DownloadResource("spam").Return(expected, nil)
    50  
    51  	com, err := jujuc.NewCommand(hctx, "resource-get")
    52  	c.Assert(err, jc.ErrorIsNil)
    53  	ctx := cmdtesting.Context(c)
    54  	code := cmd.Main(jujuc.NewJujucCommandWrappedForTest(com), ctx, []string{"spam"})
    55  	c.Assert(code, gc.Equals, 0)
    56  	c.Check(cmdtesting.Stdout(ctx), gc.Equals, expected)
    57  	c.Assert(cmdtesting.Stderr(ctx), gc.Equals, "")
    58  }
    59  
    60  func (s *ResourceGetCmdSuite) TestRunDownloadFailure(c *gc.C) {
    61  	ctrl := gomock.NewController(c)
    62  	defer ctrl.Finish()
    63  
    64  	hctx := mocks.NewMockContext(ctrl)
    65  	hctx.EXPECT().DownloadResource("spam").Return("", errors.New("<failure>"))
    66  
    67  	com, err := jujuc.NewCommand(hctx, "resource-get")
    68  	c.Assert(err, jc.ErrorIsNil)
    69  	ctx := cmdtesting.Context(c)
    70  	code := cmd.Main(jujuc.NewJujucCommandWrappedForTest(com), ctx, []string{"spam"})
    71  	c.Assert(code, gc.Equals, 1)
    72  	c.Check(cmdtesting.Stdout(ctx), gc.Equals, "")
    73  	c.Assert(cmdtesting.Stderr(ctx), gc.Equals, "ERROR could not download resource: <failure>\n")
    74  }