200 lines
4.9 KiB
Go
200 lines
4.9 KiB
Go
package main
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
// URL starts with http://
|
|
func TestURLStartsWithHTTP(t *testing.T) {
|
|
url := "http://example.com"
|
|
err := validateURL(url)
|
|
assert.Nil(t, err)
|
|
}
|
|
|
|
// URL starts with https://
|
|
func TestURLStartsWithHTTPS(t *testing.T) {
|
|
url := "https://example.com"
|
|
err := validateURL(url)
|
|
assert.Nil(t, err)
|
|
}
|
|
|
|
// URL contains a valid domain
|
|
func TestURLContainsValidDomain(t *testing.T) {
|
|
url := "http://example.com"
|
|
err := validateURL(url)
|
|
assert.Nil(t, err)
|
|
}
|
|
|
|
// URL is empty
|
|
func TestURLEmpty(t *testing.T) {
|
|
url := ""
|
|
err := validateURL(url)
|
|
assert.NotNil(t, err)
|
|
assert.Equal(t, "URL must start with http:// or https://", err.Error())
|
|
}
|
|
|
|
// URL does not contain a domain
|
|
func TestURLNotNumbers(t *testing.T) {
|
|
url := "12345"
|
|
err := validateURL(url)
|
|
assert.NotNil(t, err)
|
|
assert.Equal(t, "URL must start with http:// or https://", err.Error())
|
|
}
|
|
|
|
// URL is not a valid URL
|
|
func TestURLNotValidURL(t *testing.T) {
|
|
url := "example.com"
|
|
err := validateURL(url)
|
|
assert.NotNil(t, err)
|
|
assert.Equal(t, "URL must start with http:// or https://", err.Error())
|
|
}
|
|
|
|
// Domain is resolvable
|
|
func TestDomainIsResolvable(t *testing.T) {
|
|
url := "http://example.com"
|
|
err := validateURL(url)
|
|
assert.Nil(t, err)
|
|
}
|
|
|
|
// Domain does not end with .local
|
|
func TestDomainDoesNotEndWithLocal(t *testing.T) {
|
|
url := "http://example.com"
|
|
err := validateURL(url)
|
|
assert.Nil(t, err)
|
|
}
|
|
|
|
// Domain is not localhost
|
|
func TestDomainIsNotLocalhost(t *testing.T) {
|
|
url := "http://example.com"
|
|
err := validateURL(url)
|
|
assert.Nil(t, err)
|
|
}
|
|
|
|
// Domain is not an IP address
|
|
func TestDomainIsNotIPAddress(t *testing.T) {
|
|
url := "http://example.com"
|
|
err := validateURL(url)
|
|
assert.Nil(t, err)
|
|
}
|
|
|
|
// URL is a file path
|
|
func TestURLIsFilePath(t *testing.T) {
|
|
url := "/path/to/file"
|
|
err := validateURL(url)
|
|
assert.NotNil(t, err)
|
|
assert.Equal(t, "URL must start with http:// or https://", err.Error())
|
|
}
|
|
|
|
// URL is a relative path
|
|
func TestURLIsRelativePath(t *testing.T) {
|
|
url := "/path/to/resource"
|
|
err := validateURL(url)
|
|
assert.NotNil(t, err)
|
|
assert.Equal(t, "URL must start with http:// or https://", err.Error())
|
|
}
|
|
|
|
// URL is a non-existent domain
|
|
func TestNonExistentDomainURL(t *testing.T) {
|
|
url := "http://jfsalksajlkfsajklfsajklfllfjffffkfsklslsksassflfskjlfjlfsjkalfsaf.com"
|
|
err := validateURL(url)
|
|
assert.NotNil(t, err)
|
|
assert.Equal(t, "failed to resolve domain", err.Error())
|
|
}
|
|
|
|
// URL is a malformed URL
|
|
func TestMalformedURL(t *testing.T) {
|
|
url := "malformedurl"
|
|
err := validateURL(url)
|
|
assert.NotNil(t, err)
|
|
assert.Equal(t, "URL must start with http:// or https://", err.Error())
|
|
}
|
|
|
|
// URL is a domain that does not support HTTP/HTTPS
|
|
func TestURLDomainNotSupportHTTP(t *testing.T) {
|
|
url := "ftp://example.com"
|
|
err := validateURL(url)
|
|
assert.NotNil(t, err)
|
|
assert.Equal(t, "URL must start with http:// or https://", err.Error())
|
|
}
|
|
|
|
// URL is an unreachable domain
|
|
func TestUnreachableDomain(t *testing.T) {
|
|
url := "http://fafsffsfsfsfsafsasafassfs.com"
|
|
err := validateURL(url)
|
|
assert.NotNil(t, err)
|
|
assert.Equal(t, "failed to resolve domain", err.Error())
|
|
}
|
|
|
|
// URL is an IP address
|
|
func TestURLIsIPAddress(t *testing.T) {
|
|
url := "http://84.55.107.42"
|
|
err := validateURL(url)
|
|
assert.NotNil(t, err)
|
|
assert.Equal(t, "IP address URLs are not allowed", err.Error())
|
|
}
|
|
|
|
// URL ends with .local
|
|
func TestURLEndsWithLocal(t *testing.T) {
|
|
url := "http://example.local"
|
|
err := validateURL(url)
|
|
assert.NotNil(t, err)
|
|
assert.Equal(t, "URLs ending with .local are not allowed", err.Error())
|
|
}
|
|
|
|
func TestLocalURLs(t *testing.T) {
|
|
localURLs := []string{
|
|
"https://localhost",
|
|
"https://home.arpa",
|
|
"https://airbox.home",
|
|
"https://airport",
|
|
"https://arcor.easybox",
|
|
"https://aterm.me",
|
|
"https://bthub.home",
|
|
"https://bthomehub.home",
|
|
"https://congstar.box",
|
|
"https://connect.box",
|
|
"https://console.gl-inet.com",
|
|
"https://easy.box",
|
|
"https://etxr",
|
|
"https://fire.walla",
|
|
"https://fritz.box",
|
|
"https://fritz.nas",
|
|
"https://fritz.repeater",
|
|
"https://giga.cube",
|
|
"https://hi.link",
|
|
"https://hitronhub.home",
|
|
"https://homerouter.cpe",
|
|
"https://huaweimobilewifi.com",
|
|
"https://localbattle.net",
|
|
"https://myfritz.box",
|
|
"https://mobile.hotspot",
|
|
"https://ntt.setup",
|
|
"https://pi.hole",
|
|
"https://plex.direct",
|
|
"https://repeater.asus.com",
|
|
"https://router.asus.com",
|
|
"https://routerlogin.com",
|
|
"https://routerlogin.net",
|
|
"https://samsung.router",
|
|
"https://speedport.ip",
|
|
"https://steamloopback.host",
|
|
"https://tplinkap.net",
|
|
"https://tplinkeap.net",
|
|
"https://tplinkmodem.net",
|
|
"https://tplinkplclogin.net",
|
|
"https://tplinkrepeater.net",
|
|
"https://tplinkwifi.net",
|
|
"https://web.setup",
|
|
"https://web.setup.home",
|
|
}
|
|
|
|
for _, localURL := range localURLs {
|
|
err := validateURL(localURL)
|
|
if err == nil {
|
|
t.Errorf("Expected an error for local URL %s, got nil", localURL)
|
|
}
|
|
assert.Equal(t, "local URLs are not allowed", err.Error())
|
|
}
|
|
}
|