github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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  }