github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/state/globalclock/reader_test.go (about)

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package globalclock_test
     5  
     6  import (
     7  	// Only used for time types.
     8  	"time"
     9  
    10  	"github.com/juju/testing"
    11  	jc "github.com/juju/testing/checkers"
    12  	gc "gopkg.in/check.v1"
    13  	"gopkg.in/mgo.v2/bson"
    14  
    15  	"github.com/juju/juju/state/globalclock"
    16  )
    17  
    18  type ReaderSuite struct {
    19  	testing.MgoSuite
    20  	config globalclock.ReaderConfig
    21  }
    22  
    23  var _ = gc.Suite(&ReaderSuite{})
    24  
    25  func (s *ReaderSuite) SetUpTest(c *gc.C) {
    26  	s.MgoSuite.SetUpTest(c)
    27  	s.Session.DB(database).DropDatabase()
    28  	s.config = globalclock.ReaderConfig{
    29  		Config: globalclock.Config{
    30  			Collection: collection,
    31  			Mongo:      mongoWrapper{s.Session},
    32  		},
    33  	}
    34  }
    35  
    36  func (s *ReaderSuite) TestNewReaderValidatesConfigCollection(c *gc.C) {
    37  	s.config.Collection = ""
    38  	_, err := globalclock.NewReader(s.config)
    39  	c.Assert(err, gc.ErrorMatches, "missing collection")
    40  }
    41  
    42  func (s *ReaderSuite) TestNewReaderValidatesConfigMongo(c *gc.C) {
    43  	s.config.Mongo = nil
    44  	_, err := globalclock.NewReader(s.config)
    45  	c.Assert(err, gc.ErrorMatches, "missing mongo client")
    46  }
    47  
    48  func (s *ReaderSuite) TestNewReaderInitialValue(c *gc.C) {
    49  	s.writeTime(c, globalEpoch.Add(time.Second))
    50  
    51  	r := s.newReader(c)
    52  	c.Assert(r, gc.NotNil)
    53  
    54  	t, err := r.Now()
    55  	c.Assert(err, jc.ErrorIsNil)
    56  	c.Assert(t, gc.Equals, globalEpoch.Add(time.Second))
    57  }
    58  
    59  func (s *ReaderSuite) TestNewReaderInitialValueMissing(c *gc.C) {
    60  	r := s.newReader(c)
    61  	c.Assert(r, gc.NotNil)
    62  
    63  	t, err := r.Now()
    64  	c.Assert(err, jc.ErrorIsNil)
    65  	c.Assert(t, gc.Equals, globalEpoch)
    66  }
    67  
    68  func (s *ReaderSuite) newReader(c *gc.C) *globalclock.Reader {
    69  	r, err := globalclock.NewReader(s.config)
    70  	c.Assert(err, jc.ErrorIsNil)
    71  	return r
    72  }
    73  
    74  func (s *ReaderSuite) writeTime(c *gc.C, t time.Time) {
    75  	coll := s.Session.DB(database).C(collection)
    76  	_, err := coll.UpsertId("g", bson.D{{
    77  		"$set", bson.D{{"time", t.UnixNano()}},
    78  	}})
    79  	c.Assert(err, jc.ErrorIsNil)
    80  }