...
1
2
3
4
5 package http2
6
7 import "testing"
8
9 func TestRandomScheduler(t *testing.T) {
10 ws := NewRandomWriteScheduler()
11 ws.Push(makeWriteHeadersRequest(3))
12 ws.Push(makeWriteHeadersRequest(4))
13 ws.Push(makeWriteHeadersRequest(1))
14 ws.Push(makeWriteHeadersRequest(2))
15 ws.Push(makeWriteNonStreamRequest())
16 ws.Push(makeWriteNonStreamRequest())
17 ws.Push(makeWriteRSTStream(1))
18
19
20
21 var order []FrameWriteRequest
22 for {
23 wr, ok := ws.Pop()
24 if !ok {
25 break
26 }
27 order = append(order, wr)
28 }
29 t.Logf("got frames: %v", order)
30 if len(order) != 7 {
31 t.Fatalf("got %d frames, expected 6", len(order))
32 }
33 if order[0].StreamID() != 0 || order[1].StreamID() != 0 {
34 t.Fatal("expected non-stream frames first", order[0], order[1])
35 }
36 if _, ok := order[2].write.(StreamError); !ok {
37 t.Fatal("expected RST stream frames first", order[2])
38 }
39 got := make(map[uint32]bool)
40 for _, wr := range order[2:] {
41 got[wr.StreamID()] = true
42 }
43 for id := uint32(1); id <= 4; id++ {
44 if !got[id] {
45 t.Errorf("frame not found for stream %d", id)
46 }
47 }
48
49
50 const arbitraryStreamID = 123
51 ws.Push(makeHandlerPanicRST(arbitraryStreamID))
52 rws := ws.(*randomWriteScheduler)
53 if got, want := len(rws.sq), 1; got != want {
54 t.Fatalf("len of 123 stream = %v; want %v", got, want)
55 }
56 _, ok := ws.Pop()
57 if !ok {
58 t.Fatal("expected to be able to Pop")
59 }
60 if got, want := len(rws.sq), 0; got != want {
61 t.Fatalf("len of 123 stream = %v; want %v", got, want)
62 }
63
64 }
65
View as plain text