|
|
|
@ -323,6 +323,29 @@ grafana_alerting_state_history_writes_total{org="1"} 2 |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.Nil(t, req.lastRequest) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
t.Run("succeeds with special chars in labels", func(t *testing.T) { |
|
|
|
|
req := NewFakeRequester() |
|
|
|
|
loki := createTestLokiBackend(req, metrics.NewHistorianMetrics(prometheus.NewRegistry())) |
|
|
|
|
rule := createTestRule() |
|
|
|
|
states := singleFromNormal(&state.State{ |
|
|
|
|
State: eval.Alerting, |
|
|
|
|
Labels: data.Labels{ |
|
|
|
|
"dots": "contains.dot", |
|
|
|
|
"equals": "contains=equals", |
|
|
|
|
"emoji": "contains🤔emoji", |
|
|
|
|
}, |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
err := <-loki.Record(context.Background(), rule, states) |
|
|
|
|
|
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.Contains(t, "/loki/api/v1/push", req.lastRequest.URL.Path) |
|
|
|
|
sent := string(readBody(t, req.lastRequest)) |
|
|
|
|
require.Contains(t, sent, "contains.dot") |
|
|
|
|
require.Contains(t, sent, "contains=equals") |
|
|
|
|
require.Contains(t, sent, "contains🤔emoji") |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func createTestLokiBackend(req client.Requester, met *metrics.Historian) *RemoteLokiBackend { |
|
|
|
@ -378,3 +401,11 @@ func badResponse() *http.Response { |
|
|
|
|
Header: make(http.Header, 0), |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func readBody(t *testing.T, req *http.Request) []byte { |
|
|
|
|
t.Helper() |
|
|
|
|
|
|
|
|
|
val, err := io.ReadAll(req.Body) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
return val |
|
|
|
|
} |
|
|
|
|