github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/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 "github.com/juju/loggo" 11 gc "gopkg.in/check.v1" 12 13 coretesting "github.com/juju/juju/testing" 14 "github.com/juju/juju/worker/metricworker" 15 ) 16 17 type SenderSuite struct{} 18 19 var _ = gc.Suite(&SenderSuite{}) 20 21 // TestSend create 2 metrics, one sent and one not sent. 22 // It confirms that one metric is sent. 23 func (s *SenderSuite) TestSender(c *gc.C) { 24 notify := make(chan string, 1) 25 var client mockClient 26 worker := metricworker.NewSender(&client, notify, loggo.GetLogger("test")) 27 select { 28 case <-notify: 29 case <-time.After(coretesting.LongWait): 30 c.Fatalf("the cleanup function should have fired by now") 31 } 32 c.Assert(client.calls, gc.DeepEquals, []string{"SendMetrics"}) 33 worker.Kill() 34 c.Assert(worker.Wait(), gc.IsNil) 35 } 36 37 type mockClient struct { 38 calls []string 39 lock sync.RWMutex 40 } 41 42 func (m *mockClient) CleanupOldMetrics() error { 43 m.lock.Lock() 44 defer m.lock.Unlock() 45 m.calls = append(m.calls, "CleanupOldMetrics") 46 return nil 47 } 48 func (m *mockClient) SendMetrics() error { 49 m.lock.Lock() 50 defer m.lock.Unlock() 51 m.calls = append(m.calls, "SendMetrics") 52 return nil 53 }