github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/cmd/juju/backups/package_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package backups_test 5 6 import ( 7 "bytes" 8 "io" 9 "io/ioutil" 10 "os" 11 "testing" 12 13 "github.com/juju/cmd" 14 "github.com/juju/errors" 15 jc "github.com/juju/testing/checkers" 16 gc "gopkg.in/check.v1" 17 18 apibackups "github.com/juju/juju/api/backups" 19 "github.com/juju/juju/apiserver/params" 20 "github.com/juju/juju/cmd/juju/backups" 21 jujutesting "github.com/juju/juju/testing" 22 ) 23 24 // MetaResultString is the expected output of running dumpMetadata() on 25 // s.metaresult. 26 var MetaResultString = ` 27 backup ID: "spam" 28 checksum: "" 29 checksum format: "" 30 size (B): 0 31 stored: 0001-01-01 00:00:00 +0000 UTC 32 started: 0001-01-01 00:00:00 +0000 UTC 33 finished: 0001-01-01 00:00:00 +0000 UTC 34 notes: "" 35 environment ID: "" 36 machine ID: "" 37 created on host: "" 38 juju version: 0.0.0 39 `[1:] 40 41 func TestPackage(t *testing.T) { 42 gc.TestingT(t) 43 } 44 45 type BaseBackupsSuite struct { 46 jujutesting.FakeJujuHomeSuite 47 48 command *backups.Command 49 metaresult *params.BackupsMetadataResult 50 data string 51 52 filename string 53 } 54 55 func (s *BaseBackupsSuite) SetUpTest(c *gc.C) { 56 s.FakeJujuHomeSuite.SetUpTest(c) 57 58 s.command = backups.NewCommand().(*backups.Command) 59 s.metaresult = ¶ms.BackupsMetadataResult{ 60 ID: "spam", 61 } 62 s.data = "<compressed archive data>" 63 } 64 65 func (s *BaseBackupsSuite) TearDownTest(c *gc.C) { 66 if s.filename != "" { 67 err := os.Remove(s.filename) 68 if !os.IsNotExist(err) { 69 c.Check(err, jc.ErrorIsNil) 70 } 71 } 72 73 s.FakeJujuHomeSuite.TearDownTest(c) 74 } 75 76 func (s *BaseBackupsSuite) patchAPIClient(client backups.APIClient) { 77 s.PatchValue(backups.NewAPIClient, 78 func(c *backups.CommandBase) (backups.APIClient, error) { 79 return client, nil 80 }, 81 ) 82 } 83 84 func (s *BaseBackupsSuite) setSuccess() *fakeAPIClient { 85 client := &fakeAPIClient{metaresult: s.metaresult} 86 s.patchAPIClient(client) 87 return client 88 } 89 90 func (s *BaseBackupsSuite) setFailure(failure string) *fakeAPIClient { 91 client := &fakeAPIClient{err: errors.New(failure)} 92 s.patchAPIClient(client) 93 return client 94 } 95 96 func (s *BaseBackupsSuite) setDownload() *fakeAPIClient { 97 client := s.setSuccess() 98 client.archive = ioutil.NopCloser(bytes.NewBufferString(s.data)) 99 return client 100 } 101 102 func (s *BaseBackupsSuite) checkArchive(c *gc.C) { 103 c.Assert(s.filename, gc.Not(gc.Equals), "") 104 archive, err := os.Open(s.filename) 105 c.Assert(err, jc.ErrorIsNil) 106 defer archive.Close() 107 108 data, err := ioutil.ReadAll(archive) 109 c.Check(string(data), gc.Equals, s.data) 110 } 111 112 func (s *BaseBackupsSuite) checkStd(c *gc.C, ctx *cmd.Context, out, err string) { 113 c.Check(ctx.Stdin.(*bytes.Buffer).Len(), gc.Equals, 0) 114 jujutesting.CheckString(c, ctx.Stdout.(*bytes.Buffer).String(), out) 115 jujutesting.CheckString(c, ctx.Stderr.(*bytes.Buffer).String(), err) 116 } 117 118 type fakeAPIClient struct { 119 metaresult *params.BackupsMetadataResult 120 archive io.ReadCloser 121 err error 122 123 calls []string 124 args []string 125 idArg string 126 notes string 127 } 128 129 func (f *fakeAPIClient) Check(c *gc.C, id, notes string, calls ...string) { 130 c.Check(f.calls, jc.DeepEquals, calls) 131 c.Check(f.idArg, gc.Equals, id) 132 c.Check(f.notes, gc.Equals, notes) 133 } 134 135 func (c *fakeAPIClient) Create(notes string) (*params.BackupsMetadataResult, error) { 136 c.calls = append(c.calls, "Create") 137 c.args = append(c.args, "notes") 138 c.notes = notes 139 if c.err != nil { 140 return nil, c.err 141 } 142 return c.metaresult, nil 143 } 144 145 func (c *fakeAPIClient) Info(id string) (*params.BackupsMetadataResult, error) { 146 c.calls = append(c.calls, "Info") 147 c.args = append(c.args, "id") 148 c.idArg = id 149 if c.err != nil { 150 return nil, c.err 151 } 152 return c.metaresult, nil 153 } 154 155 func (c *fakeAPIClient) List() (*params.BackupsListResult, error) { 156 c.calls = append(c.calls, "List") 157 if c.err != nil { 158 return nil, c.err 159 } 160 var result params.BackupsListResult 161 result.List = []params.BackupsMetadataResult{*c.metaresult} 162 return &result, nil 163 } 164 165 func (c *fakeAPIClient) Download(id string) (io.ReadCloser, error) { 166 c.calls = append(c.calls, "Download") 167 c.args = append(c.args, "id") 168 c.idArg = id 169 if c.err != nil { 170 return nil, c.err 171 } 172 return c.archive, nil 173 } 174 175 func (c *fakeAPIClient) Upload(ar io.Reader, meta params.BackupsMetadataResult) (string, error) { 176 c.args = append(c.args, "ar", "meta") 177 if c.err != nil { 178 return "", c.err 179 } 180 return c.metaresult.ID, nil 181 } 182 183 func (c *fakeAPIClient) Remove(id string) error { 184 c.calls = append(c.calls, "Remove") 185 c.args = append(c.args, "id") 186 c.idArg = id 187 if c.err != nil { 188 return c.err 189 } 190 return nil 191 } 192 193 func (c *fakeAPIClient) Close() error { 194 return nil 195 } 196 197 func (c *fakeAPIClient) RestoreReader(io.Reader, *params.BackupsMetadataResult, apibackups.ClientConnection) error { 198 return nil 199 } 200 201 func (c *fakeAPIClient) Restore(string, apibackups.ClientConnection) error { 202 return nil 203 }