github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/state/backups/archive_workspace_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 "os" 10 11 "github.com/juju/testing" 12 jc "github.com/juju/testing/checkers" 13 gc "gopkg.in/check.v1" 14 15 "github.com/juju/juju/state/backups" 16 bt "github.com/juju/juju/state/backups/testing" 17 ) 18 19 type workspaceSuite struct { 20 testing.IsolationSuite 21 archiveFile *bytes.Buffer 22 meta *backups.Metadata 23 } 24 25 var _ = gc.Suite(&workspaceSuite{}) 26 27 func (s *workspaceSuite) SetUpTest(c *gc.C) { 28 s.IsolationSuite.SetUpTest(c) 29 30 meta, err := backups.NewMetadataJSONReader(bytes.NewBufferString(`{` + 31 `"ID":"20140909-115934.asdf-zxcv-qwe",` + 32 `"Checksum":"123af2cef",` + 33 `"ChecksumFormat":"SHA-1, base64 encoded",` + 34 `"Size":10,` + 35 `"Stored":"0001-01-01T00:00:00Z",` + 36 `"Started":"2014-09-09T11:59:34Z",` + 37 `"Finished":"2014-09-09T12:00:34Z",` + 38 `"Notes":"",` + 39 `"Environment":"9f484882-2f18-4fd2-967d-db9663db7bea",` + 40 `"Machine":"0",` + 41 `"Hostname":"myhost",` + 42 `"Version":"1.21-alpha3"` + 43 `}` + "\n")) 44 c.Assert(err, jc.ErrorIsNil) 45 46 files := []bt.File{ 47 { 48 Name: "var/lib/juju/tools/1.21-alpha2.1-trusty-amd64/jujud", 49 Content: "<some binary data goes here>", 50 }, 51 { 52 Name: "var/lib/juju/system-identity", 53 Content: "<an ssh key goes here>", 54 }, 55 } 56 dump := []bt.File{ 57 { 58 Name: "juju", 59 IsDir: true, 60 }, 61 { 62 Name: "juju/machines.bson", 63 Content: "<BSON data goes here>", 64 }, 65 { 66 Name: "oplog.bson", 67 Content: "<BSON data goes here>", 68 }, 69 } 70 archiveFile, err := bt.NewArchive(meta, files, dump) 71 c.Assert(err, jc.ErrorIsNil) 72 73 s.archiveFile = archiveFile 74 s.meta = meta 75 } 76 77 func (s *workspaceSuite) TestNewArchiveWorkspaceReader(c *gc.C) { 78 ws, err := backups.NewArchiveWorkspaceReader(s.archiveFile) 79 c.Assert(err, jc.ErrorIsNil) 80 defer ws.Close() 81 82 c.Check(ws.RootDir, gc.Not(gc.Equals), "") 83 } 84 85 func (s *workspaceSuite) TestClose(c *gc.C) { 86 ws, err := backups.NewArchiveWorkspaceReader(s.archiveFile) 87 c.Assert(err, jc.ErrorIsNil) 88 89 err = ws.Close() 90 c.Assert(err, jc.ErrorIsNil) 91 92 _, err = os.Stat(ws.RootDir) 93 c.Check(err, jc.Satisfies, os.IsNotExist) 94 } 95 96 func (s *workspaceSuite) TestUnpackFilesBundle(c *gc.C) { 97 ws, err := backups.NewArchiveWorkspaceReader(s.archiveFile) 98 c.Assert(err, jc.ErrorIsNil) 99 defer ws.Close() 100 101 targetDir := c.MkDir() 102 err = ws.UnpackFilesBundle(targetDir) 103 c.Assert(err, jc.ErrorIsNil) 104 105 _, err = os.Stat(targetDir + "/var/lib/juju/tools/1.21-alpha2.1-trusty-amd64/jujud") 106 c.Assert(err, jc.ErrorIsNil) 107 _, err = os.Stat(targetDir + "/var/lib/juju/system-identity") 108 c.Assert(err, jc.ErrorIsNil) 109 } 110 111 func (s *workspaceSuite) TestOpenBundledFile(c *gc.C) { 112 ws, err := backups.NewArchiveWorkspaceReader(s.archiveFile) 113 c.Assert(err, jc.ErrorIsNil) 114 defer ws.Close() 115 116 file, err := ws.OpenBundledFile("var/lib/juju/system-identity") 117 c.Assert(err, jc.ErrorIsNil) 118 119 data, err := ioutil.ReadAll(file) 120 c.Assert(err, jc.ErrorIsNil) 121 c.Check(string(data), gc.Equals, "<an ssh key goes here>") 122 } 123 124 func (s *workspaceSuite) TestMetadata(c *gc.C) { 125 ws, err := backups.NewArchiveWorkspaceReader(s.archiveFile) 126 c.Assert(err, jc.ErrorIsNil) 127 defer ws.Close() 128 129 meta, err := ws.Metadata() 130 c.Assert(err, jc.ErrorIsNil) 131 132 c.Check(meta, jc.DeepEquals, s.meta) 133 }