Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 

45 righe
1.1 KiB

  1. // Copyright 2016 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package http2
  5. import "testing"
  6. func TestRandomScheduler(t *testing.T) {
  7. ws := NewRandomWriteScheduler()
  8. ws.Push(makeWriteHeadersRequest(3))
  9. ws.Push(makeWriteHeadersRequest(4))
  10. ws.Push(makeWriteHeadersRequest(1))
  11. ws.Push(makeWriteHeadersRequest(2))
  12. ws.Push(makeWriteNonStreamRequest())
  13. ws.Push(makeWriteNonStreamRequest())
  14. // Pop all frames. Should get the non-stream requests first,
  15. // followed by the stream requests in any order.
  16. var order []FrameWriteRequest
  17. for {
  18. wr, ok := ws.Pop()
  19. if !ok {
  20. break
  21. }
  22. order = append(order, wr)
  23. }
  24. t.Logf("got frames: %v", order)
  25. if len(order) != 6 {
  26. t.Fatalf("got %d frames, expected 6", len(order))
  27. }
  28. if order[0].StreamID() != 0 || order[1].StreamID() != 0 {
  29. t.Fatal("expected non-stream frames first", order[0], order[1])
  30. }
  31. got := make(map[uint32]bool)
  32. for _, wr := range order[2:] {
  33. got[wr.StreamID()] = true
  34. }
  35. for id := uint32(1); id <= 4; id++ {
  36. if !got[id] {
  37. t.Errorf("frame not found for stream %d", id)
  38. }
  39. }
  40. }