ooni-probe-cli/internal/netxlite/shaping_shaping_test.go

67 lines
1.5 KiB
Go
Raw Permalink Normal View History

//go:build shaping
package netxlite
import (
"context"
"errors"
"net"
"testing"
"github.com/ooni/probe-cli/v3/internal/model/mocks"
)
func TestNewShapingDialerx(t *testing.T) {
t.Run("failure", func(t *testing.T) {
expected := errors.New("mocked error")
d := &mocks.Dialer{
MockDialContext: func(ctx context.Context, network, address string) (net.Conn, error) {
return nil, expected
},
}
shd := NewMaybeShapingDialer(d)
conn, err := shd.DialContext(context.Background(), "tcp", "8.8.8.8:443")
if !errors.Is(err, expected) {
t.Fatal("unexpected err", err)
}
if conn != nil {
t.Fatal("expected nil conn")
}
})
t.Run("success", func(t *testing.T) {
expected := errors.New("mocked error")
uc := &mocks.Conn{
MockRead: func(b []byte) (int, error) {
return 0, expected
},
MockWrite: func(b []byte) (int, error) {
return 0, expected
},
}
d := &mocks.Dialer{
MockDialContext: func(ctx context.Context, network, address string) (net.Conn, error) {
return uc, nil
},
}
shd := NewMaybeShapingDialer(d)
conn, err := shd.DialContext(context.Background(), "tcp", "8.8.8.8:443")
if err != nil {
t.Fatal(err)
}
if _, ok := conn.(*shapingConn); !ok {
t.Fatal("not shapingConn")
}
validateCountAndErr := func(count int, err error) {
if !errors.Is(err, expected) {
t.Fatal("unexpected err", err)
}
if count != 0 {
t.Fatal("expected zero")
}
}
validateCountAndErr(conn.Read(make([]byte, 16)))
validateCountAndErr(conn.Write(make([]byte, 16)))
})
}