github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/agent/metricsender/testing/mocksender.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package testing
     5  
     6  import (
     7  	"fmt"
     8  
     9  	wireformat "github.com/juju/romulus/wireformat/metrics"
    10  	"github.com/juju/utils"
    11  
    12  	"github.com/juju/juju/state"
    13  )
    14  
    15  // MockSender implements the metric sender interface.
    16  type MockSender struct {
    17  	UnackedBatches      map[string]struct{}
    18  	Data                [][]*wireformat.MetricBatch
    19  	MeterStatusResponse string
    20  }
    21  
    22  // Send implements the Send interface.
    23  func (m *MockSender) Send(d []*wireformat.MetricBatch) (*wireformat.Response, error) {
    24  	m.Data = append(m.Data, d)
    25  	respUUID, err := utils.NewUUID()
    26  	if err != nil {
    27  		return nil, err
    28  	}
    29  	var envResponses = make(wireformat.EnvironmentResponses)
    30  
    31  	for _, batch := range d {
    32  		if m.UnackedBatches != nil {
    33  			_, ok := m.UnackedBatches[fmt.Sprintf("%s/%s", batch.ModelUUID, batch.UUID)]
    34  			if ok {
    35  				continue
    36  			}
    37  		}
    38  		envResponses.Ack(batch.ModelUUID, batch.UUID)
    39  		envResponses.SetModelStatus(batch.ModelUUID, m.MeterStatusResponse, "mocked response")
    40  	}
    41  	return &wireformat.Response{
    42  		UUID:         respUUID.String(),
    43  		EnvResponses: envResponses,
    44  	}, nil
    45  }
    46  
    47  func (m *MockSender) IgnoreBatches(batches ...*state.MetricBatch) {
    48  	if m.UnackedBatches == nil {
    49  		m.UnackedBatches = make(map[string]struct{})
    50  	}
    51  	for _, batch := range batches {
    52  		m.UnackedBatches[fmt.Sprintf("%s/%s", batch.ModelUUID(), batch.UUID())] = struct{}{}
    53  	}
    54  }
    55  
    56  // ErrorSender implements the metric sender interface and is used
    57  // to return errors during testing
    58  type ErrorSender struct {
    59  	Err error
    60  }
    61  
    62  // Send implements the Send interface returning errors specified in the ErrorSender.
    63  func (e *ErrorSender) Send(d []*wireformat.MetricBatch) (*wireformat.Response, error) {
    64  	return &wireformat.Response{}, e.Err
    65  }