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  }