github.com/Financial-Times/publish-availability-monitor@v1.12.0/metrics/aggregator_test.go (about) 1 package metrics 2 3 import ( 4 "sync" 5 "testing" 6 7 "github.com/Financial-Times/go-logger/v2" 8 "github.com/Financial-Times/publish-availability-monitor/config" 9 ) 10 11 func TestAggregatorRun(t *testing.T) { 12 tests := map[string]struct { 13 Metric PublishMetric 14 ExpectedPublishMetricsCount int 15 ExpectedCapabilityMetricsCount int 16 }{ 17 "regular metric should be sent only to publish metric destinations": { 18 Metric: PublishMetric{ 19 Capability: nil, 20 }, 21 ExpectedPublishMetricsCount: 1, 22 ExpectedCapabilityMetricsCount: 0, 23 }, 24 "capability metric should be sent only to capability destinations": { 25 Metric: PublishMetric{ 26 Capability: &config.Capability{ 27 Name: "test-capability", 28 }, 29 }, 30 ExpectedPublishMetricsCount: 0, 31 ExpectedCapabilityMetricsCount: 1, 32 }, 33 } 34 35 log := logger.NewUPPLogger("test", "PANIC") 36 for name, test := range tests { 37 t.Run(name, func(t *testing.T) { 38 var wg sync.WaitGroup 39 wg.Add(test.ExpectedPublishMetricsCount + test.ExpectedCapabilityMetricsCount) 40 41 var metricsCh = make(chan PublishMetric) 42 publishMetricDestination := &mockDestination{waitGroup: &wg} 43 capabilityMetricDestination := &mockDestination{waitGroup: &wg} 44 45 aggregator := NewAggregator(metricsCh, 46 []Destination{publishMetricDestination}, 47 []Destination{capabilityMetricDestination}, 48 log) 49 50 go aggregator.Run() 51 metricsCh <- test.Metric 52 wg.Wait() 53 54 if len(publishMetricDestination.metrics) != test.ExpectedPublishMetricsCount { 55 t.Fatalf("expected %v publish metrics, got %v", test.ExpectedPublishMetricsCount, len(publishMetricDestination.metrics)) 56 } 57 58 if len(capabilityMetricDestination.metrics) != test.ExpectedCapabilityMetricsCount { 59 t.Fatalf("expected %v capability metrics, got %v", test.ExpectedCapabilityMetricsCount, len(capabilityMetricDestination.metrics)) 60 } 61 }) 62 } 63 } 64 65 type mockDestination struct { 66 metrics []PublishMetric 67 waitGroup *sync.WaitGroup 68 } 69 70 func (md *mockDestination) Send(pm PublishMetric) { 71 defer md.waitGroup.Done() 72 md.metrics = append(md.metrics, pm) 73 }