github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/state/backups/metadata_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  	"os"
     9  	"path/filepath"
    10  	"time"
    11  
    12  	jc "github.com/juju/testing/checkers"
    13  	"github.com/juju/version"
    14  	gc "gopkg.in/check.v1"
    15  
    16  	"github.com/juju/juju/state/backups"
    17  	"github.com/juju/juju/testing"
    18  )
    19  
    20  type metadataSuite struct {
    21  	testing.BaseSuite
    22  }
    23  
    24  var _ = gc.Suite(&metadataSuite{}) // Register the suite.
    25  
    26  func (s *metadataSuite) TestAsJSONBuffer(c *gc.C) {
    27  	meta := backups.NewMetadata()
    28  	meta.Origin = backups.Origin{
    29  		Model:    "asdf-zxcv-qwe",
    30  		Machine:  "0",
    31  		Hostname: "myhost",
    32  		Version:  version.MustParse("1.21-alpha3"),
    33  		Series:   "trusty",
    34  	}
    35  	meta.Started = time.Date(2014, time.Month(9), 9, 11, 59, 34, 0, time.UTC)
    36  
    37  	meta.SetID("20140909-115934.asdf-zxcv-qwe")
    38  	err := meta.MarkComplete(10, "123af2cef")
    39  	c.Assert(err, jc.ErrorIsNil)
    40  
    41  	finished := meta.Started.Add(time.Minute)
    42  	meta.Finished = &finished
    43  
    44  	meta.CACert = "ca-cert"
    45  	meta.CAPrivateKey = "ca-private-key"
    46  
    47  	buf, err := meta.AsJSONBuffer()
    48  	c.Assert(err, jc.ErrorIsNil)
    49  
    50  	c.Check(buf.(*bytes.Buffer).String(), gc.Equals, `{`+
    51  		`"ID":"20140909-115934.asdf-zxcv-qwe",`+
    52  		`"Checksum":"123af2cef",`+
    53  		`"ChecksumFormat":"SHA-1, base64 encoded",`+
    54  		`"Size":10,`+
    55  		`"Stored":"0001-01-01T00:00:00Z",`+
    56  		`"Started":"2014-09-09T11:59:34Z",`+
    57  		`"Finished":"2014-09-09T12:00:34Z",`+
    58  		`"Notes":"",`+
    59  		`"Environment":"asdf-zxcv-qwe",`+
    60  		`"Machine":"0",`+
    61  		`"Hostname":"myhost",`+
    62  		`"Version":"1.21-alpha3",`+
    63  		`"Series":"trusty",`+
    64  		`"CACert":"ca-cert",`+
    65  		`"CAPrivateKey":"ca-private-key"`+
    66  		`}`+"\n")
    67  }
    68  
    69  func (s *metadataSuite) TestNewMetadataJSONReader(c *gc.C) {
    70  	file := bytes.NewBufferString(`{` +
    71  		`"ID":"20140909-115934.asdf-zxcv-qwe",` +
    72  		`"Checksum":"123af2cef",` +
    73  		`"ChecksumFormat":"SHA-1, base64 encoded",` +
    74  		`"Size":10,` +
    75  		`"Stored":"0001-01-01T00:00:00Z",` +
    76  		`"Started":"2014-09-09T11:59:34Z",` +
    77  		`"Finished":"2014-09-09T12:00:34Z",` +
    78  		`"Notes":"",` +
    79  		`"Environment":"asdf-zxcv-qwe",` +
    80  		`"Machine":"0",` +
    81  		`"Hostname":"myhost",` +
    82  		`"Version":"1.21-alpha3"` +
    83  		`}` + "\n")
    84  	meta, err := backups.NewMetadataJSONReader(file)
    85  	c.Assert(err, jc.ErrorIsNil)
    86  
    87  	c.Check(meta.ID(), gc.Equals, "20140909-115934.asdf-zxcv-qwe")
    88  	c.Check(meta.Checksum(), gc.Equals, "123af2cef")
    89  	c.Check(meta.ChecksumFormat(), gc.Equals, "SHA-1, base64 encoded")
    90  	c.Check(meta.Size(), gc.Equals, int64(10))
    91  	c.Check(meta.Stored(), gc.IsNil)
    92  	c.Check(meta.Started.Unix(), gc.Equals, int64(1410263974))
    93  	c.Check(meta.Finished.Unix(), gc.Equals, int64(1410264034))
    94  	c.Check(meta.Notes, gc.Equals, "")
    95  	c.Check(meta.Origin.Model, gc.Equals, "asdf-zxcv-qwe")
    96  	c.Check(meta.Origin.Machine, gc.Equals, "0")
    97  	c.Check(meta.Origin.Hostname, gc.Equals, "myhost")
    98  	c.Check(meta.Origin.Version.String(), gc.Equals, "1.21-alpha3")
    99  }
   100  
   101  func (s *metadataSuite) TestBuildMetadata(c *gc.C) {
   102  	archive, err := os.Create(filepath.Join(c.MkDir(), "juju-backup.tgz"))
   103  	c.Assert(err, jc.ErrorIsNil)
   104  	_, err = archive.Write([]byte("<compressed data>"))
   105  	c.Assert(err, jc.ErrorIsNil)
   106  
   107  	fi, err := archive.Stat()
   108  	c.Assert(err, jc.ErrorIsNil)
   109  	finished := backups.FileTimestamp(fi).Unix()
   110  
   111  	meta, err := backups.BuildMetadata(archive)
   112  	c.Assert(err, jc.ErrorIsNil)
   113  
   114  	c.Check(meta.ID(), gc.Equals, "")
   115  	c.Check(meta.Checksum(), gc.Equals, "2jmj7l5rSw0yVb/vlWAYkK/YBwk=")
   116  	c.Check(meta.ChecksumFormat(), gc.Equals, "SHA-1, base64 encoded")
   117  	c.Check(meta.Size(), gc.Equals, int64(17))
   118  	c.Check(meta.Stored(), gc.IsNil)
   119  	c.Check(meta.Started.Unix(), gc.Equals, int64(time.Time{}.Unix()))
   120  	c.Check(meta.Finished.Unix(), gc.Equals, finished)
   121  	c.Check(meta.Notes, gc.Equals, "")
   122  	c.Check(meta.Origin.Model, gc.Equals, backups.UnknownString)
   123  	c.Check(meta.Origin.Machine, gc.Equals, backups.UnknownString)
   124  	c.Check(meta.Origin.Hostname, gc.Equals, backups.UnknownString)
   125  	c.Check(meta.Origin.Version.String(), gc.Equals, backups.UnknownVersion.String())
   126  }