MCPcopy
hub / github.com/prometheus/prometheus / TestQueuePushPopSingleGoroutine

Function TestQueuePushPopSingleGoroutine

tsdb/chunks/queue_test.go:64–116  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

62}
63
64func TestQueuePushPopSingleGoroutine(t *testing.T) {
65 t.Parallel()
66 seed := time.Now().UnixNano()
67 t.Log("seed:", seed)
68 r := rand.New(rand.NewSource(seed))
69
70 const maxSize = 500
71 const maxIters = 50
72
73 for maxCount := 1; maxCount < maxSize; maxCount++ {
74 queue := newWriteJobQueue(maxCount, 1+(r.Int()%maxCount))
75
76 elements := 0 // total elements in the queue
77 lastWriteID := 0
78 lastReadID := 0
79
80 for range maxIters {
81 if elements < maxCount {
82 toWrite := r.Int() % (maxCount - elements)
83 if toWrite == 0 {
84 toWrite = 1
85 }
86
87 for i := 0; i < toWrite; i++ {
88 lastWriteID++
89 require.True(t, queue.push(chunkWriteJob{seriesRef: HeadSeriesRef(lastWriteID)}))
90
91 elements++
92 }
93 }
94
95 if elements > 0 {
96 toRead := r.Int() % elements
97 if toRead == 0 {
98 toRead = 1
99 }
100
101 for i := 0; i < toRead; i++ {
102 lastReadID++
103
104 j, b := queue.pop()
105 require.True(t, b)
106 require.Equal(t, HeadSeriesRef(lastReadID), j.seriesRef)
107
108 elements--
109 }
110 }
111
112 require.Equal(t, elements, queue.length())
113 queue.assertInvariants(t)
114 }
115 }
116}
117
118func TestQueuePushBlocksOnFullQueue(t *testing.T) {
119 t.Parallel()

Callers

nothing calls this directly

Calls 7

newWriteJobQueueFunction · 0.85
HeadSeriesRefTypeAlias · 0.85
LogMethod · 0.80
lengthMethod · 0.80
assertInvariantsMethod · 0.80
pushMethod · 0.45
popMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…