github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/api/backups/upload_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/ioutil" 9 "time" 10 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 apiserverbackups "github.com/juju/juju/apiserver/backups" 15 "github.com/juju/juju/apiserver/params" 16 ) 17 18 type uploadSuite struct { 19 httpSuite 20 } 21 22 var _ = gc.Suite(&uploadSuite{}) 23 24 func (s *uploadSuite) setSuccess(c *gc.C, id string) { 25 result := params.BackupsUploadResult{ID: id} 26 s.setJSONSuccess(c, &result) 27 } 28 29 func (s *uploadSuite) TestSuccess(c *gc.C) { 30 s.setSuccess(c, "<a new backup ID>") 31 32 data := "<compressed archive data>" 33 archive := ioutil.NopCloser(bytes.NewBufferString(data)) 34 35 meta := apiserverbackups.ResultFromMetadata(s.Meta) 36 meta.ID = "" 37 meta.Stored = time.Time{} 38 39 id, err := s.client.Upload(archive, meta) 40 c.Assert(err, jc.ErrorIsNil) 41 42 c.Check(id, gc.Equals, "<a new backup ID>") 43 s.FakeClient.CheckCalledReader(c, "backups", archive, &meta, "juju-backup.tar.gz", "SendHTTPRequestReader") 44 } 45 46 func (s *uploadSuite) TestFunctional(c *gc.C) { 47 data := "<compressed archive data>" 48 archive := ioutil.NopCloser(bytes.NewBufferString(data)) 49 50 meta := apiserverbackups.ResultFromMetadata(s.Meta) 51 meta.ID = "" 52 meta.Stored = time.Time{} 53 meta.Size = int64(len(data)) 54 55 id, err := s.client.Upload(archive, meta) 56 c.Assert(err, jc.ErrorIsNil) 57 58 c.Check(id, gc.Matches, `[-\d]+\.[-0-9a-f]+`) 59 60 // Check the stored contents. 61 stored, err := s.client.Download(id) 62 c.Assert(err, jc.ErrorIsNil) 63 defer archive.Close() 64 storedData, err := ioutil.ReadAll(stored) 65 c.Assert(err, jc.ErrorIsNil) 66 c.Check(string(storedData), gc.Equals, data) 67 68 // Check the stored metadata. 69 storedMeta, err := s.client.Info(id) 70 c.Assert(err, jc.ErrorIsNil) 71 meta.ID = id 72 meta.Stored = storedMeta.Stored 73 c.Check(storedMeta, gc.DeepEquals, &meta) 74 }