Update domain.go and tests
This commit is contained in:
parent
8e37f0e0e2
commit
a0dfd597ad
5
Makefile
5
Makefile
@ -8,4 +8,7 @@ all:
|
||||
clean:
|
||||
$(RM) meshnamed meshnamed.exe
|
||||
|
||||
.PHONY: all clean
|
||||
test:
|
||||
go test pkg/meshname/*_test.go
|
||||
|
||||
.PHONY: all clean test
|
||||
|
1
go.sum
1
go.sum
@ -10,6 +10,7 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g=
|
||||
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
|
@ -7,22 +7,24 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
// DomainFromIP derives a meshname subdomain for the authoritative DNS server address
|
||||
func DomainFromIP(target *net.IP) string {
|
||||
return strings.ToLower(base32.StdEncoding.EncodeToString(*target)[0:26])
|
||||
}
|
||||
|
||||
// IPFromDomain derives authoritative DNS server address from the meshname subdomain
|
||||
func IPFromDomain(domain *string) (net.IP, error) {
|
||||
name := strings.ToUpper(*domain) + "======"
|
||||
data, err := base32.StdEncoding.DecodeString(name)
|
||||
if err != nil {
|
||||
return net.IP{}, err
|
||||
return nil, err
|
||||
}
|
||||
if len(data) != 16 {
|
||||
return net.IP{}, errors.New("Invalid subdomain")
|
||||
return nil, errors.New("can't decode IP address, invalid subdomain")
|
||||
}
|
||||
ipAddr := net.IP(data)
|
||||
if ipAddr == nil {
|
||||
return net.IP{}, errors.New("Invalid IP address")
|
||||
return nil, errors.New("can't decode IP address, invalid data")
|
||||
}
|
||||
return ipAddr, nil
|
||||
}
|
||||
|
47
pkg/meshname/domain_test.go
Normal file
47
pkg/meshname/domain_test.go
Normal file
@ -0,0 +1,47 @@
|
||||
package meshname
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"net"
|
||||
"testing"
|
||||
"fmt"
|
||||
|
||||
"github.com/zhoreeq/meshname/pkg/meshname"
|
||||
)
|
||||
|
||||
func TestIPFromDomain(t *testing.T) {
|
||||
test_subdomain := "aib7cwwdeob2vtnqf2cfnm7ilq"
|
||||
test_ip := net.ParseIP("203:f15a:c323:83aa:cdb0:2e84:56b3:e85c")
|
||||
|
||||
if ip, err := meshname.IPFromDomain(&test_subdomain); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if bytes.Compare(ip, test_ip) != 0 {
|
||||
t.Fatalf("Decoding IP error %s != %s", ip.String(), test_ip.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestDomainFromIP(t *testing.T) {
|
||||
test_subdomain := "aib7cwwdeob2vtnqf2cfnm7ilq"
|
||||
test_ip := net.ParseIP("203:f15a:c323:83aa:cdb0:2e84:56b3:e85c")
|
||||
|
||||
subdomain := meshname.DomainFromIP(&test_ip)
|
||||
if subdomain != test_subdomain {
|
||||
t.Fatalf("Encoding domain error: %s != %s", subdomain, test_subdomain)
|
||||
}
|
||||
}
|
||||
|
||||
func ExampleIPFromDomain() {
|
||||
test_subdomain := "aib7cwwdeob2vtnqf2cfnm7ilq"
|
||||
|
||||
if ip, err := meshname.IPFromDomain(&test_subdomain); err == nil {
|
||||
fmt.Println(ip)
|
||||
}
|
||||
// Output: 203:f15a:c323:83aa:cdb0:2e84:56b3:e85c
|
||||
}
|
||||
|
||||
func ExampleDomainFromIP() {
|
||||
test_ip := net.ParseIP("203:f15a:c323:83aa:cdb0:2e84:56b3:e85c")
|
||||
|
||||
fmt.Println(meshname.DomainFromIP(&test_ip))
|
||||
// Output: aib7cwwdeob2vtnqf2cfnm7ilq
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
package meshname
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"net"
|
||||
"testing"
|
||||
|
||||
"github.com/zhoreeq/meshname/pkg/meshname"
|
||||
)
|
||||
|
||||
func TestIPFromDomain(t *testing.T) {
|
||||
test_subdomain := "aib7cwwdeob2vtnqf2cfnm7ilq"
|
||||
test_ip := net.ParseIP("203:f15a:c323:83aa:cdb0:2e84:56b3:e85c")
|
||||
|
||||
ip, err := meshname.IPFromDomain(&test_subdomain)
|
||||
if err != nil {
|
||||
t.Errorf("Decoding IP from domain failed %s", err)
|
||||
} else if bytes.Compare(ip, test_ip) != 0 {
|
||||
t.Errorf("Decoding IP error %s != %s", ip.String(), test_ip.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestDomainFromIP(t *testing.T) {
|
||||
test_subdomain := "aib7cwwdeob2vtnqf2cfnm7ilq"
|
||||
test_ip := net.ParseIP("203:f15a:c323:83aa:cdb0:2e84:56b3:e85c")
|
||||
|
||||
subdomain := meshname.DomainFromIP(&test_ip)
|
||||
if subdomain != test_subdomain {
|
||||
t.Errorf("Encoding domain error: %s != %s", subdomain, test_subdomain)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user