github.com/arieschain/arieschain@v0.0.0-20191023063405-37c074544356/les/execqueue_test.go (about) 1 package les 2 3 import ( 4 "testing" 5 ) 6 7 func TestExecQueue(t *testing.T) { 8 var ( 9 N = 10000 10 q = newExecQueue(N) 11 counter int 12 execd = make(chan int) 13 testexit = make(chan struct{}) 14 ) 15 defer q.quit() 16 defer close(testexit) 17 18 check := func(state string, wantOK bool) { 19 c := counter 20 counter++ 21 qf := func() { 22 select { 23 case execd <- c: 24 case <-testexit: 25 } 26 } 27 if q.canQueue() != wantOK { 28 t.Fatalf("canQueue() == %t for %s", !wantOK, state) 29 } 30 if q.queue(qf) != wantOK { 31 t.Fatalf("canQueue() == %t for %s", !wantOK, state) 32 } 33 } 34 35 for i := 0; i < N; i++ { 36 check("queue below cap", true) 37 } 38 check("full queue", false) 39 for i := 0; i < N; i++ { 40 if c := <-execd; c != i { 41 t.Fatal("execution out of order") 42 } 43 } 44 q.quit() 45 check("closed queue", false) 46 }