github.com/Financial-Times/publish-availability-monitor@v1.12.0/checks/scheduler_test.go (about) 1 package checks 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/Financial-Times/go-logger/v2" 8 "github.com/Financial-Times/publish-availability-monitor/config" 9 "github.com/Financial-Times/publish-availability-monitor/content" 10 "github.com/Financial-Times/publish-availability-monitor/envs" 11 "github.com/Financial-Times/publish-availability-monitor/metrics" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func TestStrSliceContains(testing *testing.T) { 16 var tests = []struct { 17 validTypes []string 18 typeToCheck string 19 expected bool 20 }{ 21 { 22 validTypes: []string{"ValidType", "AnotherValidType"}, 23 typeToCheck: "InvalidType", 24 expected: false, 25 }, 26 { 27 validTypes: []string{"ValidType", "AnotherValidType"}, 28 typeToCheck: "AnotherValidType", 29 expected: true, 30 }, 31 } 32 33 for _, t := range tests { 34 actual := strSliceContains(t.validTypes, t.typeToCheck) 35 if actual != t.expected { 36 testing.Errorf("Test Case: %v\nActual: %v", t, actual) 37 } 38 } 39 } 40 41 func TestScheduleChecksForContentAreCorrect(testing *testing.T) { 42 //redefine appConfig to have only Content 43 appConfig := &config.AppConfig{ 44 MetricConf: []config.MetricConfig{ 45 { 46 Endpoint: "/whatever/", 47 Granularity: 1, 48 Alias: "content", 49 ContentTypes: []string{ 50 "application/vnd.ft-upp-image+json", 51 }, 52 }, 53 }, 54 Threshold: 1, 55 } 56 57 var mockEnvironments = envs.NewEnvironments() 58 readURL := "http://env1.example.org" 59 mockEnvironments.SetEnvironment("env1", envs.Environment{ 60 Name: "env1", 61 ReadURL: readURL, 62 Username: "user1", 63 Password: "pass1", 64 }) 65 66 var genericImage = content.GenericContent{UUID: "e28b12f7-9796-3331-b030-05082f0b8157", Type: "application/vnd.ft-upp-image+json"} 67 capturingMetrics := runScheduleChecks(testing, genericImage, mockEnvironments, appConfig) 68 69 require.NotNil(testing, capturingMetrics) 70 require.Equal(testing, 1, capturingMetrics.Len()) 71 require.Equal(testing, readURL+"/whatever/", capturingMetrics.First().Endpoint.String()) 72 } 73 74 func TestScheduleChecksForContentWithInternalComponentsAreCorrect(testing *testing.T) { 75 appConfig := &config.AppConfig{ 76 MetricConf: []config.MetricConfig{ 77 { 78 Endpoint: "/internalcomponents/", 79 Granularity: 1, 80 Alias: "internal-components", 81 ContentTypes: []string{ 82 "application/vnd.ft-upp-article-internal+json", 83 }, 84 }, 85 }, 86 Threshold: 1, 87 } 88 89 var mockEnvironments = envs.NewEnvironments() 90 readURL := "http://env1.example.org" 91 92 mockEnvironments.SetEnvironment("env1", envs.Environment{ 93 Name: "env1", 94 ReadURL: readURL, 95 Username: "user1", 96 Password: "pass1", 97 }) 98 99 var genericArticleInternal = content.GenericContent{UUID: "a24da1d4-1524-2322-c231-25032d0f8334", Type: "application/vnd.ft-upp-article-internal+json"} 100 capturingMetrics := runScheduleChecks(testing, genericArticleInternal, mockEnvironments, appConfig) 101 102 require.NotNil(testing, capturingMetrics) 103 require.Equal(testing, 1, capturingMetrics.Len()) 104 require.Equal(testing, readURL+"/internalcomponents/", capturingMetrics.First().Endpoint.String()) 105 } 106 107 func runScheduleChecks(t *testing.T, content content.Content, mockEnvironments *envs.Environments, appConfig *config.AppConfig) *metrics.History { 108 capturingMetrics := metrics.NewHistory(make([]metrics.PublishMetric, 0)) 109 110 tid := "tid_1234" 111 publishDate, err := time.Parse(DateLayout, "2016-01-08T14:22:06.271Z") 112 if err != nil { 113 t.Error("Failure in setting up test data") 114 return nil 115 } 116 117 param := &SchedulerParam{ 118 contentToCheck: content, 119 publishDate: publishDate, 120 tid: tid, 121 isMarkedDeleted: true, 122 metricContainer: capturingMetrics, 123 environments: mockEnvironments, 124 } 125 //redefine map to avoid actual checks 126 endpointSpecificChecks := map[string]EndpointSpecificCheck{} 127 //redefine metricSink to avoid hang 128 metricSink := make(chan metrics.PublishMetric, 2) 129 log := logger.NewUPPLogger("test", "PANIC") 130 131 ScheduleChecks( 132 param, 133 endpointSpecificChecks, 134 appConfig, 135 metricSink, 136 nil, 137 log, 138 ) 139 for { 140 if capturingMetrics.Len() == mockEnvironments.Len() { 141 return capturingMetrics 142 } 143 144 time.Sleep(1 * time.Second) 145 } 146 }