File tree Expand file tree Collapse file tree 1 file changed +37
-0
lines changed
pkg/controller/priorityqueue Expand file tree Collapse file tree 1 file changed +37
-0
lines changed Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ package priorityqueue
22
33import (
44 "fmt"
5+ "math/rand/v2"
56 "sync"
67 "testing"
78 "time"
@@ -13,6 +14,42 @@ import (
1314)
1415
1516var _ = Describe ("Controllerworkqueue" , func () {
17+
18+ It ("returns many items" , func () {
19+ // This test ensures the queue is able to drain a large queue without panic'ing.
20+ // In a previous version of the code we were calling queue.Delete within q.Ascend
21+ // which led to a panic in queue.Ascend > iterate:
22+ // "panic: runtime error: index out of range [0] with length 0"
23+
24+ q , _ := newQueue ()
25+ defer q .ShutDown ()
26+
27+ for range 20 {
28+ for i := range 1000 {
29+ rn := rand .N (100 )
30+ if rn < 10 {
31+ q .AddWithOpts (AddOpts {After : time .Duration (rn ) * time .Millisecond }, fmt .Sprintf ("foo%d" , i ))
32+ } else {
33+ q .AddWithOpts (AddOpts {Priority : rn }, fmt .Sprintf ("foo%d" , i ))
34+ }
35+ }
36+
37+ wg := sync.WaitGroup {}
38+ for range 100 { // The panic only occurred relatively frequently with a high number of go routines.
39+ wg .Add (1 )
40+ go func () {
41+ defer wg .Done ()
42+ for range 10 {
43+ obj , _ , _ := q .GetWithPriority ()
44+ q .Done (obj )
45+ }
46+ }()
47+ }
48+
49+ wg .Wait ()
50+ }
51+ })
52+
1653 It ("returns an item" , func () {
1754 q , metrics := newQueue ()
1855 defer q .ShutDown ()
You can’t perform that action at this time.
0 commit comments