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 }