MCPcopy
hub / github.com/grafana/tempo / TestInstance

Function TestInstance

modules/generator/storage/instance_test.go:35–105  ·  modules/generator/storage/instance_test.go::TestInstance

Verify basic functionality like sending metrics and exemplars, buffering and retrying failed requests.

(t *testing.T)

Source from the content-addressed store, hash-verified

33// Verify basic functionality like sending metrics and exemplars, buffering and retrying failed
34// requests.
35func TestInstance(t *testing.T) {
36 t.Parallel()
37 var err error
38 logger := log.NewLogfmtLogger(log.NewSyncWriter(os.Stdout))
39
40 mockServer := newMockPrometheusRemoteWriterServer(logger)
41 defer mockServer.close()
42
43 var cfg Config
44 cfg.RegisterFlagsAndApplyDefaults("", nil)
45 cfg.Path = t.TempDir()
46 cfg.RemoteWrite = mockServer.remoteWriteConfig()
47
48 instance, err := New(&cfg, &mockOverrides{}, "test-tenant", &noopRegisterer{}, logger)
49 require.NoError(t, err)
50
51 // Refuse requests - the WAL should buffer data until requests succeed
52 mockServer.refuseRequests.Store(true)
53
54 sendCtx, cancel := context.WithCancel(context.Background())
55 defer cancel()
56
57 // Append some data every second
58 go poll(sendCtx, time.Second, func() {
59 appender := instance.Appender(context.Background())
60
61 lbls := labels.FromMap(map[string]string{"__name__": "my-metrics"})
62 ref, err := appender.Append(0, lbls, time.Now().UnixMilli(), 1.0)
63 assert.NoError(t, err)
64
65 _, err = appender.AppendExemplar(ref, lbls, exemplar.Exemplar{
66 Labels: labels.FromMap(map[string]string{"traceID": "123"}),
67 Value: 1.2,
68 })
69 assert.NoError(t, err)
70
71 if sendCtx.Err() != nil {
72 return
73 }
74
75 err = appender.Commit()
76 assert.NoError(t, err)
77 })
78
79 // Wait until remote.Storage has tried at least once to send data
80 test.Poll(t, 30*time.Second, true, func() interface{} {
81 mockServer.mtx.Lock()
82 defer mockServer.mtx.Unlock()
83
84 return mockServer.refusedRequests > 0
85 })
86
87 // Allow requests
88 mockServer.refuseRequests.Store(false)
89
90 // Shutdown the instance - even though previous requests failed, remote.Storage should flush pending data
91 cancel()
92 err = instance.Close()

Callers

nothing calls this directly

Calls 14

pollFunction · 0.85
remoteWriteConfigMethod · 0.80
NewFunction · 0.70
StoreMethod · 0.65
AppendMethod · 0.65
NowMethod · 0.65
CloseMethod · 0.65
LenMethod · 0.65
closeMethod · 0.45
AppenderMethod · 0.45

Tested by

no test coverage detected