(t *testing.T)
| 810 | } |
| 811 | |
| 812 | func TestQuerierEngineConfigs(t *testing.T) { |
| 813 | const blockRangePeriod = 5 * time.Second |
| 814 | |
| 815 | s, err := e2e.NewScenario(networkName) |
| 816 | require.NoError(t, err) |
| 817 | defer s.Close() |
| 818 | |
| 819 | // Configure the blocks storage to frequently compact TSDB head |
| 820 | // and ship blocks to the storage. |
| 821 | flags := mergeFlags(BlocksStorageFlags(), map[string]string{ |
| 822 | "-blocks-storage.tsdb.block-ranges-period": blockRangePeriod.String(), |
| 823 | "-blocks-storage.tsdb.ship-interval": "1s", |
| 824 | "-blocks-storage.tsdb.retention-period": ((blockRangePeriod * 2) - 1).String(), |
| 825 | "-querier.thanos-engine": "true", |
| 826 | "-querier.enable-x-functions": "true", |
| 827 | "-querier.optimizers": "all", |
| 828 | }) |
| 829 | |
| 830 | // Start dependencies. |
| 831 | minio := e2edb.NewMinio(9000, flags["-blocks-storage.s3.bucket-name"]) |
| 832 | consul := e2edb.NewConsul() |
| 833 | require.NoError(t, s.StartAndWaitReady(consul, minio)) |
| 834 | |
| 835 | // Start Cortex components for the write path. |
| 836 | distributor := e2ecortex.NewDistributor("distributor", e2ecortex.RingStoreConsul, consul.NetworkHTTPEndpoint(), flags, "") |
| 837 | ingester := e2ecortex.NewIngester("ingester", e2ecortex.RingStoreConsul, consul.NetworkHTTPEndpoint(), flags, "") |
| 838 | require.NoError(t, s.StartAndWaitReady(distributor, ingester)) |
| 839 | |
| 840 | queryFrontend := e2ecortex.NewQueryFrontendWithConfigFile("query-frontend", "", flags, "") |
| 841 | require.NoError(t, s.Start(queryFrontend)) |
| 842 | |
| 843 | querier := e2ecortex.NewQuerier("querier", e2ecortex.RingStoreConsul, consul.NetworkHTTPEndpoint(), mergeFlags(flags, map[string]string{ |
| 844 | "-querier.frontend-address": queryFrontend.NetworkGRPCEndpoint(), |
| 845 | }), "") |
| 846 | require.NoError(t, s.StartAndWaitReady(querier)) |
| 847 | |
| 848 | // Wait until the distributor and querier has updated the ring. |
| 849 | require.NoError(t, distributor.WaitSumMetrics(e2e.Equals(512), "cortex_ring_tokens_total")) |
| 850 | require.NoError(t, querier.WaitSumMetrics(e2e.Equals(512), "cortex_ring_tokens_total")) |
| 851 | |
| 852 | c, err := e2ecortex.NewClient(distributor.HTTPEndpoint(), queryFrontend.HTTPEndpoint(), "", "", "user-1") |
| 853 | require.NoError(t, err) |
| 854 | |
| 855 | // Push some series to Cortex. |
| 856 | series1Timestamp := time.Now() |
| 857 | series1, _ := generateSeries("series_1", series1Timestamp, prompb.Label{Name: "job", Value: "test"}) |
| 858 | series2, _ := generateSeries("series_2", series1Timestamp, prompb.Label{Name: "job", Value: "test"}) |
| 859 | |
| 860 | res, err := c.Push(series1) |
| 861 | require.NoError(t, err) |
| 862 | require.Equal(t, 200, res.StatusCode) |
| 863 | res, err = c.Push(series2) |
| 864 | require.NoError(t, err) |
| 865 | require.Equal(t, 200, res.StatusCode) |
| 866 | |
| 867 | for xFunc := range parse.XFunctions { |
| 868 | result, err := c.Query(fmt.Sprintf(`%s(series_1{job="test"}[1m])`, xFunc), series1Timestamp) |
| 869 | require.NoError(t, err) |
nothing calls this directly
no test coverage detected