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