safing-portmaster/spn/hub/transport_test.go
2024-03-27 16:17:58 +01:00

148 lines
3.9 KiB
Go

package hub
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func parseT(t *testing.T, definition string) *Transport {
t.Helper()
tr, err := ParseTransport(definition)
if err != nil {
t.Fatal(err)
return nil
}
return tr
}
func parseTError(definition string) error {
_, err := ParseTransport(definition)
return err
}
func TestTransportParsing(t *testing.T) {
t.Parallel()
// test parsing
assert.Equal(t, &Transport{
Protocol: "spn",
Port: 17,
}, parseT(t, "spn:17"), "should match")
assert.Equal(t, &Transport{
Protocol: "smtp",
Port: 25,
}, parseT(t, "smtp:25"), "should match")
assert.Equal(t, &Transport{
Protocol: "smtp",
Port: 25,
}, parseT(t, "smtp://:25"), "should match")
assert.Equal(t, &Transport{
Protocol: "smtp",
Port: 587,
}, parseT(t, "smtp:587"), "should match")
assert.Equal(t, &Transport{
Protocol: "imap",
Port: 143,
}, parseT(t, "imap:143"), "should match")
assert.Equal(t, &Transport{
Protocol: "http",
Port: 80,
}, parseT(t, "http:80"), "should match")
assert.Equal(t, &Transport{
Protocol: "http",
Domain: "example.com",
Port: 80,
}, parseT(t, "http://example.com:80"), "should match")
assert.Equal(t, &Transport{
Protocol: "https",
Port: 443,
}, parseT(t, "https:443"), "should match")
assert.Equal(t, &Transport{
Protocol: "ws",
Port: 80,
}, parseT(t, "ws:80"), "should match")
assert.Equal(t, &Transport{
Protocol: "wss",
Domain: "example.com",
Port: 443,
Path: "/spn",
}, parseT(t, "wss://example.com:443/spn"), "should match")
assert.Equal(t, &Transport{
Protocol: "http",
Domain: "example.com",
Port: 80,
}, parseT(t, "http://example.com:80"), "should match")
assert.Equal(t, &Transport{
Protocol: "http",
Domain: "example.com",
Port: 80,
Path: "/test%20test",
}, parseT(t, "http://example.com:80/test test"), "should match")
assert.Equal(t, &Transport{
Protocol: "http",
Domain: "example.com",
Port: 80,
Path: "/test%20test",
}, parseT(t, "http://example.com:80/test%20test"), "should match")
assert.Equal(t, &Transport{
Protocol: "http",
Domain: "example.com",
Port: 80,
Path: "/test?key=value",
}, parseT(t, "http://example.com:80/test?key=value"), "should match")
// test parsing and formatting
assert.Equal(t, "spn:17",
parseT(t, "spn:17").String(), "should match")
assert.Equal(t, "smtp:25",
parseT(t, "smtp:25").String(), "should match")
assert.Equal(t, "smtp:25",
parseT(t, "smtp://:25").String(), "should match")
assert.Equal(t, "smtp:587",
parseT(t, "smtp:587").String(), "should match")
assert.Equal(t, "imap:143",
parseT(t, "imap:143").String(), "should match")
assert.Equal(t, "http:80",
parseT(t, "http:80").String(), "should match")
assert.Equal(t, "http://example.com:80",
parseT(t, "http://example.com:80").String(), "should match")
assert.Equal(t, "https:443",
parseT(t, "https:443").String(), "should match")
assert.Equal(t, "ws:80",
parseT(t, "ws:80").String(), "should match")
assert.Equal(t, "wss://example.com:443/spn",
parseT(t, "wss://example.com:443/spn").String(), "should match")
assert.Equal(t, "http://example.com:80",
parseT(t, "http://example.com:80").String(), "should match")
assert.Equal(t, "http://example.com:80/test%20test",
parseT(t, "http://example.com:80/test test").String(), "should match")
assert.Equal(t, "http://example.com:80/test%20test",
parseT(t, "http://example.com:80/test%20test").String(), "should match")
assert.Equal(t, "http://example.com:80/test?key=value",
parseT(t, "http://example.com:80/test?key=value").String(), "should match")
// test invalid
require.Error(t, parseTError("spn"), "should fail")
require.Error(t, parseTError("spn:"), "should fail")
require.Error(t, parseTError("spn:0"), "should fail")
require.Error(t, parseTError("spn:65536"), "should fail")
}