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  }