(t *testing.T)
| 679 | } |
| 680 | |
| 681 | func TestSearchCachedMetrics(t *testing.T) { |
| 682 | // set up backend |
| 683 | tenant := "foo" |
| 684 | meta := &backend.BlockMeta{ |
| 685 | StartTime: time.Unix(15, 0), |
| 686 | EndTime: time.Unix(16, 0), |
| 687 | Size_: defaultTargetBytesPerRequest, |
| 688 | TotalRecords: 1, |
| 689 | BlockID: backend.MustParse("00000000-0000-0000-0000-000000000123"), |
| 690 | } |
| 691 | rdr := &mockReader{ |
| 692 | metas: []*backend.BlockMeta{meta}, |
| 693 | } |
| 694 | |
| 695 | // set up cache |
| 696 | c := test.NewMockClient() |
| 697 | p := test.NewMockProvider() |
| 698 | err := p.AddCache(cache.RoleFrontendSearch, c) |
| 699 | require.NoError(t, err) |
| 700 | f := frontendWithSettings(t, nil, rdr, nil, p) |
| 701 | |
| 702 | // set up query |
| 703 | query := "{}" |
| 704 | hash := hashForSearchRequest(&tempopb.SearchRequest{Query: query, Limit: 3, SpansPerSpanSet: 2}) |
| 705 | start := uint32(10) |
| 706 | end := uint32(20) |
| 707 | cacheKey := searchJobCacheKey(tenant, hash, time.Unix(int64(start), 0), time.Unix(int64(end), 0), meta, 0, 1) |
| 708 | |
| 709 | // confirm cache key doesn't exist |
| 710 | _, bufs, _ := c.Fetch(context.Background(), []string{cacheKey}) |
| 711 | require.Equal(t, 0, len(bufs)) |
| 712 | |
| 713 | // execute query |
| 714 | path := fmt.Sprintf("/?start=%d&end=%d&q=%s&limit=3&spss=2", start, end, query) |
| 715 | req := httptest.NewRequest("GET", path, nil) |
| 716 | ctx := req.Context() |
| 717 | ctx = user.InjectOrgID(ctx, tenant) |
| 718 | req = req.WithContext(ctx) |
| 719 | respWriter := httptest.NewRecorder() |
| 720 | f.SearchHandler.ServeHTTP(respWriter, req) |
| 721 | resp := respWriter.Result() |
| 722 | require.Equal(t, 200, resp.StatusCode) |
| 723 | |
| 724 | // parse response |
| 725 | actualResp := &tempopb.SearchResponse{} |
| 726 | bytesResp, err := io.ReadAll(resp.Body) |
| 727 | require.NoError(t, err) |
| 728 | err = jsonpb.Unmarshal(bytes.NewReader(bytesResp), actualResp) |
| 729 | require.NoError(t, err) |
| 730 | |
| 731 | // verify metrics are collected |
| 732 | require.Equal(t, uint64(1), actualResp.Metrics.InspectedBytes) |
| 733 | require.Equal(t, uint32(1), actualResp.Metrics.InspectedTraces) |
| 734 | require.Equal(t, uint64(0), actualResp.Metrics.InspectedSpans) |
| 735 | require.Equal(t, uint32(1), actualResp.Metrics.CompletedJobs) |
| 736 | require.Equal(t, uint32(1), actualResp.Metrics.TotalJobs) |
| 737 | require.Equal(t, uint32(1), actualResp.Metrics.TotalBlocks) |
| 738 | require.Equal(t, uint64(defaultTargetBytesPerRequest), actualResp.Metrics.TotalBlockBytes) |
nothing calls this directly
no test coverage detected