0a322ebab0
This commit forward ports dedd84fa7ecb09f718f6b1a9c83999cb37b34dfa. Original commit message: - - - This diff changes code the release/3.11 branch to ensure we're not using dns.google and www.google.com over HTTP3. As documented in https://github.com/ooni/probe/issues/1873, since this morning (approx) these services do not support HTTP3 anymore. (I didn't bother with checking whether this issue affects _other_ Google services; I just limited my analysis to the services that we were using as part of testing.) This patch WILL require forward porting to the master branch.
88 lines
2.2 KiB
Go
88 lines
2.2 KiB
Go
package quicdialer_test
|
|
|
|
import (
|
|
"context"
|
|
"crypto/tls"
|
|
"errors"
|
|
"net"
|
|
"testing"
|
|
|
|
"github.com/lucas-clemente/quic-go"
|
|
"github.com/ooni/probe-cli/v3/internal/engine/netx/quicdialer"
|
|
"github.com/ooni/probe-cli/v3/internal/engine/netx/trace"
|
|
"github.com/ooni/probe-cli/v3/internal/netxlite"
|
|
"github.com/ooni/probe-cli/v3/internal/netxlite/mocks"
|
|
"github.com/ooni/probe-cli/v3/internal/netxlite/quictesting"
|
|
"github.com/ooni/probe-cli/v3/internal/netxlite/quicx"
|
|
)
|
|
|
|
func TestQUICListenerSaverCannotListen(t *testing.T) {
|
|
expected := errors.New("mocked error")
|
|
qls := &quicdialer.QUICListenerSaver{
|
|
QUICListener: &mocks.QUICListener{
|
|
MockListen: func(addr *net.UDPAddr) (quicx.UDPLikeConn, error) {
|
|
return nil, expected
|
|
},
|
|
},
|
|
Saver: &trace.Saver{},
|
|
}
|
|
pconn, err := qls.Listen(&net.UDPAddr{
|
|
IP: []byte{},
|
|
Port: 8080,
|
|
Zone: "",
|
|
})
|
|
if !errors.Is(err, expected) {
|
|
t.Fatal("unexpected error", err)
|
|
}
|
|
if pconn != nil {
|
|
t.Fatal("expected nil pconn here")
|
|
}
|
|
}
|
|
|
|
func TestSystemDialerSuccessWithReadWrite(t *testing.T) {
|
|
// This is the most common use case for collecting reads, writes
|
|
tlsConf := &tls.Config{
|
|
NextProtos: []string{"h3"},
|
|
ServerName: quictesting.Domain,
|
|
}
|
|
saver := &trace.Saver{}
|
|
systemdialer := &netxlite.QUICDialerQUICGo{
|
|
QUICListener: &quicdialer.QUICListenerSaver{
|
|
QUICListener: &netxlite.QUICListenerStdlib{},
|
|
Saver: saver,
|
|
},
|
|
}
|
|
_, err := systemdialer.DialContext(context.Background(), "udp",
|
|
quictesting.Endpoint("443"), tlsConf, &quic.Config{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
ev := saver.Read()
|
|
if len(ev) < 2 {
|
|
t.Fatal("unexpected number of events")
|
|
}
|
|
last := len(ev) - 1
|
|
for idx := 1; idx < last; idx++ {
|
|
if ev[idx].Data == nil {
|
|
t.Fatal("unexpected Data")
|
|
}
|
|
if ev[idx].Duration <= 0 {
|
|
t.Fatal("unexpected Duration")
|
|
}
|
|
if ev[idx].Err != nil {
|
|
t.Fatal("unexpected Err")
|
|
}
|
|
if ev[idx].NumBytes <= 0 {
|
|
t.Fatal("unexpected NumBytes")
|
|
}
|
|
switch ev[idx].Name {
|
|
case netxlite.ReadFromOperation, netxlite.WriteToOperation:
|
|
default:
|
|
t.Fatal("unexpected Name")
|
|
}
|
|
if ev[idx].Time.Before(ev[idx-1].Time) {
|
|
t.Fatal("unexpected Time", ev[idx].Time, ev[idx-1].Time)
|
|
}
|
|
}
|
|
}
|