MCPcopy Index your code
hub / github.com/prometheus/pushgateway / TestPushUTF8

Function TestPushUTF8

handler/handler_test.go:440–627  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

438}
439
440func TestPushUTF8(t *testing.T) {
441 ValidationScheme = model.UTF8Validation
442 EscapingScheme = model.ValueEncodingEscaping
443 mms := MockMetricStore{}
444 handler := Push(&mms, false, true, false, logger)
445 handlerBase64 := Push(&mms, false, true, true, logger)
446
447 // With job name, instance name, UTF-8 escaped label name in params, UTF-8 metric name and text content.
448 mms.lastWriteRequest = storage.WriteRequest{}
449 req, err := http.NewRequest(
450 "POST", "http://example.org/",
451 bytes.NewBufferString("some_metric 3.14\n{\"another.metric\",instance=\"testinstance\",job=\"testjob\",\"dotted.label.name\"=\"mylabelvalue\"} 42\n"),
452 )
453 if err != nil {
454 t.Fatal(err)
455 }
456 w := httptest.NewRecorder()
457
458 params := map[string]string{
459 "job": "testjob",
460 "labels": "/instance/testinstance/U__dotted_2e_label_2e_name/mylabelvalue",
461 }
462
463 handler(w, req.WithContext(ctxWithParams(params, req)))
464 if expected, got := http.StatusOK, w.Code; expected != got {
465 t.Errorf("Wanted status code %v, got %v.", expected, got)
466 }
467 if mms.lastWriteRequest.Timestamp.IsZero() {
468 t.Errorf("Write request timestamp not set: %#v", mms.lastWriteRequest)
469 }
470 if expected, got := "testjob", mms.lastWriteRequest.Labels["job"]; expected != got {
471 t.Errorf("Wanted job %v, got %v.", expected, got)
472 }
473 if expected, got := "testinstance", mms.lastWriteRequest.Labels["instance"]; expected != got {
474 t.Errorf("Wanted instance %v, got %v.", expected, got)
475 }
476 if expected, got := "mylabelvalue", mms.lastWriteRequest.Labels["dotted.label.name"]; expected != got {
477 t.Errorf("Wanted dotted.label.name %v, got %v.", expected, got)
478 }
479 // Note that sanitation hasn't happened yet, grouping labels not in request.
480 verifyMetricFamily(t, `name:"some_metric" type:UNTYPED metric:{untyped:{value:3.14}}`, mms.lastWriteRequest.MetricFamilies["some_metric"])
481 verifyMetricFamily(t, `name:"another.metric" type:UNTYPED metric:{label:{name:"instance" value:"testinstance"} label:{name:"job" value:"testjob"} label:{name:"dotted.label.name" value:"mylabelvalue"} untyped:{value:42}}`, mms.lastWriteRequest.MetricFamilies["another.metric"])
482
483 // With base64-encoded label values, UTF-8 escaped label name in params, UTF-8 metric name and text content.
484 mms.lastWriteRequest = storage.WriteRequest{}
485 req, err = http.NewRequest(
486 "POST", "http://example.org/",
487 bytes.NewBufferString("some_metric 3.14\n{\"another.metric\",instance=\"testinstance\",job=\"testjob\",\"dotted.label.name\"=\"mylabelvalue\"} 42\n"),
488 )
489 if err != nil {
490 t.Fatal(err)
491 }
492 w = httptest.NewRecorder()
493 params = map[string]string{
494 "job": "dGVzdC9qb2I=", // job="test/job"
495 "labels": "/instance@base64/dGVzdGluc3RhbmNl/U__dotted_2e_label_2e_name@base64/bXlsYWJlbHZhbHVl", // instance="testinstance", dotted.label.name="mylabelvalue"
496 }
497 handlerBase64(w, req.WithContext(ctxWithParams(params, req)))

Callers

nothing calls this directly

Calls 3

PushFunction · 0.85
ctxWithParamsFunction · 0.85
verifyMetricFamilyFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…