flamenco/internal/own_url/own_url_test.go

74 lines
2.2 KiB
Go

// Package own_url provides a way for a process to find a URL on which it can be reached.
package own_url
// SPDX-License-Identifier: GPL-3.0-or-later
import (
"net"
"testing"
"time"
"github.com/mattn/go-colorable"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"github.com/stretchr/testify/assert"
)
func TestAvailableURLs(t *testing.T) {
output := zerolog.ConsoleWriter{Out: colorable.NewColorableStdout(), TimeFormat: time.RFC3339}
log.Logger = log.Output(output)
// This should run without errors. It's hard to predict the returned URLs
// though, as they depend on the local network devices.
urls, err := AvailableURLs("http", ":9999")
if err != nil {
t.Fatal(err)
}
assert.NotEmpty(t, urls, "expected at least one URL to be returned")
}
func TestSpecificHostURL(t *testing.T) {
tests := []struct {
name string
expect string // Empty string encodes "expect nil pointer"
listen string
}{
{"Specific IPv4 with port", "http://192.168.0.1:8080/", "192.168.0.1:8080"},
{"Specific IPv4 without port", "http://192.168.0.1/", "192.168.0.1"},
{"Specific IPv6 with port", "http://[fe80::5054:ff:fede:2ad7]:8080/", "[fe80::5054:ff:fede:2ad7]:8080"},
{"Specific IPv6 without port", "http://[fe80::5054:ff:fede:2ad7]/", "[fe80::5054:ff:fede:2ad7]"},
{"Wildcard IPv4", "", "0.0.0.0:8080"},
{"Wildcard IPv6", "", "[::0]:8080"},
{"No host, just port", "", ":8080"},
{"Invalid address", "http://this%20is%20not%20an%20address/", "this is not an address"},
{"Invalid port", "", "192.168.0.1::too-many-colons"},
}
for _, test := range tests {
actual := specificHostURL("http", test.listen)
if test.expect == "" {
assert.Nil(t, actual, "for input %q", test.listen)
continue
}
if actual == nil {
t.Errorf("returned URL is nil for input %q", test.listen)
continue
}
assert.Equal(t, test.expect, actual.String(), "for input %q", test.listen)
}
}
func TestURLsForNetworkInterfaces(t *testing.T) {
addrs := []net.IP{linkLocalIPv6, lanIPv4}
urls, err := urlsForNetworkInterfaces("http", ":9999", addrs)
if err != nil {
t.Fatal(err)
}
assert.Len(t, urls, 2)
assert.Equal(t, "http://[fe80::5054:ff:fede:2ad7]:9999/", urls[0].String())
assert.Equal(t, "http://192.168.0.1:9999/", urls[1].String())
}