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 }