github.com/grafana/pyroscope@v1.18.0/pkg/querier/stats/stats_test.go (about) 1 // SPDX-License-Identifier: AGPL-3.0-only 2 // Provenance-includes-location: https://github.com/cortexproject/cortex/blob/master/pkg/querier/stats/stats_test.go 3 // Provenance-includes-license: Apache-2.0 4 // Provenance-includes-copyright: The Cortex Authors. 5 6 package stats 7 8 import ( 9 "context" 10 "testing" 11 "time" 12 13 "github.com/stretchr/testify/assert" 14 ) 15 16 func TestStats_WallTime(t *testing.T) { 17 t.Run("add and load wall time", func(t *testing.T) { 18 stats, _ := ContextWithEmptyStats(context.Background()) 19 stats.AddWallTime(time.Second) 20 stats.AddWallTime(time.Second) 21 22 assert.Equal(t, 2*time.Second, stats.LoadWallTime()) 23 }) 24 25 t.Run("add and load wall time nil receiver", func(t *testing.T) { 26 var stats *Stats 27 stats.AddWallTime(time.Second) 28 29 assert.Equal(t, time.Duration(0), stats.LoadWallTime()) 30 }) 31 } 32 33 func TestStats_AddFetchedSeries(t *testing.T) { 34 t.Run("add and load series", func(t *testing.T) { 35 stats, _ := ContextWithEmptyStats(context.Background()) 36 stats.AddFetchedSeries(100) 37 stats.AddFetchedSeries(50) 38 39 assert.Equal(t, uint64(150), stats.LoadFetchedSeries()) 40 }) 41 42 t.Run("add and load series nil receiver", func(t *testing.T) { 43 var stats *Stats 44 stats.AddFetchedSeries(50) 45 46 assert.Equal(t, uint64(0), stats.LoadFetchedSeries()) 47 }) 48 } 49 50 func TestStats_AddFetchedChunkBytes(t *testing.T) { 51 t.Run("add and load bytes", func(t *testing.T) { 52 stats, _ := ContextWithEmptyStats(context.Background()) 53 stats.AddFetchedChunkBytes(4096) 54 stats.AddFetchedChunkBytes(4096) 55 56 assert.Equal(t, uint64(8192), stats.LoadFetchedChunkBytes()) 57 }) 58 59 t.Run("add and load bytes nil receiver", func(t *testing.T) { 60 var stats *Stats 61 stats.AddFetchedChunkBytes(1024) 62 63 assert.Equal(t, uint64(0), stats.LoadFetchedChunkBytes()) 64 }) 65 } 66 67 func TestStats_AddFetchedChunks(t *testing.T) { 68 t.Run("add and load chunks", func(t *testing.T) { 69 stats, _ := ContextWithEmptyStats(context.Background()) 70 stats.AddFetchedChunks(20) 71 stats.AddFetchedChunks(22) 72 73 assert.Equal(t, uint64(42), stats.LoadFetchedChunks()) 74 }) 75 76 t.Run("add and load chunks nil receiver", func(t *testing.T) { 77 var stats *Stats 78 stats.AddFetchedChunks(3) 79 80 assert.Equal(t, uint64(0), stats.LoadFetchedChunks()) 81 }) 82 } 83 84 func TestStats_AddShardedQueries(t *testing.T) { 85 t.Run("add and load sharded queries", func(t *testing.T) { 86 stats, _ := ContextWithEmptyStats(context.Background()) 87 stats.AddShardedQueries(20) 88 stats.AddShardedQueries(22) 89 90 assert.Equal(t, uint32(42), stats.LoadShardedQueries()) 91 }) 92 93 t.Run("add and load sharded queries nil receiver", func(t *testing.T) { 94 var stats *Stats 95 stats.AddShardedQueries(3) 96 97 assert.Equal(t, uint32(0), stats.LoadShardedQueries()) 98 }) 99 } 100 101 func TestStats_AddSplitQueries(t *testing.T) { 102 t.Run("add and load split queries", func(t *testing.T) { 103 stats, _ := ContextWithEmptyStats(context.Background()) 104 stats.AddSplitQueries(10) 105 stats.AddSplitQueries(11) 106 107 assert.Equal(t, uint32(21), stats.LoadSplitQueries()) 108 }) 109 110 t.Run("add and load split queries nil receiver", func(t *testing.T) { 111 var stats *Stats 112 stats.AddSplitQueries(1) 113 114 assert.Equal(t, uint32(0), stats.LoadSplitQueries()) 115 }) 116 } 117 118 func TestStats_Merge(t *testing.T) { 119 t.Run("merge two stats objects", func(t *testing.T) { 120 stats1 := &Stats{} 121 stats1.AddWallTime(time.Millisecond) 122 stats1.AddFetchedSeries(50) 123 stats1.AddFetchedChunkBytes(42) 124 stats1.AddFetchedChunks(10) 125 stats1.AddShardedQueries(20) 126 stats1.AddSplitQueries(10) 127 128 stats2 := &Stats{} 129 stats2.AddWallTime(time.Second) 130 stats2.AddFetchedSeries(60) 131 stats2.AddFetchedChunkBytes(100) 132 stats2.AddFetchedChunks(11) 133 stats2.AddShardedQueries(21) 134 stats2.AddSplitQueries(11) 135 136 stats1.Merge(stats2) 137 138 assert.Equal(t, 1001*time.Millisecond, stats1.LoadWallTime()) 139 assert.Equal(t, uint64(110), stats1.LoadFetchedSeries()) 140 assert.Equal(t, uint64(142), stats1.LoadFetchedChunkBytes()) 141 assert.Equal(t, uint64(21), stats1.LoadFetchedChunks()) 142 assert.Equal(t, uint32(41), stats1.LoadShardedQueries()) 143 assert.Equal(t, uint32(21), stats1.LoadSplitQueries()) 144 }) 145 146 t.Run("merge two nil stats objects", func(t *testing.T) { 147 var stats1 *Stats 148 var stats2 *Stats 149 150 stats1.Merge(stats2) 151 152 assert.Equal(t, time.Duration(0), stats1.LoadWallTime()) 153 assert.Equal(t, uint64(0), stats1.LoadFetchedSeries()) 154 assert.Equal(t, uint64(0), stats1.LoadFetchedChunkBytes()) 155 assert.Equal(t, uint64(0), stats1.LoadFetchedChunks()) 156 assert.Equal(t, uint32(0), stats1.LoadShardedQueries()) 157 assert.Equal(t, uint32(0), stats1.LoadSplitQueries()) 158 }) 159 }