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  }