complete bool
}
-func newTestQUICClient(t *testing.T, config *Config) *testQUICConn {
- q := &testQUICConn{t: t}
- q.conn = QUICClient(&QUICConfig{
- TLSConfig: config,
- })
+func newTestQUICClient(t *testing.T, config *QUICConfig) *testQUICConn {
+ q := &testQUICConn{
+ t: t,
+ conn: QUICClient(config),
+ }
t.Cleanup(func() {
q.conn.Close()
})
return q
}
-func newTestQUICServer(t *testing.T, config *Config) *testQUICConn {
- q := &testQUICConn{t: t}
- q.conn = QUICServer(&QUICConfig{
- TLSConfig: config,
- })
+func newTestQUICServer(t *testing.T, config *QUICConfig) *testQUICConn {
+ q := &testQUICConn{
+ t: t,
+ conn: QUICServer(config),
+ }
t.Cleanup(func() {
q.conn.Close()
})
return err
}
}
+ case QUICStoreSession:
+ if a != cli {
+ return errors.New("unexpected QUICStoreSession event received by server")
+ }
+ a.conn.StoreSession(e.SessionState)
case QUICResumeSession:
if a.onResumeSession != nil {
a.onResumeSession(e.SessionState)
}
func TestQUICConnection(t *testing.T) {
- config := testConfig.Clone()
- config.MinVersion = VersionTLS13
+ config := &QUICConfig{TLSConfig: testConfig.Clone()}
+ config.TLSConfig.MinVersion = VersionTLS13
cli := newTestQUICClient(t, config)
cli.conn.SetTransportParameters(nil)
}
func TestQUICSessionResumption(t *testing.T) {
- clientConfig := testConfig.Clone()
- clientConfig.MinVersion = VersionTLS13
- clientConfig.ClientSessionCache = NewLRUClientSessionCache(1)
- clientConfig.ServerName = "example.go.dev"
+ clientConfig := &QUICConfig{TLSConfig: testConfig.Clone()}
+ clientConfig.TLSConfig.MinVersion = VersionTLS13
+ clientConfig.TLSConfig.ClientSessionCache = NewLRUClientSessionCache(1)
+ clientConfig.TLSConfig.ServerName = "example.go.dev"
- serverConfig := testConfig.Clone()
- serverConfig.MinVersion = VersionTLS13
+ serverConfig := &QUICConfig{TLSConfig: testConfig.Clone()}
+ serverConfig.TLSConfig.MinVersion = VersionTLS13
cli := newTestQUICClient(t, clientConfig)
cli.conn.SetTransportParameters(nil)
}
func TestQUICFragmentaryData(t *testing.T) {
- clientConfig := testConfig.Clone()
- clientConfig.MinVersion = VersionTLS13
- clientConfig.ClientSessionCache = NewLRUClientSessionCache(1)
- clientConfig.ServerName = "example.go.dev"
+ clientConfig := &QUICConfig{TLSConfig: testConfig.Clone()}
+ clientConfig.TLSConfig.MinVersion = VersionTLS13
+ clientConfig.TLSConfig.ClientSessionCache = NewLRUClientSessionCache(1)
+ clientConfig.TLSConfig.ServerName = "example.go.dev"
- serverConfig := testConfig.Clone()
- serverConfig.MinVersion = VersionTLS13
+ serverConfig := &QUICConfig{TLSConfig: testConfig.Clone()}
+ serverConfig.TLSConfig.MinVersion = VersionTLS13
cli := newTestQUICClient(t, clientConfig)
cli.conn.SetTransportParameters(nil)
func TestQUICPostHandshakeClientAuthentication(t *testing.T) {
// RFC 9001, Section 4.4.
- config := testConfig.Clone()
- config.MinVersion = VersionTLS13
+ config := &QUICConfig{TLSConfig: testConfig.Clone()}
+ config.TLSConfig.MinVersion = VersionTLS13
cli := newTestQUICClient(t, config)
cli.conn.SetTransportParameters(nil)
srv := newTestQUICServer(t, config)
func TestQUICPostHandshakeKeyUpdate(t *testing.T) {
// RFC 9001, Section 6.
- config := testConfig.Clone()
- config.MinVersion = VersionTLS13
+ config := &QUICConfig{TLSConfig: testConfig.Clone()}
+ config.TLSConfig.MinVersion = VersionTLS13
cli := newTestQUICClient(t, config)
cli.conn.SetTransportParameters(nil)
srv := newTestQUICServer(t, config)
}
func TestQUICPostHandshakeMessageTooLarge(t *testing.T) {
- config := testConfig.Clone()
- config.MinVersion = VersionTLS13
+ config := &QUICConfig{TLSConfig: testConfig.Clone()}
+ config.TLSConfig.MinVersion = VersionTLS13
cli := newTestQUICClient(t, config)
cli.conn.SetTransportParameters(nil)
srv := newTestQUICServer(t, config)
}
func TestQUICHandshakeError(t *testing.T) {
- clientConfig := testConfig.Clone()
- clientConfig.MinVersion = VersionTLS13
- clientConfig.InsecureSkipVerify = false
- clientConfig.ServerName = "name"
+ clientConfig := &QUICConfig{TLSConfig: testConfig.Clone()}
+ clientConfig.TLSConfig.MinVersion = VersionTLS13
+ clientConfig.TLSConfig.InsecureSkipVerify = false
+ clientConfig.TLSConfig.ServerName = "name"
- serverConfig := testConfig.Clone()
- serverConfig.MinVersion = VersionTLS13
+ serverConfig := &QUICConfig{TLSConfig: testConfig.Clone()}
+ serverConfig.TLSConfig.MinVersion = VersionTLS13
cli := newTestQUICClient(t, clientConfig)
cli.conn.SetTransportParameters(nil)
// and that it reports the application protocol as soon as it has been
// negotiated.
func TestQUICConnectionState(t *testing.T) {
- config := testConfig.Clone()
- config.MinVersion = VersionTLS13
- config.NextProtos = []string{"h3"}
+ config := &QUICConfig{TLSConfig: testConfig.Clone()}
+ config.TLSConfig.MinVersion = VersionTLS13
+ config.TLSConfig.NextProtos = []string{"h3"}
cli := newTestQUICClient(t, config)
cli.conn.SetTransportParameters(nil)
srv := newTestQUICServer(t, config)
const key = "key"
const value = "value"
ctx := context.WithValue(context.Background(), key, value)
- config := testConfig.Clone()
- config.MinVersion = VersionTLS13
+ config := &QUICConfig{TLSConfig: testConfig.Clone()}
+ config.TLSConfig.MinVersion = VersionTLS13
calls := 0
- config.GetConfigForClient = func(info *ClientHelloInfo) (*Config, error) {
+ config.TLSConfig.GetConfigForClient = func(info *ClientHelloInfo) (*Config, error) {
calls++
got, _ := info.Context().Value(key).(string)
if got != value {
}
func TestQUICDelayedTransportParameters(t *testing.T) {
- clientConfig := testConfig.Clone()
- clientConfig.MinVersion = VersionTLS13
- clientConfig.ClientSessionCache = NewLRUClientSessionCache(1)
- clientConfig.ServerName = "example.go.dev"
+ clientConfig := &QUICConfig{TLSConfig: testConfig.Clone()}
+ clientConfig.TLSConfig.MinVersion = VersionTLS13
+ clientConfig.TLSConfig.ClientSessionCache = NewLRUClientSessionCache(1)
+ clientConfig.TLSConfig.ServerName = "example.go.dev"
- serverConfig := testConfig.Clone()
- serverConfig.MinVersion = VersionTLS13
+ serverConfig := &QUICConfig{TLSConfig: testConfig.Clone()}
+ serverConfig.TLSConfig.MinVersion = VersionTLS13
cliParams := "client params"
srvParams := "server params"
}
func TestQUICEmptyTransportParameters(t *testing.T) {
- config := testConfig.Clone()
- config.MinVersion = VersionTLS13
+ config := &QUICConfig{TLSConfig: testConfig.Clone()}
+ config.TLSConfig.MinVersion = VersionTLS13
cli := newTestQUICClient(t, config)
cli.conn.SetTransportParameters(nil)
}
func TestQUICCanceledWaitingForData(t *testing.T) {
- config := testConfig.Clone()
- config.MinVersion = VersionTLS13
+ config := &QUICConfig{TLSConfig: testConfig.Clone()}
+ config.TLSConfig.MinVersion = VersionTLS13
cli := newTestQUICClient(t, config)
cli.conn.SetTransportParameters(nil)
cli.conn.Start(context.Background())
}
func TestQUICCanceledWaitingForTransportParams(t *testing.T) {
- config := testConfig.Clone()
- config.MinVersion = VersionTLS13
+ config := &QUICConfig{TLSConfig: testConfig.Clone()}
+ config.TLSConfig.MinVersion = VersionTLS13
cli := newTestQUICClient(t, config)
cli.conn.Start(context.Background())
for cli.conn.NextEvent().Kind != QUICTransportParametersRequired {
}
func TestQUICEarlyData(t *testing.T) {
- clientConfig := testConfig.Clone()
- clientConfig.MinVersion = VersionTLS13
- clientConfig.ClientSessionCache = NewLRUClientSessionCache(1)
- clientConfig.ServerName = "example.go.dev"
- clientConfig.NextProtos = []string{"h3"}
+ clientConfig := &QUICConfig{TLSConfig: testConfig.Clone()}
+ clientConfig.TLSConfig.MinVersion = VersionTLS13
+ clientConfig.TLSConfig.ClientSessionCache = NewLRUClientSessionCache(1)
+ clientConfig.TLSConfig.ServerName = "example.go.dev"
+ clientConfig.TLSConfig.NextProtos = []string{"h3"}
- serverConfig := testConfig.Clone()
- serverConfig.MinVersion = VersionTLS13
- serverConfig.NextProtos = []string{"h3"}
+ serverConfig := &QUICConfig{TLSConfig: testConfig.Clone()}
+ serverConfig.TLSConfig.MinVersion = VersionTLS13
+ serverConfig.TLSConfig.NextProtos = []string{"h3"}
cli := newTestQUICClient(t, clientConfig)
cli.conn.SetTransportParameters(nil)
cli2.conn.SetTransportParameters(nil)
srv2 := newTestQUICServer(t, serverConfig)
srv2.conn.SetTransportParameters(nil)
- if err := runTestQUICConnection(context.Background(), cli2, srv2, nil); err != nil {
+ onEvent := func(e QUICEvent, src, dst *testQUICConn) bool {
+ switch e.Kind {
+ case QUICStoreSession, QUICResumeSession:
+ t.Errorf("with EnableSessionEvents=false, got unexpected event %v", e.Kind)
+ }
+ return false
+ }
+ if err := runTestQUICConnection(context.Background(), cli2, srv2, onEvent); err != nil {
t.Fatalf("error during second connection handshake: %v", err)
}
if !cli2.conn.ConnectionState().DidResume {
}
func testQUICEarlyDataDeclined(t *testing.T, server bool) {
- clientConfig := testConfig.Clone()
- clientConfig.MinVersion = VersionTLS13
- clientConfig.ClientSessionCache = NewLRUClientSessionCache(1)
- clientConfig.ServerName = "example.go.dev"
- clientConfig.NextProtos = []string{"h3"}
-
- serverConfig := testConfig.Clone()
- serverConfig.MinVersion = VersionTLS13
- serverConfig.NextProtos = []string{"h3"}
+ clientConfig := &QUICConfig{TLSConfig: testConfig.Clone()}
+ clientConfig.EnableSessionEvents = true
+ clientConfig.TLSConfig.MinVersion = VersionTLS13
+ clientConfig.TLSConfig.ClientSessionCache = NewLRUClientSessionCache(1)
+ clientConfig.TLSConfig.ServerName = "example.go.dev"
+ clientConfig.TLSConfig.NextProtos = []string{"h3"}
+
+ serverConfig := &QUICConfig{TLSConfig: testConfig.Clone()}
+ serverConfig.EnableSessionEvents = true
+ serverConfig.TLSConfig.MinVersion = VersionTLS13
+ serverConfig.TLSConfig.NextProtos = []string{"h3"}
cli := newTestQUICClient(t, clientConfig)
cli.conn.SetTransportParameters(nil)