2019-01-15 04:11:32 -06:00
|
|
|
package util
|
|
|
|
|
|
|
|
import (
|
2020-07-31 02:45:20 -05:00
|
|
|
"fmt"
|
2019-01-15 04:11:32 -06:00
|
|
|
"testing"
|
|
|
|
|
|
|
|
. "github.com/smartystreets/goconvey/convey"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestParseIPAddress(t *testing.T) {
|
|
|
|
Convey("Test parse ip address", t, func() {
|
2019-10-09 01:58:45 -05:00
|
|
|
addr, err := ParseIPAddress("192.168.0.140:456")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr, ShouldEqual, "192.168.0.140")
|
2019-02-04 06:10:32 -06:00
|
|
|
|
2019-10-09 01:58:45 -05:00
|
|
|
addr, err = ParseIPAddress("192.168.0.140")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr, ShouldEqual, "192.168.0.140")
|
2019-02-04 06:10:32 -06:00
|
|
|
|
2019-10-09 01:58:45 -05:00
|
|
|
addr, err = ParseIPAddress("[::1]:456")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr, ShouldEqual, "::1")
|
2019-02-04 06:10:32 -06:00
|
|
|
|
2019-10-09 01:58:45 -05:00
|
|
|
addr, err = ParseIPAddress("[::1]")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr, ShouldEqual, "::1")
|
|
|
|
})
|
2019-02-04 06:10:32 -06:00
|
|
|
|
2019-10-09 01:58:45 -05:00
|
|
|
Convey("Invalid address", t, func() {
|
|
|
|
_, err := ParseIPAddress("[::1")
|
2020-07-31 02:45:20 -05:00
|
|
|
So(err, ShouldBeError, fmt.Errorf(
|
|
|
|
`failed to split network address "[::1" by host and port: Malformed IPv6 address: '[::1'`))
|
2019-02-04 06:10:32 -06:00
|
|
|
|
2019-10-09 01:58:45 -05:00
|
|
|
_, err = ParseIPAddress("::1]")
|
2020-07-31 02:45:20 -05:00
|
|
|
So(err, ShouldBeError, fmt.Errorf(
|
|
|
|
`failed to split network address "::1]" by host and port: net.SplitHostPort failed for '::1]': address ::1]: too many colons in address`))
|
2019-02-04 06:10:32 -06:00
|
|
|
|
2019-10-09 01:58:45 -05:00
|
|
|
_, err = ParseIPAddress("")
|
2020-07-31 02:45:20 -05:00
|
|
|
So(err, ShouldBeError, fmt.Errorf(
|
|
|
|
`failed to split network address "" by host and port: Input is empty`))
|
2019-10-09 01:58:45 -05:00
|
|
|
})
|
2019-02-04 06:10:32 -06:00
|
|
|
|
2019-10-09 01:58:45 -05:00
|
|
|
Convey("Loopback address", t, func() {
|
|
|
|
addr, err := ParseIPAddress("127.0.0.1")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr, ShouldEqual, "127.0.0.1")
|
2019-02-04 06:10:32 -06:00
|
|
|
|
2019-10-09 01:58:45 -05:00
|
|
|
addr, err = ParseIPAddress("[::1]")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr, ShouldEqual, "::1")
|
|
|
|
})
|
|
|
|
}
|
2019-02-04 06:10:32 -06:00
|
|
|
|
2019-10-09 01:58:45 -05:00
|
|
|
func TestSplitHostPortDefault(t *testing.T) {
|
|
|
|
Convey("Test split ip address to host and port", t, func() {
|
|
|
|
addr, err := SplitHostPortDefault("192.168.0.140:456", "", "")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr.Host, ShouldEqual, "192.168.0.140")
|
|
|
|
So(addr.Port, ShouldEqual, "456")
|
|
|
|
|
|
|
|
addr, err = SplitHostPortDefault("192.168.0.140", "", "123")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr.Host, ShouldEqual, "192.168.0.140")
|
|
|
|
So(addr.Port, ShouldEqual, "123")
|
|
|
|
|
|
|
|
addr, err = SplitHostPortDefault("[::1]:456", "", "")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr.Host, ShouldEqual, "::1")
|
|
|
|
So(addr.Port, ShouldEqual, "456")
|
|
|
|
|
|
|
|
addr, err = SplitHostPortDefault("[::1]", "", "123")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr.Host, ShouldEqual, "::1")
|
|
|
|
So(addr.Port, ShouldEqual, "123")
|
|
|
|
|
|
|
|
addr, err = SplitHostPortDefault(":456", "1.2.3.4", "")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr.Host, ShouldEqual, "1.2.3.4")
|
|
|
|
So(addr.Port, ShouldEqual, "456")
|
|
|
|
|
|
|
|
addr, err = SplitHostPortDefault("xyz.rds.amazonaws.com", "", "123")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr.Host, ShouldEqual, "xyz.rds.amazonaws.com")
|
|
|
|
So(addr.Port, ShouldEqual, "123")
|
|
|
|
|
|
|
|
addr, err = SplitHostPortDefault("xyz.rds.amazonaws.com:123", "", "")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr.Host, ShouldEqual, "xyz.rds.amazonaws.com")
|
|
|
|
So(addr.Port, ShouldEqual, "123")
|
2019-11-18 02:42:51 -06:00
|
|
|
|
|
|
|
addr, err = SplitHostPortDefault("", "localhost", "1433")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr.Host, ShouldEqual, "localhost")
|
|
|
|
So(addr.Port, ShouldEqual, "1433")
|
2019-02-04 06:10:32 -06:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSplitHostPort(t *testing.T) {
|
|
|
|
Convey("Test split ip address to host and port", t, func() {
|
2019-10-09 01:58:45 -05:00
|
|
|
addr, err := SplitHostPort("192.168.0.140:456")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr.Host, ShouldEqual, "192.168.0.140")
|
|
|
|
So(addr.Port, ShouldEqual, "456")
|
|
|
|
|
|
|
|
addr, err = SplitHostPort("192.168.0.140")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr.Host, ShouldEqual, "192.168.0.140")
|
|
|
|
So(addr.Port, ShouldEqual, "")
|
|
|
|
|
|
|
|
addr, err = SplitHostPort("[::1]:456")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr.Host, ShouldEqual, "::1")
|
|
|
|
So(addr.Port, ShouldEqual, "456")
|
|
|
|
|
|
|
|
addr, err = SplitHostPort("[::1]")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr.Host, ShouldEqual, "::1")
|
|
|
|
So(addr.Port, ShouldEqual, "")
|
|
|
|
|
|
|
|
addr, err = SplitHostPort(":456")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr.Host, ShouldEqual, "")
|
|
|
|
So(addr.Port, ShouldEqual, "456")
|
|
|
|
|
|
|
|
addr, err = SplitHostPort("xyz.rds.amazonaws.com")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr.Host, ShouldEqual, "xyz.rds.amazonaws.com")
|
|
|
|
So(addr.Port, ShouldEqual, "")
|
|
|
|
|
|
|
|
addr, err = SplitHostPort("xyz.rds.amazonaws.com:123")
|
|
|
|
So(err, ShouldBeNil)
|
|
|
|
So(addr.Host, ShouldEqual, "xyz.rds.amazonaws.com")
|
|
|
|
So(addr.Port, ShouldEqual, "123")
|
2019-01-15 04:11:32 -06:00
|
|
|
})
|
|
|
|
}
|