Skip to content

Commit 631340b

Browse files
committed
Add TestIPQueuePopOneLast
Signed-off-by: Neil Twigg <[email protected]>
1 parent d626b14 commit 631340b

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed

server/ipqueue_test.go

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,99 @@ func TestIPQueuePopOne(t *testing.T) {
250250
q.recycle(&values)
251251
}
252252

253+
func TestIPQueuePopOneLast(t *testing.T) {
254+
s := &Server{}
255+
q := newIPQueue[int](s, "test")
256+
q.push(1)
257+
<-q.ch
258+
e, ok := q.popOneLast()
259+
if !ok {
260+
t.Fatal("Got nil")
261+
}
262+
if i := e; i != 1 {
263+
t.Fatalf("Expected 1, got %v", i)
264+
}
265+
if l := q.len(); l != 0 {
266+
t.Fatalf("Expected len to be 0, got %v", l)
267+
}
268+
// That does not affect the number of notProcessed
269+
if n := q.inProgress(); n != 0 {
270+
t.Fatalf("Expected count to be 0, got %v", n)
271+
}
272+
select {
273+
case <-q.ch:
274+
t.Fatalf("Should not have been notified of addition")
275+
default:
276+
// OK
277+
}
278+
q.push(2)
279+
q.push(3)
280+
e, ok = q.popOneLast()
281+
if !ok {
282+
t.Fatal("Got nil")
283+
}
284+
if i := e; i != 3 {
285+
t.Fatalf("Expected 3, got %v", i)
286+
}
287+
if l := q.len(); l != 1 {
288+
t.Fatalf("Expected len to be 1, got %v", l)
289+
}
290+
select {
291+
case <-q.ch:
292+
// OK
293+
default:
294+
t.Fatalf("Should have been notified that there is more")
295+
}
296+
e, ok = q.popOneLast()
297+
if !ok {
298+
t.Fatal("Got nil")
299+
}
300+
if i := e; i != 2 {
301+
t.Fatalf("Expected 2, got %v", i)
302+
}
303+
if l := q.len(); l != 0 {
304+
t.Fatalf("Expected len to be 0, got %v", l)
305+
}
306+
select {
307+
case <-q.ch:
308+
t.Fatalf("Should not have been notified that there is more")
309+
default:
310+
// OK
311+
}
312+
// Calling it again now that we know there is nothing, we
313+
// should get nil.
314+
if e, ok = q.popOneLast(); ok {
315+
t.Fatalf("Expected nil, got %v", e)
316+
}
317+
318+
q = newIPQueue[int](s, "test2")
319+
q.push(1)
320+
q.push(2)
321+
// Capture current capacity
322+
q.Lock()
323+
c := cap(q.elts)
324+
q.Unlock()
325+
e, ok = q.popOneLast()
326+
if !ok || e != 2 {
327+
t.Fatalf("Invalid value: %v", e)
328+
}
329+
if l := q.len(); l != 1 {
330+
t.Fatalf("Expected len to be 1, got %v", l)
331+
}
332+
values := q.pop()
333+
if len(values) != 1 || values[0] != 1 {
334+
t.Fatalf("Unexpected values: %v", values)
335+
}
336+
if cap(values) != c {
337+
t.Fatalf("Unexpected capacity: %v vs %v", cap(values), c)
338+
}
339+
if l := q.len(); l != 0 {
340+
t.Fatalf("Expected len to be 0, got %v", l)
341+
}
342+
// Just make sure that this is ok...
343+
q.recycle(&values)
344+
}
345+
253346
func TestIPQueueMultiProducers(t *testing.T) {
254347
s := &Server{}
255348
q := newIPQueue[int](s, "test")

0 commit comments

Comments
 (0)