github.com/Financial-Times/publish-availability-monitor@v1.12.0/healthcheck_test.go (about) 1 package main 2 3 import ( 4 "net/url" 5 "testing" 6 "time" 7 8 "github.com/Financial-Times/publish-availability-monitor/config" 9 "github.com/Financial-Times/publish-availability-monitor/metrics" 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func TestBuildFtHealthcheckUrl(t *testing.T) { 14 var testCases = []struct { 15 validationURL string 16 health string 17 expectedHealthURL string 18 }{ 19 { 20 validationURL: "http://example-service/validate/", 21 health: "/__example-service/__health", 22 expectedHealthURL: "http://example-service/__example-service/__health", 23 }, 24 { 25 validationURL: "http://example-service/validate?monitor=true", 26 health: "/__example-service/__health", 27 expectedHealthURL: "http://example-service/__example-service/__health", 28 }, 29 } 30 for _, tc := range testCases { 31 uri, _ := url.Parse(tc.validationURL) 32 if actual := buildFtHealthcheckURL(*uri, tc.health); actual != tc.expectedHealthURL { 33 t.Errorf("For [%s]:\n\tExpected: [%s]\n\tActual: [%s]", tc.validationURL, tc.expectedHealthURL, actual) 34 } 35 } 36 } 37 38 func TestPublishNoFailuresForSameUUIDs(t *testing.T) { 39 metricConfig := config.MetricConfig{} 40 interval := metrics.Interval{LowerBound: 5, UpperBound: 5} 41 newURL := url.URL{} 42 t0 := time.Now() 43 publishMetric1 := metrics.PublishMetric{ 44 UUID: "1234567", 45 PublishOK: false, 46 PublishDate: t0, 47 Platform: "", 48 PublishInterval: interval, 49 Config: metricConfig, 50 Endpoint: newURL, 51 TID: "tid_1234", 52 IsMarkedDeleted: false, 53 } 54 55 publishMetric2 := metrics.PublishMetric{ 56 UUID: "1234567", 57 PublishOK: false, 58 PublishDate: t0, 59 Platform: "", 60 PublishInterval: interval, 61 Config: metricConfig, 62 Endpoint: newURL, 63 TID: "tid_6789", 64 IsMarkedDeleted: false, 65 } 66 67 publishMetric3 := metrics.PublishMetric{ 68 UUID: "1234567", 69 PublishOK: false, 70 PublishDate: t0, 71 Platform: "", 72 PublishInterval: interval, 73 Config: metricConfig, 74 Endpoint: newURL, 75 TID: "tid_6789", 76 IsMarkedDeleted: false, 77 } 78 79 testMetrics := []metrics.PublishMetric{publishMetric1, publishMetric2, publishMetric3} 80 testPublishHistory := metrics.NewHistory(testMetrics) 81 82 testHealthcheck := Healthcheck{ 83 config: &config.AppConfig{}, 84 metricContainer: testPublishHistory, 85 } 86 _, err := testHealthcheck.checkForPublishFailures() 87 88 assert.NoError(t, err, "No Error expected if multiple fails for the same uuid") 89 } 90 91 func TestPublishFailureForDistinctUUIDs(t *testing.T) { 92 metricConfig := config.MetricConfig{} 93 interval := metrics.Interval{LowerBound: 5, UpperBound: 5} 94 newURL := url.URL{} 95 t0 := time.Now() 96 publishMetric1 := metrics.PublishMetric{ 97 UUID: "12345", 98 PublishOK: false, 99 PublishDate: t0, 100 Platform: "", 101 PublishInterval: interval, 102 Config: metricConfig, 103 Endpoint: newURL, 104 TID: "tid_1234", 105 IsMarkedDeleted: false, 106 } 107 108 publishMetric2 := metrics.PublishMetric{ 109 UUID: "12678", 110 PublishOK: false, 111 PublishDate: t0, 112 Platform: "", 113 PublishInterval: interval, 114 Config: metricConfig, 115 Endpoint: newURL, 116 TID: "tid_6789", 117 IsMarkedDeleted: false, 118 } 119 120 publishMetric3 := metrics.PublishMetric{ 121 UUID: "12679", 122 PublishOK: false, 123 PublishDate: t0, 124 Platform: "", 125 PublishInterval: interval, 126 Config: metricConfig, 127 Endpoint: newURL, 128 TID: "tid_6789", 129 IsMarkedDeleted: false, 130 } 131 132 testMetrics := []metrics.PublishMetric{publishMetric1, publishMetric2, publishMetric3} 133 testPublishHistory := metrics.NewHistory(testMetrics) 134 135 testHealthcheck := Healthcheck{ 136 config: &config.AppConfig{}, 137 metricContainer: testPublishHistory, 138 } 139 _, err := testHealthcheck.checkForPublishFailures() 140 141 assert.Error(t, err, "Expected Error for at least two distinct uuid publish fails") 142 }