blob: 4589a6c7bea53fc1396b39b36a23a5f19adf5c02 [file] [log] [blame]
// 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.25
package quic
import (
"testing"
"testing/synctest"
)
func TestPing(t *testing.T) {
synctest.Test(t, testPing)
}
func testPing(t *testing.T) {
tc := newTestConn(t, clientSide)
tc.handshake()
tc.conn.ping(appDataSpace)
tc.wantFrame("connection should send a PING frame",
packetType1RTT, debugFramePing{})
tc.advanceToTimer()
tc.wantFrame("on PTO, connection should send another PING frame",
packetType1RTT, debugFramePing{})
tc.wantIdle("after sending PTO probe, no additional frames to send")
}
func TestAck(t *testing.T) {
synctest.Test(t, testAck)
}
func testAck(t *testing.T) {
tc := newTestConn(t, serverSide)
tc.handshake()
// Send two packets, to trigger an immediate ACK.
tc.writeFrames(packetType1RTT,
debugFramePing{},
)
tc.writeFrames(packetType1RTT,
debugFramePing{},
)
tc.wantFrame("connection should respond to ack-eliciting packet with an ACK frame",
packetType1RTT,
debugFrameAck{
ranges: []i64range[packetNumber]{{0, 4}},
},
)
}