summaryrefslogtreecommitdiffhomepage
path: root/dhcpv6/option_ntp_server_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'dhcpv6/option_ntp_server_test.go')
-rw-r--r--dhcpv6/option_ntp_server_test.go82
1 files changed, 82 insertions, 0 deletions
diff --git a/dhcpv6/option_ntp_server_test.go b/dhcpv6/option_ntp_server_test.go
new file mode 100644
index 0000000..6cc5dd3
--- /dev/null
+++ b/dhcpv6/option_ntp_server_test.go
@@ -0,0 +1,82 @@
+package dhcpv6
+
+import (
+ "net"
+ "testing"
+
+ "github.com/insomniacslk/dhcp/rfc1035label"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+func TestSuboptionSrvAddr(t *testing.T) {
+ ip := net.ParseIP("2a03:2880:fffe:c:face:b00c:0:35")
+ so := NTPSuboptionSrvAddr(ip)
+ assert.Equal(t, NTPSuboptionSrvAddrCode, so.Code())
+ expected := append([]byte{0x00, 0x01, 0x00, 0x10}, ip...)
+ assert.Equal(t, expected, so.ToBytes())
+}
+
+func TestSuboptionMCAddr(t *testing.T) {
+ ip := net.ParseIP("2a03:2880:fffe:c:face:b00c:0:35")
+ so := NTPSuboptionMCAddr(ip)
+ assert.Equal(t, NTPSuboptionMCAddrCode, so.Code())
+ expected := append([]byte{0x00, 0x02, 0x00, 0x10}, ip...)
+ assert.Equal(t, expected, so.ToBytes())
+}
+
+func TestSuboptionSrvFQDN(t *testing.T) {
+ fqdn, err := rfc1035label.FromBytes([]byte("\x03ntp\x07example\x03com"))
+ require.NoError(t, err)
+ so := NTPSuboptionSrvFQDN(*fqdn)
+ assert.Equal(t, NTPSuboptionSrvFQDNCode, so.Code())
+ expected := append([]byte{0x00, 0x03, 0x00, 0x10}, fqdn.ToBytes()...)
+ assert.Equal(t, expected, so.ToBytes())
+}
+
+func TestSuboptionGeneric(t *testing.T) {
+ data := []byte{
+ 0xff, 0xff, // unknown sub-option type
+ 0x00, 0x04, // length, 4 bytes
+ 0x74, 0x65, 0x73, 0x74, // the ASCII bytes for the string "test"
+ }
+ o, err := ParseOptNTPServer(data)
+ require.NoError(t, err)
+ require.Equal(t, 1, len(o.Suboptions))
+ assert.IsType(t, &OptionGeneric{}, o.Suboptions[0])
+ og := o.Suboptions[0].(*OptionGeneric)
+ assert.Equal(t, []byte("test"), og.ToBytes())
+}
+
+func TestParseOptNTPServer(t *testing.T) {
+ ip := net.ParseIP("2a03:2880:fffe:c:face:b00c:0:35")
+ fqdn, err := rfc1035label.FromBytes([]byte("\x03ntp\x07example\x03com"))
+ require.NoError(t, err)
+
+ // add server address sub-option
+ data := []byte{
+ 0x00, 0x01, // sub-option type
+ 0x00, 0x10, // length (16, IPv6 address)
+ }
+ data = append(data, []byte(ip)...)
+
+ // add server FQDN sub-option
+ data = append(data, []byte{
+ 0x00, 0x03, // sub-option type
+ 0x00, 0x10, // length (16, the FQDN "ntp.example.com." as rfc1035 label)
+ }...)
+ data = append(data, fqdn.ToBytes()...)
+
+ o, err := ParseOptNTPServer(data)
+ require.NoError(t, err)
+ require.NotNil(t, o)
+ assert.Equal(t, 2, len(o.Suboptions))
+
+ optAddr, ok := o.Suboptions[0].(*NTPSuboptionSrvAddr)
+ require.True(t, ok)
+ assert.Equal(t, ip, net.IP(*optAddr))
+
+ optFQDN, ok := o.Suboptions[1].(*NTPSuboptionSrvFQDN)
+ require.True(t, ok)
+ assert.Equal(t, *fqdn, rfc1035label.Labels(*optFQDN))
+}