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

Function TestReadWrite

tempodb/backend/cache/cache_test.go:167–229  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

165}
166
167func TestReadWrite(t *testing.T) {
168 tenantID := "test"
169 blockID := uuid.New()
170
171 tests := []struct {
172 name string
173 readerRead []byte
174 readerName string
175 cacheInfo *backend.CacheInfo
176 expectedRead []byte
177 expectedCache []byte
178 }{
179 {
180 name: "should cache",
181 readerName: "foo",
182 readerRead: []byte{0x02},
183 cacheInfo: &backend.CacheInfo{Role: cache.RoleParquetFooter},
184 expectedRead: []byte{0x02},
185 expectedCache: []byte{0x02},
186 },
187 {
188 name: "should not cache",
189 readerName: "bar",
190 cacheInfo: &backend.CacheInfo{Role: cache.Role("foo")}, // fake role name will not find a matching cache
191 readerRead: []byte{0x02},
192 expectedRead: []byte{0x02},
193 },
194 }
195
196 for _, tt := range tests {
197 t.Run(tt.name, func(t *testing.T) {
198 mockR := &backend.MockRawReader{
199 R: tt.readerRead,
200 }
201 mockW := &backend.MockRawWriter{}
202
203 // READ
204 r, _, err := NewCache(nil, mockR, mockW, test.NewMockProvider(), log.NewNopLogger())
205 require.NoError(t, err)
206
207 ctx := context.Background()
208 reader, _, _ := r.Read(ctx, tt.readerName, backend.KeyPathForBlock(blockID, tenantID), tt.cacheInfo)
209 read, _ := io.ReadAll(reader)
210 assert.Equal(t, tt.expectedRead, read)
211
212 // clear reader and re-request
213 mockR.R = nil
214
215 reader, _, _ = r.Read(ctx, tt.readerName, backend.KeyPathForBlock(blockID, tenantID), tt.cacheInfo)
216 read, _ = io.ReadAll(reader)
217 assert.Equal(t, len(tt.expectedCache), len(read))
218
219 // WRITE
220 _, w, err := NewCache(nil, mockR, mockW, test.NewMockProvider(), log.NewNopLogger())
221 require.NoError(t, err)
222
223 _ = w.Write(ctx, tt.readerName, backend.KeyPathForBlock(blockID, tenantID), bytes.NewReader(tt.readerRead), int64(len(tt.readerRead)), tt.cacheInfo)
224 reader, _, _ = r.Read(ctx, tt.readerName, backend.KeyPathForBlock(blockID, tenantID), tt.cacheInfo)

Callers

nothing calls this directly

Calls 9

RoleTypeAlias · 0.92
NewMockProviderFunction · 0.92
KeyPathForBlockFunction · 0.92
NewCacheFunction · 0.85
ReadMethod · 0.65
ReadAllMethod · 0.65
WriteMethod · 0.65
RunMethod · 0.45
EqualMethod · 0.45

Tested by

no test coverage detected