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 }