github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/resource/upload_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package resource_test
     5  
     6  import (
     7  	jujucmd "github.com/juju/cmd"
     8  	"github.com/juju/errors"
     9  	"github.com/juju/testing"
    10  	jc "github.com/juju/testing/checkers"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	resourcecmd "github.com/juju/juju/cmd/juju/resource"
    14  )
    15  
    16  var _ = gc.Suite(&UploadSuite{})
    17  
    18  type UploadSuite struct {
    19  	testing.IsolationSuite
    20  
    21  	stub     *testing.Stub
    22  	stubDeps *stubUploadDeps
    23  }
    24  
    25  func (s *UploadSuite) SetUpTest(c *gc.C) {
    26  	s.IsolationSuite.SetUpTest(c)
    27  
    28  	s.stub = &testing.Stub{}
    29  	s.stubDeps = &stubUploadDeps{
    30  		stub:   s.stub,
    31  		client: &stubAPIClient{stub: s.stub},
    32  	}
    33  }
    34  
    35  func (*UploadSuite) TestInitEmpty(c *gc.C) {
    36  	var u resourcecmd.UploadCommand
    37  
    38  	err := u.Init([]string{})
    39  	c.Assert(err, jc.Satisfies, errors.IsBadRequest)
    40  }
    41  
    42  func (*UploadSuite) TestInitOneArg(c *gc.C) {
    43  	u := resourcecmd.NewUploadCommandForTest(resourcecmd.UploadDeps{})
    44  	err := u.Init([]string{"foo"})
    45  	c.Assert(err, jc.Satisfies, errors.IsBadRequest)
    46  }
    47  
    48  func (*UploadSuite) TestInitJustName(c *gc.C) {
    49  	u := resourcecmd.NewUploadCommandForTest(resourcecmd.UploadDeps{})
    50  
    51  	err := u.Init([]string{"foo", "bar"})
    52  	c.Assert(err, jc.Satisfies, errors.IsNotValid)
    53  }
    54  
    55  func (*UploadSuite) TestInitNoName(c *gc.C) {
    56  	u := resourcecmd.NewUploadCommandForTest(resourcecmd.UploadDeps{})
    57  
    58  	err := u.Init([]string{"foo", "=foobar"})
    59  	c.Assert(errors.Cause(err), jc.Satisfies, errors.IsNotValid)
    60  }
    61  
    62  func (*UploadSuite) TestInitNoPath(c *gc.C) {
    63  	u := resourcecmd.NewUploadCommandForTest(resourcecmd.UploadDeps{})
    64  
    65  	err := u.Init([]string{"foo", "foobar="})
    66  	c.Assert(errors.Cause(err), jc.Satisfies, errors.IsNotValid)
    67  }
    68  
    69  func (*UploadSuite) TestInitGood(c *gc.C) {
    70  	u := resourcecmd.NewUploadCommandForTest(resourcecmd.UploadDeps{})
    71  
    72  	err := u.Init([]string{"foo", "bar=baz"})
    73  	c.Assert(err, jc.ErrorIsNil)
    74  	svc, name, filename := resourcecmd.UploadCommandResourceFile(u)
    75  	c.Assert(svc, gc.Equals, "foo")
    76  	c.Assert(name, gc.Equals, "bar")
    77  	c.Assert(filename, gc.Equals, "baz")
    78  	c.Assert(resourcecmd.UploadCommandService(u), gc.Equals, "foo")
    79  }
    80  
    81  func (*UploadSuite) TestInitTwoResources(c *gc.C) {
    82  	u := resourcecmd.NewUploadCommandForTest(resourcecmd.UploadDeps{})
    83  
    84  	err := u.Init([]string{"foo", "bar=baz", "fizz=buzz"})
    85  	c.Assert(err, jc.Satisfies, errors.IsBadRequest)
    86  }
    87  
    88  func (s *UploadSuite) TestInfo(c *gc.C) {
    89  	var command resourcecmd.UploadCommand
    90  	info := command.Info()
    91  
    92  	c.Check(info, jc.DeepEquals, &jujucmd.Info{
    93  		Name:    "attach-resource",
    94  		Args:    "application name=file",
    95  		Purpose: "Upload a file as a resource for an application.",
    96  		Doc: `
    97  This command uploads a file from your local disk to the juju controller to be
    98  used as a resource for an application.
    99  `,
   100  		Aliases:        []string{"attach"},
   101  		FlagKnownAs:    "option",
   102  		ShowSuperFlags: []string{"show-log", "debug", "logging-config", "verbose", "quiet", "h", "help"},
   103  	})
   104  }
   105  
   106  func (s *UploadSuite) TestRun(c *gc.C) {
   107  	file := &stubFile{stub: s.stub}
   108  	s.stubDeps.file = file
   109  	u := resourcecmd.NewUploadCommandForTest(resourcecmd.UploadDeps{
   110  		NewClient:    s.stubDeps.NewClient,
   111  		OpenResource: s.stubDeps.OpenResource,
   112  	},
   113  	)
   114  	err := u.Init([]string{"svc", "foo=bar"})
   115  	c.Assert(err, jc.ErrorIsNil)
   116  
   117  	err = u.Run(nil)
   118  	c.Assert(err, jc.ErrorIsNil)
   119  
   120  	s.stub.CheckCallNames(c,
   121  		"NewClient",
   122  		"OpenResource",
   123  		"Upload",
   124  		"FileClose",
   125  		"Close",
   126  	)
   127  	s.stub.CheckCall(c, 1, "OpenResource", "bar")
   128  	s.stub.CheckCall(c, 2, "Upload", "svc", "foo", "bar", file)
   129  }
   130  
   131  type stubUploadDeps struct {
   132  	stub   *testing.Stub
   133  	file   resourcecmd.ReadSeekCloser
   134  	client resourcecmd.UploadClient
   135  }
   136  
   137  func (s *stubUploadDeps) NewClient(c *resourcecmd.UploadCommand) (resourcecmd.UploadClient, error) {
   138  	s.stub.AddCall("NewClient", c)
   139  	if err := s.stub.NextErr(); err != nil {
   140  		return nil, errors.Trace(err)
   141  	}
   142  
   143  	return s.client, nil
   144  }
   145  
   146  func (s *stubUploadDeps) OpenResource(path string) (resourcecmd.ReadSeekCloser, error) {
   147  	s.stub.AddCall("OpenResource", path)
   148  	if err := s.stub.NextErr(); err != nil {
   149  		return nil, errors.Trace(err)
   150  	}
   151  
   152  	return s.file, nil
   153  }