Files
creator-hub/cmd/control-plane/network_test.go
T

90 lines
2.3 KiB
Go

package main
import (
"context"
"encoding/binary"
"encoding/json"
"io"
"net"
"strings"
"testing"
"git.ipao.vip/rogee/creator-hub/internal/hub"
)
func TestSOCKS4DialerUsesBoundProxy(t *testing.T) {
listener, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
t.Fatal(err)
}
defer listener.Close()
done := make(chan error, 1)
go func() {
connection, err := listener.Accept()
if err != nil {
done <- err
return
}
defer connection.Close()
header := make([]byte, 8)
if _, err := io.ReadFull(connection, header); err != nil {
done <- err
return
}
user := make([]byte, 0, 16)
for {
var value [1]byte
if _, err := io.ReadFull(connection, value[:]); err != nil {
done <- err
return
}
if value[0] == 0 {
break
}
user = append(user, value[0])
}
if header[0] != 4 || header[1] != 1 || binary.BigEndian.Uint16(header[2:4]) != 443 ||
net.IP(header[4:8]).String() != "203.0.113.1" || string(user) != "operator" {
done <- io.ErrUnexpectedEOF
return
}
_, err = connection.Write([]byte{0, 90, 0, 0, 0, 0, 0, 0})
done <- err
}()
connection, err := socks4DialContext(listener.Addr().String(), "operator")(context.Background(), "tcp", "203.0.113.1:443")
if err != nil {
t.Fatal(err)
}
_ = connection.Close()
if err := <-done; err != nil {
t.Fatal(err)
}
}
func TestGatewayNetworkExitResolvesCredentialWithoutPersistingIt(t *testing.T) {
exit := hub.NetworkExitAccess{NetworkExit: hub.NetworkExit{
Protocol: "socks5", Host: "proxy.example", Port: 1080,
CredentialReference: &hub.CredentialReference{ID: "credential-a", Provider: "os_keyring"},
}}
gatewayExit, err := gatewayNetworkExitFor(exit, func(hub.NetworkExitAccess) (string, error) {
return "operator:ephemeral-value", nil
})
if err != nil || gatewayExit.Username != "operator" || gatewayExit.Password != "ephemeral-value" || gatewayExit.Host != "proxy.example" {
t.Fatalf("credential was not resolved into the request-local gateway payload: %#v err=%v", gatewayExit, err)
}
encoded := string(mustJSON(t, exit.NetworkExit))
if strings.Contains(encoded, "ephemeral-value") {
t.Fatalf("network exit persistence model contains resolved credential: %s", encoded)
}
}
func mustJSON(t *testing.T, value any) []byte {
t.Helper()
encoded, err := json.Marshal(value)
if err != nil {
t.Fatal(err)
}
return encoded
}