From 264b91a995252b9e2ce0a3d54b9045c7eae74855 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Tue, 23 Apr 2019 13:49:31 +0000 Subject: [PATCH] Flip the ordering of schema, store and query so tests run faster By running the different test cases as the inner loop we can re-use the same store multiple times, saving a lot of CPU. Signed-off-by: Bryan Boreham --- pkg/chunk/chunk_store_test.go | 60 ++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/pkg/chunk/chunk_store_test.go b/pkg/chunk/chunk_store_test.go index 97d63930abf..bf98988f25d 100644 --- a/pkg/chunk/chunk_store_test.go +++ b/pkg/chunk/chunk_store_test.go @@ -173,7 +173,7 @@ func TestChunkStore_Get(t *testing.T) { barSampleStream2, err := createSampleStreamFrom(barChunk2) require.NoError(t, err) - for _, tc := range []struct { + testCases := []struct { query string expect model.Matrix }{ @@ -245,24 +245,25 @@ func TestChunkStore_Get(t *testing.T) { `{__name__=~"bar", bar="baz",toms!="code"}`, model.Matrix{barSampleStream1}, }, - } { - for _, schema := range schemas { - for _, storeCase := range stores { + } + for _, schema := range schemas { + for _, storeCase := range stores { + storeCfg := storeCase.configFn() + store := newTestChunkStoreConfig(t, schema.name, storeCfg) + defer store.Stop() + + if err := store.Put(ctx, []Chunk{ + fooChunk1, + fooChunk2, + barChunk1, + barChunk2, + }); err != nil { + t.Fatal(err) + } + + for _, tc := range testCases { t.Run(fmt.Sprintf("%s / %s / %s", tc.query, schema.name, storeCase.name), func(t *testing.T) { t.Log("========= Running query", tc.query, "with schema", schema.name) - storeCfg := storeCase.configFn() - store := newTestChunkStoreConfig(t, schema.name, storeCfg) - defer store.Stop() - - if err := store.Put(ctx, []Chunk{ - fooChunk1, - fooChunk2, - barChunk1, - barChunk2, - }); err != nil { - t.Fatal(err) - } - matchers, err := promql.ParseMetricSelector(tc.query) if err != nil { t.Fatal(err) @@ -326,7 +327,7 @@ func TestChunkStore_getMetricNameChunks(t *testing.T) { "toms": "code", }) - for _, tc := range []struct { + testCases := []struct { query string expect []Chunk }{ @@ -366,19 +367,20 @@ func TestChunkStore_getMetricNameChunks(t *testing.T) { `foo{toms="code", bar="baz"}`, []Chunk{chunk1}, }, - } { - for _, schema := range schemas { - for _, storeCase := range stores { - t.Run(fmt.Sprintf("%s / %s / %s", tc.query, schema.name, storeCase.name), func(t *testing.T) { - t.Log("========= Running query", tc.query, "with schema", schema.name) - storeCfg := storeCase.configFn() - store := newTestChunkStoreConfig(t, schema.name, storeCfg) - defer store.Stop() + } + for _, schema := range schemas { + for _, storeCase := range stores { + storeCfg := storeCase.configFn() + store := newTestChunkStoreConfig(t, schema.name, storeCfg) + defer store.Stop() - if err := store.Put(ctx, []Chunk{chunk1, chunk2}); err != nil { - t.Fatal(err) - } + if err := store.Put(ctx, []Chunk{chunk1, chunk2}); err != nil { + t.Fatal(err) + } + for _, tc := range testCases { + t.Run(fmt.Sprintf("%s / %s / %s", tc.query, schema.name, storeCase.name), func(t *testing.T) { + t.Log("========= Running query", tc.query, "with schema", schema.name) matchers, err := promql.ParseMetricSelector(tc.query) if err != nil { t.Fatal(err)