(t *testing.T)
| 116 | } |
| 117 | |
| 118 | func TestQueuePushBlocksOnFullQueue(t *testing.T) { |
| 119 | t.Parallel() |
| 120 | queue := newWriteJobQueue(5, 5) |
| 121 | |
| 122 | pushTime := make(chan time.Time) |
| 123 | go func() { |
| 124 | require.True(t, queue.push(chunkWriteJob{seriesRef: 1})) |
| 125 | require.True(t, queue.push(chunkWriteJob{seriesRef: 2})) |
| 126 | require.True(t, queue.push(chunkWriteJob{seriesRef: 3})) |
| 127 | require.True(t, queue.push(chunkWriteJob{seriesRef: 4})) |
| 128 | require.True(t, queue.push(chunkWriteJob{seriesRef: 5})) |
| 129 | pushTime <- time.Now() |
| 130 | // This will block |
| 131 | require.True(t, queue.push(chunkWriteJob{seriesRef: 6})) |
| 132 | pushTime <- time.Now() |
| 133 | }() |
| 134 | |
| 135 | timeBeforePush := <-pushTime |
| 136 | |
| 137 | delay := 100 * time.Millisecond |
| 138 | select { |
| 139 | case <-time.After(delay): |
| 140 | // ok |
| 141 | case <-pushTime: |
| 142 | require.Fail(t, "didn't expect another push to proceed") |
| 143 | } |
| 144 | |
| 145 | popTime := time.Now() |
| 146 | j, b := queue.pop() |
| 147 | require.True(t, b) |
| 148 | require.Equal(t, HeadSeriesRef(1), j.seriesRef) |
| 149 | |
| 150 | timeAfterPush := <-pushTime |
| 151 | |
| 152 | require.GreaterOrEqual(t, timeAfterPush.Sub(popTime), time.Duration(0)) |
| 153 | require.GreaterOrEqual(t, timeAfterPush.Sub(timeBeforePush), delay) |
| 154 | } |
| 155 | |
| 156 | func TestQueuePopBlocksOnEmptyQueue(t *testing.T) { |
| 157 | t.Parallel() |
nothing calls this directly
no test coverage detected
searching dependent graphs…