github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/worker/metricworker/sender_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package metricworker_test 5 6 import ( 7 "sync" 8 "time" 9 10 gc "gopkg.in/check.v1" 11 12 coretesting "github.com/juju/juju/testing" 13 "github.com/juju/juju/worker/metricworker" 14 ) 15 16 type SenderSuite struct{} 17 18 var _ = gc.Suite(&SenderSuite{}) 19 20 // TestSend create 2 metrics, one sent and one not sent. 21 // It confirms that one metric is sent. 22 func (s *SenderSuite) TestSender(c *gc.C) { 23 notify := make(chan string, 1) 24 var client mockClient 25 worker := metricworker.NewSender(&client, notify) 26 select { 27 case <-notify: 28 case <-time.After(coretesting.LongWait): 29 c.Fatalf("the cleanup function should have fired by now") 30 } 31 c.Assert(client.calls, gc.DeepEquals, []string{"SendMetrics"}) 32 worker.Kill() 33 c.Assert(worker.Wait(), gc.IsNil) 34 } 35 36 type mockClient struct { 37 calls []string 38 lock sync.RWMutex 39 } 40 41 func (m *mockClient) CleanupOldMetrics() error { 42 m.lock.Lock() 43 defer m.lock.Unlock() 44 m.calls = append(m.calls, "CleanupOldMetrics") 45 return nil 46 } 47 func (m *mockClient) SendMetrics() error { 48 m.lock.Lock() 49 defer m.lock.Unlock() 50 m.calls = append(m.calls, "SendMetrics") 51 return nil 52 }