github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/apiserver/metricsender/wireformat/wireformat_test.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package wireformat_test
     5  
     6  import (
     7  	"time"
     8  
     9  	jc "github.com/juju/testing/checkers"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	"github.com/juju/juju/apiserver/metricsender/wireformat"
    13  	jujutesting "github.com/juju/juju/juju/testing"
    14  	"github.com/juju/juju/testing/factory"
    15  )
    16  
    17  type WireFormatSuite struct {
    18  	jujutesting.JujuConnSuite
    19  }
    20  
    21  var _ = gc.Suite(&WireFormatSuite{})
    22  
    23  func (s *WireFormatSuite) TestToWire(c *gc.C) {
    24  	meteredCharm := s.Factory.MakeCharm(c, &factory.CharmParams{Name: "metered", URL: "cs:quantal/metered"})
    25  	meteredService := s.Factory.MakeService(c, &factory.ServiceParams{Charm: meteredCharm})
    26  	unit := s.Factory.MakeUnit(c, &factory.UnitParams{Service: meteredService, SetCharmURL: true})
    27  	now := time.Now().Round(time.Second)
    28  	metric := s.Factory.MakeMetric(c, &factory.MetricParams{Unit: unit, Sent: false, Time: &now})
    29  	result := wireformat.ToWire(metric)
    30  	m := metric.Metrics()[0]
    31  	metrics := []wireformat.Metric{
    32  		{
    33  			Key:   m.Key,
    34  			Value: m.Value,
    35  			Time:  m.Time.UTC(),
    36  		},
    37  	}
    38  	expected := &wireformat.MetricBatch{
    39  		UUID:        metric.UUID(),
    40  		EnvUUID:     metric.EnvUUID(),
    41  		UnitName:    metric.Unit(),
    42  		CharmUrl:    metric.CharmURL(),
    43  		Created:     metric.Created().UTC(),
    44  		Metrics:     metrics,
    45  		Credentials: metric.Credentials(),
    46  	}
    47  	c.Assert(result, gc.DeepEquals, expected)
    48  }
    49  
    50  func (s *WireFormatSuite) TestAck(c *gc.C) {
    51  	resp := wireformat.EnvironmentResponses{}
    52  	c.Assert(resp, gc.HasLen, 0)
    53  
    54  	envUUID := "env-uuid"
    55  	envUUID2 := "env-uuid2"
    56  	batchUUID := "batch-uuid"
    57  	batchUUID2 := "batch-uuid2"
    58  
    59  	resp.Ack(envUUID, batchUUID)
    60  	resp.Ack(envUUID, batchUUID2)
    61  	resp.Ack(envUUID2, batchUUID)
    62  	c.Assert(resp, gc.HasLen, 2)
    63  
    64  	c.Assert(resp[envUUID].AcknowledgedBatches, jc.SameContents, []string{batchUUID, batchUUID2})
    65  	c.Assert(resp[envUUID2].AcknowledgedBatches, jc.SameContents, []string{batchUUID})
    66  }
    67  
    68  func (s *WireFormatSuite) TestSetStatus(c *gc.C) {
    69  	resp := wireformat.EnvironmentResponses{}
    70  	c.Assert(resp, gc.HasLen, 0)
    71  
    72  	envUUID := "env-uuid"
    73  	envUUID2 := "env-uuid2"
    74  	unitName := "some-unit/0"
    75  	unitName2 := "some-unit/1"
    76  
    77  	resp.SetStatus(envUUID, unitName, "GREEN", "")
    78  	c.Assert(resp, gc.HasLen, 1)
    79  	c.Assert(resp[envUUID].UnitStatuses[unitName].Status, gc.Equals, "GREEN")
    80  	c.Assert(resp[envUUID].UnitStatuses[unitName].Info, gc.Equals, "")
    81  
    82  	resp.SetStatus(envUUID, unitName2, "RED", "Unit unresponsive.")
    83  	c.Assert(resp, gc.HasLen, 1)
    84  	c.Assert(resp[envUUID].UnitStatuses[unitName].Status, gc.Equals, "GREEN")
    85  	c.Assert(resp[envUUID].UnitStatuses[unitName].Info, gc.Equals, "")
    86  	c.Assert(resp[envUUID].UnitStatuses[unitName2].Status, gc.Equals, "RED")
    87  	c.Assert(resp[envUUID].UnitStatuses[unitName2].Info, gc.Equals, "Unit unresponsive.")
    88  
    89  	resp.SetStatus(envUUID2, unitName, "UNKNOWN", "")
    90  	c.Assert(resp, gc.HasLen, 2)
    91  	c.Assert(resp[envUUID2].UnitStatuses[unitName].Status, gc.Equals, "UNKNOWN")
    92  	c.Assert(resp[envUUID2].UnitStatuses[unitName].Info, gc.Equals, "")
    93  
    94  	resp.SetStatus(envUUID, unitName, "RED", "Invalid data received.")
    95  	c.Assert(resp, gc.HasLen, 2)
    96  	c.Assert(resp[envUUID].UnitStatuses[unitName].Status, gc.Equals, "RED")
    97  	c.Assert(resp[envUUID].UnitStatuses[unitName].Info, gc.Equals, "Invalid data received.")
    98  }