github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/caasoperator/remotestate/watcher_test.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package remotestate_test 5 6 import ( 7 "time" 8 9 "github.com/juju/clock/testclock" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 "gopkg.in/juju/charm.v6" 13 14 coretesting "github.com/juju/juju/testing" 15 "github.com/juju/juju/worker/caasoperator/remotestate" 16 ) 17 18 type WatcherSuite struct { 19 coretesting.BaseSuite 20 21 watcher *remotestate.RemoteStateWatcher 22 appWatcher *mockNotifyWatcher 23 charmGetter *mockCharmGetter 24 clock *testclock.Clock 25 } 26 27 var _ = gc.Suite(&WatcherSuite{}) 28 29 func (s *WatcherSuite) SetUpTest(c *gc.C) { 30 s.BaseSuite.SetUpTest(c) 31 s.clock = testclock.NewClock(time.Now()) 32 s.appWatcher = newMockNotifyWatcher() 33 s.charmGetter = &mockCharmGetter{} 34 w, err := remotestate.NewWatcher(remotestate.WatcherConfig{ 35 Application: "gitlab", 36 ApplicationWatcher: &mockApplicationWatcher{s.appWatcher}, 37 CharmGetter: s.charmGetter, 38 }) 39 c.Assert(err, jc.ErrorIsNil) 40 s.watcher = w 41 } 42 43 func (s *WatcherSuite) TearDownTest(c *gc.C) { 44 if s.watcher != nil { 45 s.watcher.Kill() 46 err := s.watcher.Wait() 47 c.Assert(err, jc.ErrorIsNil) 48 } 49 } 50 51 func (s *WatcherSuite) TestInitialSnapshot(c *gc.C) { 52 snap := s.watcher.Snapshot() 53 c.Assert(snap, jc.DeepEquals, remotestate.Snapshot{}) 54 } 55 56 func (s *WatcherSuite) TestInitialSignal(c *gc.C) { 57 s.appWatcher.changes <- struct{}{} 58 assertNotifyEvent(c, s.watcher.RemoteStateChanged(), "waiting for remote state change") 59 } 60 61 func (s *WatcherSuite) signalAll() { 62 s.appWatcher.changes <- struct{}{} 63 } 64 65 func (s *WatcherSuite) TestRemoteStateChanged(c *gc.C) { 66 assertOneChange := func() { 67 assertNotifyEvent(c, s.watcher.RemoteStateChanged(), "waiting for remote state change") 68 assertNoNotifyEvent(c, s.watcher.RemoteStateChanged(), "remote state change") 69 } 70 71 curl := charm.MustParseURL("cs:gitlab-4") 72 s.charmGetter.curl = curl 73 s.charmGetter.version = 666 74 s.charmGetter.force = true 75 76 s.signalAll() 77 assertOneChange() 78 snap := s.watcher.Snapshot() 79 c.Assert(snap.ForceCharmUpgrade, jc.IsTrue) 80 c.Assert(snap, jc.DeepEquals, remotestate.Snapshot{ 81 CharmModifiedVersion: 666, 82 CharmURL: curl, 83 ForceCharmUpgrade: true, 84 }) 85 }