github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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  }