| // Copyright 2023 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. |
| |
| //go:build go1.21 |
| |
| package quic |
| |
| import "testing" |
| |
| func TestSentPacket(t *testing.T) { |
| frames := []any{ |
| byte(frameTypePing), |
| byte(frameTypeStreamBase), |
| uint64(1), |
| i64range[int64]{1 << 20, 1<<20 + 1024}, |
| } |
| // Record sent frames. |
| sent := newSentPacket() |
| for _, f := range frames { |
| switch f := f.(type) { |
| case byte: |
| sent.appendAckElicitingFrame(f) |
| case uint64: |
| sent.appendInt(f) |
| case i64range[int64]: |
| sent.appendOffAndSize(f.start, int(f.size())) |
| } |
| } |
| // Read the record. |
| for i, want := range frames { |
| if done := sent.done(); done { |
| t.Fatalf("before consuming contents, sent.done() = true, want false") |
| } |
| switch want := want.(type) { |
| case byte: |
| if got := sent.next(); got != want { |
| t.Fatalf("%v: sent.next() = %v, want %v", i, got, want) |
| } |
| case uint64: |
| if got := sent.nextInt(); got != want { |
| t.Fatalf("%v: sent.nextInt() = %v, want %v", i, got, want) |
| } |
| case i64range[int64]: |
| if start, end := sent.nextRange(); start != want.start || end != want.end { |
| t.Fatalf("%v: sent.nextRange() = [%v,%v), want %v", i, start, end, want) |
| } |
| } |
| } |
| if done := sent.done(); !done { |
| t.Fatalf("after consuming contents, sent.done() = false, want true") |
| } |
| } |