|  | // Copyright 2016 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | package http2 | 
|  |  | 
|  | import "testing" | 
|  |  | 
|  | func TestRandomScheduler(t *testing.T) { | 
|  | ws := NewRandomWriteScheduler() | 
|  | ws.Push(makeWriteHeadersRequest(3)) | 
|  | ws.Push(makeWriteHeadersRequest(4)) | 
|  | ws.Push(makeWriteHeadersRequest(1)) | 
|  | ws.Push(makeWriteHeadersRequest(2)) | 
|  | ws.Push(makeWriteNonStreamRequest()) | 
|  | ws.Push(makeWriteNonStreamRequest()) | 
|  |  | 
|  | // Pop all frames. Should get the non-stream requests first, | 
|  | // followed by the stream requests in any order. | 
|  | var order []FrameWriteRequest | 
|  | for { | 
|  | wr, ok := ws.Pop() | 
|  | if !ok { | 
|  | break | 
|  | } | 
|  | order = append(order, wr) | 
|  | } | 
|  | t.Logf("got frames: %v", order) | 
|  | if len(order) != 6 { | 
|  | t.Fatalf("got %d frames, expected 6", len(order)) | 
|  | } | 
|  | if order[0].StreamID() != 0 || order[1].StreamID() != 0 { | 
|  | t.Fatalf("expected non-stream frames first", order[0], order[1]) | 
|  | } | 
|  | got := make(map[uint32]bool) | 
|  | for _, wr := range order[2:] { | 
|  | got[wr.StreamID()] = true | 
|  | } | 
|  | for id := uint32(1); id <= 4; id++ { | 
|  | if !got[id] { | 
|  | t.Errorf("frame not found for stream %d", id) | 
|  | } | 
|  | } | 
|  | } |