github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/les/execqueue_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:38</date> 10 //</624450093512134656> 11 12 13 package les 14 15 import ( 16 "testing" 17 ) 18 19 func TestExecQueue(t *testing.T) { 20 var ( 21 N = 10000 22 q = newExecQueue(N) 23 counter int 24 execd = make(chan int) 25 testexit = make(chan struct{}) 26 ) 27 defer q.quit() 28 defer close(testexit) 29 30 check := func(state string, wantOK bool) { 31 c := counter 32 counter++ 33 qf := func() { 34 select { 35 case execd <- c: 36 case <-testexit: 37 } 38 } 39 if q.canQueue() != wantOK { 40 t.Fatalf("canQueue() == %t for %s", !wantOK, state) 41 } 42 if q.queue(qf) != wantOK { 43 t.Fatalf("canQueue() == %t for %s", !wantOK, state) 44 } 45 } 46 47 for i := 0; i < N; i++ { 48 check("queue below cap", true) 49 } 50 check("full queue", false) 51 for i := 0; i < N; i++ { 52 if c := <-execd; c != i { 53 t.Fatal("execution out of order") 54 } 55 } 56 q.quit() 57 check("closed queue", false) 58 } 59