github.com/mackerelio/mackerel-agent-plugins@v0.89.3/mackerel-plugin-solr/lib/solr_test.go (about) 1 package mpsolr 2 3 import ( 4 "fmt" 5 "net/http" 6 "net/http/httptest" 7 "os" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 ) 12 13 var ( 14 SolrVersions = []string{"5.5.4", "6.4.2", "7.7.2", "8.1.1"} 15 solrVersion string 16 ) 17 18 var testHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 19 switch r.URL.Path { 20 case "/solr/admin/info/system": 21 fmt.Fprint(w, fetchJSON("system")) 22 case "/solr/admin/cores": 23 fmt.Fprint(w, fetchJSON("cores")) 24 case "/solr/testcore/admin/mbeans": 25 key := r.URL.Query()["cat"][0] 26 fmt.Fprint(w, fetchJSONForMbeans(key)) 27 default: 28 fmt.Fprint(w, "") 29 } 30 }) 31 32 func fetchJSON(name string) string { 33 path := fmt.Sprintf("./stats/%s/%s.json", solrVersion, name) 34 json, err := os.ReadFile(path) 35 if err != nil { 36 panic(err) 37 } 38 return string(json) 39 } 40 41 func fetchJSONForMbeans(key string) string { 42 switch key { 43 case "QUERYHANDLER", "QUERY": 44 return fetchJSON("query") 45 case "UPDATEHANDLER", "UPDATE": 46 return fetchJSON("update") 47 case "REPLICATION": 48 return fetchJSON("replication") 49 case "CACHE": 50 return fetchJSON("cache") 51 default: 52 return "" 53 } 54 } 55 56 func setupSolr(mockURL string, version string) (solr SolrPlugin) { 57 solrVersion = version 58 solr = SolrPlugin{ 59 BaseURL: mockURL + "/solr", 60 Cores: []string{"testcore"}, 61 Prefix: "solr", 62 } 63 solr.loadVersion() 64 return 65 } 66 67 func TestGraphDefinition(t *testing.T) { 68 ts := httptest.NewServer(testHandler) 69 defer ts.Close() 70 71 for _, version := range SolrVersions { 72 solr := setupSolr(ts.URL, version) 73 graphdef := solr.GraphDefinition() 74 75 assert.EqualValues(t, "testcore DocsCount", graphdef["solr.testcore.docsCount"].Label) 76 assert.EqualValues(t, "testcore_numDocs", graphdef["solr.testcore.docsCount"].Metrics[0].Name) 77 assert.EqualValues(t, "testcore_deletedDocs", graphdef["solr.testcore.docsCount"].Metrics[1].Name) 78 79 assert.EqualValues(t, "testcore IndexHeapUsageBytes", graphdef["solr.testcore.indexHeapUsageBytes"].Label) 80 assert.EqualValues(t, "testcore_indexHeapUsageBytes", graphdef["solr.testcore.indexHeapUsageBytes"].Metrics[0].Name) 81 assert.EqualValues(t, "testcore SegmentCount", graphdef["solr.testcore.segmentCount"].Label) 82 assert.EqualValues(t, "testcore_segmentCount", graphdef["solr.testcore.segmentCount"].Metrics[0].Name) 83 assert.EqualValues(t, "testcore SizeInBytes", graphdef["solr.testcore.sizeInBytes"].Label) 84 assert.EqualValues(t, "testcore_sizeInBytes", graphdef["solr.testcore.sizeInBytes"].Metrics[0].Name) 85 86 assert.EqualValues(t, "testcore Requests", graphdef["solr.testcore.requests"].Label) 87 assert.EqualValues(t, "testcore_requests_updatejson", graphdef["solr.testcore.requests"].Metrics[0].Name) 88 assert.EqualValues(t, "testcore_requests_select", graphdef["solr.testcore.requests"].Metrics[1].Name) 89 assert.EqualValues(t, "testcore_requests_updatejsondocs", graphdef["solr.testcore.requests"].Metrics[2].Name) 90 assert.EqualValues(t, "testcore_requests_get", graphdef["solr.testcore.requests"].Metrics[3].Name) 91 assert.EqualValues(t, "testcore_requests_updatecsv", graphdef["solr.testcore.requests"].Metrics[4].Name) 92 assert.EqualValues(t, "testcore_requests_replication", graphdef["solr.testcore.requests"].Metrics[5].Name) 93 assert.EqualValues(t, "testcore_requests_update", graphdef["solr.testcore.requests"].Metrics[6].Name) 94 assert.EqualValues(t, "testcore_requests_dataimport", graphdef["solr.testcore.requests"].Metrics[7].Name) 95 96 assert.EqualValues(t, "testcore Errors", graphdef["solr.testcore.errors"].Label) 97 assert.EqualValues(t, "testcore Timeouts", graphdef["solr.testcore.timeouts"].Label) 98 if version == "7.7.2" || version == "8.1.1" { 99 assert.EqualValues(t, "testcore ClientErrors", graphdef["solr.testcore.clientErrors"].Label) 100 assert.EqualValues(t, "testcore ServerErrors", graphdef["solr.testcore.serverErrors"].Label) 101 assert.EqualValues(t, "testcore RequestTimes", graphdef["solr.testcore.requestTimes"].Label) 102 } else { 103 assert.EqualValues(t, "testcore AvgRequestsPerSecond", graphdef["solr.testcore.avgRequestsPerSecond"].Label) 104 assert.EqualValues(t, "testcore 5minRateRequestsPerSecond", graphdef["solr.testcore.5minRateRequestsPerSecond"].Label) 105 assert.EqualValues(t, "testcore 15minRateRequestsPerSecond", graphdef["solr.testcore.15minRateRequestsPerSecond"].Label) 106 assert.EqualValues(t, "testcore AvgTimePerRequest", graphdef["solr.testcore.avgTimePerRequest"].Label) 107 assert.EqualValues(t, "testcore MedianRequestTime", graphdef["solr.testcore.medianRequestTime"].Label) 108 assert.EqualValues(t, "testcore 75thPcRequestTime", graphdef["solr.testcore.75thPcRequestTime"].Label) 109 assert.EqualValues(t, "testcore 95thPcRequestTime", graphdef["solr.testcore.95thPcRequestTime"].Label) 110 assert.EqualValues(t, "testcore 99thPcRequestTime", graphdef["solr.testcore.99thPcRequestTime"].Label) 111 assert.EqualValues(t, "testcore 999thPcRequestTime", graphdef["solr.testcore.999thPcRequestTime"].Label) 112 } 113 114 assert.EqualValues(t, "testcore Lookups", graphdef["solr.testcore.lookups"].Label) 115 assert.EqualValues(t, "testcore_lookups_filterCache", graphdef["solr.testcore.lookups"].Metrics[0].Name) 116 assert.EqualValues(t, "testcore_lookups_perSegFilter", graphdef["solr.testcore.lookups"].Metrics[1].Name) 117 assert.EqualValues(t, "testcore_lookups_queryResultCache", graphdef["solr.testcore.lookups"].Metrics[2].Name) 118 assert.EqualValues(t, "testcore_lookups_documentCache", graphdef["solr.testcore.lookups"].Metrics[3].Name) 119 assert.EqualValues(t, "testcore_lookups_fieldValueCache", graphdef["solr.testcore.lookups"].Metrics[4].Name) 120 121 assert.EqualValues(t, "testcore Hits", graphdef["solr.testcore.hits"].Label) 122 assert.EqualValues(t, "testcore Hitratio", graphdef["solr.testcore.hitratio"].Label) 123 assert.EqualValues(t, "testcore Inserts", graphdef["solr.testcore.inserts"].Label) 124 assert.EqualValues(t, "testcore Evictions", graphdef["solr.testcore.evictions"].Label) 125 assert.EqualValues(t, "testcore Size", graphdef["solr.testcore.size"].Label) 126 assert.EqualValues(t, "testcore WarmupTime", graphdef["solr.testcore.warmupTime"].Label) 127 } 128 } 129 130 func TestFetchMetrics(t *testing.T) { 131 ts := httptest.NewServer(testHandler) 132 defer ts.Close() 133 134 for _, version := range SolrVersions { 135 solr := setupSolr(ts.URL, version) 136 solr.loadStats() 137 stat, err := solr.FetchMetrics() 138 if err != nil { 139 t.Fatal(err) 140 } 141 142 msgPrefix := "Solr Version: " + solrVersion + ", Stat Key: " 143 144 assert.EqualValues(t, 12345, stat["testcore_numDocs"], msgPrefix+"testcore_numDocs") 145 assert.EqualValues(t, 54321, stat["testcore_deletedDocs"], msgPrefix+"testcore_deletedDocs") 146 147 assert.EqualValues(t, 128, stat["testcore_indexHeapUsageBytes"], msgPrefix+"testcore_indexHeapUsageBytes") 148 assert.EqualValues(t, 256, stat["testcore_segmentCount"], msgPrefix+"testcore_segmentCount") 149 assert.EqualValues(t, 512, stat["testcore_sizeInBytes"], msgPrefix+"testcore_sizeInBytes") 150 151 assert.EqualValues(t, 111.0, stat["testcore_requests_select"], msgPrefix+"testcore_requests_select") 152 assert.EqualValues(t, 222.0, stat["testcore_errors_select"], msgPrefix+"testcore_errors_select") 153 assert.EqualValues(t, 333.0, stat["testcore_timeouts_select"], msgPrefix+"testcore_timeouts_select") 154 if version == "7.7.2" || version == "8.1.1" { 155 assert.EqualValues(t, 432.0, stat["testcore_clientErrors_select"], msgPrefix+"testcore_clientErrors_select") 156 assert.EqualValues(t, 234.0, stat["testcore_serverErrors_select"], msgPrefix+"testcore_serverErrors_select") 157 assert.EqualValues(t, 0.123, stat["testcore_requestTimes_select"], msgPrefix+"testcore_requestTimes_select") 158 } 159 if version == "5.5.4" || version == "6.4.2" { 160 assert.EqualValues(t, 444.0, stat["testcore_avgRequestsPerSecond_select"], msgPrefix+"testcore_avgRequestsPerSecond_select") 161 } 162 switch version { 163 case "5.5.4": 164 assert.EqualValues(t, 555.0, stat["testcore_5minRateReqsPerSecond_select"], msgPrefix+"testcore_5minRateRequestsPerSecond_select") 165 assert.EqualValues(t, 666.0, stat["testcore_15minRateReqsPerSecond_select"], msgPrefix+"testcore_15minRateRequestsPerSecond_select") 166 case "6.4.2": 167 assert.EqualValues(t, 555.0, stat["testcore_5minRateRequestsPerSecond_select"], msgPrefix+"testcore_5minRateRequestsPerSecond_select") 168 assert.EqualValues(t, 666.0, stat["testcore_15minRateRequestsPerSecond_select"], msgPrefix+"testcore_15minRateRequestsPerSecond_select") 169 default: 170 } 171 if version == "5.5.4" || version == "6.4.2" { 172 assert.EqualValues(t, 777.0, stat["testcore_avgTimePerRequest_select"], msgPrefix+"testcore_avgTimePerRequest_select") 173 assert.EqualValues(t, 888.0, stat["testcore_medianRequestTime_select"], msgPrefix+"testcore_medianRequestTime_select") 174 assert.EqualValues(t, 999.0, stat["testcore_75thPcRequestTime_select"], msgPrefix+"testcore_75thPcRequestTime_select") 175 assert.EqualValues(t, 100.1, stat["testcore_95thPcRequestTime_select"], msgPrefix+"testcore_95thPcRequestTime_select") 176 assert.EqualValues(t, 100.2, stat["testcore_99thPcRequestTime_select"], msgPrefix+"testcore_99thPcRequestTime_select") 177 assert.EqualValues(t, 100.3, stat["testcore_999thPcRequestTime_select"], msgPrefix+"testcore_999thPcRequestTime_select") 178 } 179 180 assert.EqualValues(t, 1111.0, stat["testcore_requests_update"], msgPrefix+"testcore_requests_update") 181 assert.EqualValues(t, 2222.0, stat["testcore_errors_update"], msgPrefix+"testcore_errors_update") 182 assert.EqualValues(t, 3333.0, stat["testcore_timeouts_update"], msgPrefix+"testcore_timeouts_update") 183 if version == "7.7.2" || version == "8.1.1" { 184 assert.EqualValues(t, 4321.0, stat["testcore_clientErrors_update"], msgPrefix+"testcore_clientErrors_update") 185 assert.EqualValues(t, 1234.0, stat["testcore_serverErrors_update"], msgPrefix+"testcore_serverErrors_update") 186 assert.EqualValues(t, 0.1234, stat["testcore_requestTimes_update"], msgPrefix+"testcore_requestTimes_update") 187 } 188 if version == "5.5.4" || version == "6.4.2" { 189 assert.EqualValues(t, 4444.0, stat["testcore_avgRequestsPerSecond_update"], msgPrefix+"testcore_avgRequestsPerSecond_update") 190 } 191 switch version { 192 case "5.5.4": 193 assert.EqualValues(t, 5555.0, stat["testcore_5minRateReqsPerSecond_update"], msgPrefix+"testcore_5minRateRequestsPerSecond_update") 194 assert.EqualValues(t, 6666.0, stat["testcore_15minRateReqsPerSecond_update"], msgPrefix+"testcore_15minRateRequestsPerSecond_update") 195 case "6.4.2": 196 assert.EqualValues(t, 5555.0, stat["testcore_5minRateRequestsPerSecond_update"], msgPrefix+"testcore_5minRateRequestsPerSecond_update") 197 assert.EqualValues(t, 6666.0, stat["testcore_15minRateRequestsPerSecond_update"], msgPrefix+"testcore_15minRateRequestsPerSecond_update") 198 default: 199 } 200 if version == "5.5.4" || version == "6.4.2" { 201 assert.EqualValues(t, 7777.0, stat["testcore_avgTimePerRequest_update"], msgPrefix+"testcore_avgTimePerRequest_update") 202 assert.EqualValues(t, 8888.0, stat["testcore_medianRequestTime_update"], msgPrefix+"testcore_medianRequestTime_update") 203 assert.EqualValues(t, 9999.0, stat["testcore_75thPcRequestTime_update"], msgPrefix+"testcore_75thPcRequestTime_update") 204 assert.EqualValues(t, 1000.1, stat["testcore_95thPcRequestTime_update"], msgPrefix+"testcore_95thPcRequestTime_update") 205 assert.EqualValues(t, 1000.2, stat["testcore_99thPcRequestTime_update"], msgPrefix+"testcore_99thPcRequestTime_update") 206 assert.EqualValues(t, 1000.3, stat["testcore_999thPcRequestTime_update"], msgPrefix+"testcore_999thPcRequestTime_update") 207 } 208 209 assert.EqualValues(t, 11111.0, stat["testcore_requests_replication"], msgPrefix+"testcore_requests_replication") 210 assert.EqualValues(t, 22222.0, stat["testcore_errors_replication"], msgPrefix+"testcore_errors_replication") 211 assert.EqualValues(t, 33333.0, stat["testcore_timeouts_replication"], msgPrefix+"testcore_timeouts_replication") 212 if version == "7.7.2" || version == "8.1.1" { 213 assert.EqualValues(t, 54321.0, stat["testcore_clientErrors_replication"], msgPrefix+"testcore_clientErrors_replication") 214 assert.EqualValues(t, 12345.0, stat["testcore_serverErrors_replication"], msgPrefix+"testcore_serverErrors_replication") 215 assert.EqualValues(t, 0.12345, stat["testcore_requestTimes_replication"], msgPrefix+"testcore_requestTimes_replication") 216 } 217 if version == "5.5.4" || version == "6.4.2" { 218 assert.EqualValues(t, 44444.0, stat["testcore_avgRequestsPerSecond_replication"], msgPrefix+"testcore_avgRequestsPerSecond_replication") 219 } 220 switch version { 221 case "5.5.4": 222 assert.EqualValues(t, 55555.0, stat["testcore_5minRateReqsPerSecond_replication"], msgPrefix+"testcore_5minRateRequestsPerSecond_replication") 223 assert.EqualValues(t, 66666.0, stat["testcore_15minRateReqsPerSecond_replication"], msgPrefix+"testcore_15minRateRequestsPerSecond_replication") 224 case "6.4.2": 225 assert.EqualValues(t, 55555.0, stat["testcore_5minRateRequestsPerSecond_replication"], msgPrefix+"testcore_5minRateRequestsPerSecond_replication") 226 assert.EqualValues(t, 66666.0, stat["testcore_15minRateRequestsPerSecond_replication"], msgPrefix+"testcore_15minRateRequestsPerSecond_replication") 227 default: 228 } 229 if version == "5.5.4" || version == "6.4.2" { 230 assert.EqualValues(t, 77777.0, stat["testcore_avgTimePerRequest_replication"], msgPrefix+"testcore_avgTimePerRequest_replication") 231 assert.EqualValues(t, 88888.0, stat["testcore_medianRequestTime_replication"], msgPrefix+"testcore_medianRequestTime_replication") 232 assert.EqualValues(t, 99999.0, stat["testcore_75thPcRequestTime_replication"], msgPrefix+"testcore_75thPcRequestTime_replication") 233 assert.EqualValues(t, 10000.1, stat["testcore_95thPcRequestTime_replication"], msgPrefix+"testcore_95thPcRequestTime_replication") 234 assert.EqualValues(t, 10000.2, stat["testcore_99thPcRequestTime_replication"], msgPrefix+"testcore_99thPcRequestTime_replication") 235 assert.EqualValues(t, 10000.3, stat["testcore_999thPcRequestTime_replication"], msgPrefix+"testcore_999thPcRequestTime_replication") 236 } 237 238 assert.EqualValues(t, 135, stat["testcore_lookups_filterCache"], msgPrefix+"testcore_lookups_filterCache") 239 assert.EqualValues(t, 357, stat["testcore_lookups_perSegFilter"], msgPrefix+"testcore_lookups_perSegFilter") 240 assert.EqualValues(t, 579, stat["testcore_lookups_queryResultCache"], msgPrefix+"testcore_lookups_queryResultCache") 241 assert.EqualValues(t, 246, stat["testcore_lookups_documentCache"], msgPrefix+"testcore_lookups_documentCache") 242 assert.EqualValues(t, 468, stat["testcore_lookups_fieldValueCache"], msgPrefix+"testcore_lookups_fieldValueCache") 243 } 244 }