package loki import ( "net/http" "net/http/httptest" "strings" "testing" "time" ) func TestLabelsValuesAndQueryRange(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case "/loki/api/v1/labels": _, _ = w.Write([]byte(`{"status":"success","data":["service","container"]}`)) case "/loki/api/v1/label/service/values": _, _ = w.Write([]byte(`{"status":"success","data":["api"]}`)) case "/loki/api/v1/query_range": if !strings.Contains(r.URL.Query().Get("query"), "api") { t.Fatalf("query not passed through: %s", r.URL.RawQuery) } _, _ = w.Write([]byte(`{"status":"success","data":{"result":[{"stream":{"service":"api"},"values":[["1700000000000000000","error token=secret"]]}]}}`)) default: http.NotFound(w, r) } })) defer ts.Close() client := New(ts.URL, "", "", "") labels, err := client.Labels(t.Context()) if err != nil || len(labels) != 2 { t.Fatalf("labels=%v err=%v", labels, err) } values, err := client.LabelValues(t.Context(), "service") if err != nil || values[0] != "api" { t.Fatalf("values=%v err=%v", values, err) } result, err := client.QueryRange(t.Context(), `{service="api"}`, time.Minute, 10) if err != nil || result.Count != 1 { t.Fatalf("result=%#v err=%v", result, err) } }