package config import ( "regexp" "testing" "github.com/stretchr/testify/assert" "github.com/pomerium/pomerium/internal/urlutil" ) func TestFromURLMatchesRequestURL(t *testing.T) { t.Parallel() for _, tc := range []struct { pattern string input string matches bool }{ {"https://from.example.com", "https://from.example.com/some/path", true}, {"https://from.example.com", "https://to.example.com/some/path", false}, {"https://*.example.com", "https://from.example.com/some/path", true}, {"https://*.example.com", "https://example.com/some/path", false}, {"https://*.example.com", "https://from.example.com:8443/some/path", true}, } { fromURL := urlutil.MustParseAndValidateURL(tc.pattern) requestURL := urlutil.MustParseAndValidateURL(tc.input) assert.Equal(t, tc.matches, FromURLMatchesRequestURL(&fromURL, &requestURL, true), "from-url: %s\nrequest-url: %s", tc.pattern, tc.input) } } func TestWildcardToRegex(t *testing.T) { t.Parallel() re, err := regexp.Compile(WildcardToRegex("*.internal.*.example.com", true)) assert.NoError(t, err) assert.True(t, re.MatchString("a.internal.b.example.com")) assert.True(t, re.MatchString("a.internal.b.example.com:1234")) re, err = regexp.Compile(WildcardToRegex("*.internal.*.example.com:1234", true)) assert.NoError(t, err) assert.False(t, re.MatchString("a.internal.b.example.com")) assert.True(t, re.MatchString("a.internal.b.example.com:1234")) assert.False(t, re.MatchString("a.internal.b.example.com:5678")) re, err = regexp.Compile(WildcardToRegex("*.internal.*.example.com", false)) assert.NoError(t, err) assert.True(t, re.MatchString("a.internal.b.example.com")) assert.False(t, re.MatchString("a.internal.b.example.com:1234")) } func TestHasPort(t *testing.T) { t.Parallel() for _, tc := range []struct { in string expect bool }{ {"example.com:1234", true}, {"example.com", false}, {"[::]:1234", true}, {"[::]", false}, } { actual := HasPort(tc.in) assert.Equal(t, tc.expect, actual, "expected %s to be %v", tc.in, tc.expect) } }