package controller import ( "net/http" "net/http/httptest" "testing" "time" ) func TestCanaryObserver_GetDeploymentCounter(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { json := `{"status":"success","data":{"resultType":"vector","result":[{"metric":{},"value":[1545905245.458,"100"]}]}}` w.Write([]byte(json)) })) defer ts.Close() observer := CanaryObserver{ metricsServer: ts.URL, } val, err := observer.GetDeploymentCounter("podinfo", "default", "istio_requests_total", "1m") if err != nil { t.Fatal(err.Error()) } if val != 100 { t.Errorf("Got %v wanted %v", val, 100) } } func TestCanaryObserver_GetDeploymentHistogram(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { json := `{"status":"success","data":{"resultType":"vector","result":[{"metric":{},"value":[1545905245.596,"0.2"]}]}}` w.Write([]byte(json)) })) defer ts.Close() observer := CanaryObserver{ metricsServer: ts.URL, } val, err := observer.GetDeploymentHistogram("podinfo", "default", "istio_request_duration_seconds_bucket", "1m") if err != nil { t.Fatal(err.Error()) } if val != 200*time.Millisecond { t.Errorf("Got %v wanted %v", val, 200*time.Millisecond) } } func TestCheckMetricsServer(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { json := `{"status":"success","data":{"config.file":"/etc/prometheus/prometheus.yml"}}` w.Write([]byte(json)) })) defer ts.Close() ok, err := CheckMetricsServer(ts.URL) if err != nil { t.Fatal(err.Error()) } if !ok { t.Errorf("Got %v wanted %v", ok, true) } } func TestCheckMetricsServer_Offline(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusBadGateway) })) defer ts.Close() ok, err := CheckMetricsServer(ts.URL) if err == nil { t.Errorf("Got no error wanted %v", http.StatusBadGateway) } if ok { t.Errorf("Got %v wanted %v", ok, false) } }