Commit b37fed4c authored by Matthew Holt's avatar Matthew Holt

Beginning some tests for the parser

parent 5397eef2
...@@ -257,7 +257,7 @@ func (p *parser) closeCurlyBrace() error { ...@@ -257,7 +257,7 @@ func (p *parser) closeCurlyBrace() error {
// standardAddress turns the accepted host and port patterns // standardAddress turns the accepted host and port patterns
// into a format accepted by net.Dial. // into a format accepted by net.Dial.
func standardAddress(str string) (host, port string, err error) { func standardAddress(str string) (host, port string, err error) {
var schemePort string var schemePort, splitPort string
if strings.HasPrefix(str, "https://") { if strings.HasPrefix(str, "https://") {
schemePort = "https" schemePort = "https"
...@@ -267,14 +267,19 @@ func standardAddress(str string) (host, port string, err error) { ...@@ -267,14 +267,19 @@ func standardAddress(str string) (host, port string, err error) {
str = str[7:] str = str[7:]
} }
host, port, err = net.SplitHostPort(str) host, splitPort, err = net.SplitHostPort(str)
if err != nil && schemePort == "" { if err != nil {
host, port, err = net.SplitHostPort(str + ":") // tack on empty port host, splitPort, err = net.SplitHostPort(str + ":") // tack on empty port
} }
if err != nil && schemePort != "" { if err != nil {
// ¯\_(ツ)_/¯
host = str host = str
port = schemePort // assume port from scheme }
err = nil
if splitPort != "" {
port = splitPort
} else {
port = schemePort
} }
return return
......
package parse
import "testing"
func TestStandardAddress(t *testing.T) {
for i, test := range []struct {
input string
host, port string
shouldErr bool
}{
{`localhost`, "localhost", "", false},
{`localhost:1234`, "localhost", "1234", false},
{`localhost:`, "localhost", "", false},
{`0.0.0.0`, "0.0.0.0", "", false},
{`127.0.0.1:1234`, "127.0.0.1", "1234", false},
{`:1234`, "", "1234", false},
{`[::1]`, "::1", "", false},
{`[::1]:1234`, "::1", "1234", false},
{`:`, "", "", false},
{`localhost:http`, "localhost", "http", false},
{`localhost:https`, "localhost", "https", false},
{`:http`, "", "http", false},
{`:https`, "", "https", false},
{`http://localhost`, "localhost", "http", false},
{`https://localhost`, "localhost", "https", false},
{`http://127.0.0.1`, "127.0.0.1", "http", false},
{`https://127.0.0.1`, "127.0.0.1", "https", false},
{`http://[::1]`, "::1", "http", false},
{`http://localhost:1234`, "localhost", "1234", false},
{`https://127.0.0.1:1234`, "127.0.0.1", "1234", false},
{`http://[::1]:1234`, "::1", "1234", false},
{``, "", "", false},
{`::1`, "::1", "", true},
{`localhost::`, "localhost::", "", true},
{`#$%@`, "#$%@", "", true},
} {
host, port, err := standardAddress(test.input)
if err != nil && !test.shouldErr {
t.Errorf("Test %d: Expected no error, but had error: %v", i, err)
}
if err == nil && test.shouldErr {
t.Errorf("Test %d: Expected error, but had none", i)
}
if host != test.host {
t.Errorf("Test %d: Expected host '%s', got '%s'", i, test.host, host)
}
if port != test.port {
t.Errorf("Test %d: Expected port '%s', got '%s'", i, test.port, port)
}
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment