summaryrefslogtreecommitdiffhomepage
path: root/dhcpv6/option_temporaryaddress_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'dhcpv6/option_temporaryaddress_test.go')
-rw-r--r--dhcpv6/option_temporaryaddress_test.go123
1 files changed, 123 insertions, 0 deletions
diff --git a/dhcpv6/option_temporaryaddress_test.go b/dhcpv6/option_temporaryaddress_test.go
new file mode 100644
index 0000000..de7fe39
--- /dev/null
+++ b/dhcpv6/option_temporaryaddress_test.go
@@ -0,0 +1,123 @@
+package dhcpv6
+
+import (
+ "net"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+)
+
+func TestOptIATAParseOptIATA(t *testing.T) {
+ data := []byte{
+ 1, 0, 0, 0, // IAID
+ 0, 5, 0, 0x18, 0x24, 1, 0xdb, 0, 0x30, 0x10, 0xc0, 0x8f, 0xfa, 0xce, 0, 0, 0, 0x44, 0, 0, 0, 0, 0xb2, 0x7a, 0, 0, 0xc0, 0x8a, // options
+ }
+ opt, err := ParseOptIATA(data)
+ require.NoError(t, err)
+ require.Equal(t, OptionIATA, opt.Code())
+}
+
+func TestOptIATAParseOptIATAInvalidLength(t *testing.T) {
+ data := []byte{
+ 1, 0, 0, // truncated IAID
+ }
+ _, err := ParseOptIATA(data)
+ require.Error(t, err)
+}
+
+func TestOptIATAParseOptIATAInvalidOptions(t *testing.T) {
+ data := []byte{
+ 1, 0, 0, 0, // IAID
+ 0, 5, 0, 0x18, 0x24, 1, 0xdb, 0, 0x30, 0x10, 0xc0, 0x8f, 0xfa, 0xce, 0, 0, 0, 0x44, 0, 0, 0, 0, 0xb2, 0x7a, // truncated options
+ }
+ _, err := ParseOptIATA(data)
+ require.Error(t, err)
+}
+
+func TestOptIATAGetOneOption(t *testing.T) {
+ oaddr := &OptIAAddress{
+ IPv6Addr: net.ParseIP("::1"),
+ }
+ opt := OptIATA{
+ Options: IdentityOptions{[]Option{&OptStatusCode{}, oaddr}},
+ }
+ require.Equal(t, oaddr, opt.Options.OneAddress())
+}
+
+func TestOptIATAAddOption(t *testing.T) {
+ opt := OptIATA{}
+ opt.Options.Add(OptElapsedTime(0))
+ require.Equal(t, 1, len(opt.Options.Options))
+ require.Equal(t, OptionElapsedTime, opt.Options.Options[0].Code())
+}
+
+func TestOptIATAGetOneOptionMissingOpt(t *testing.T) {
+ oaddr := &OptIAAddress{
+ IPv6Addr: net.ParseIP("::1"),
+ }
+ opt := OptIATA{
+ Options: IdentityOptions{[]Option{&OptStatusCode{}, oaddr}},
+ }
+ require.Equal(t, nil, opt.Options.GetOne(OptionDNSRecursiveNameServer))
+}
+
+func TestOptIATADelOption(t *testing.T) {
+ optiaaddr := OptIAAddress{}
+ optsc := OptStatusCode{}
+
+ iana1 := OptIATA{
+ Options: IdentityOptions{[]Option{
+ &optsc,
+ &optiaaddr,
+ &optiaaddr,
+ }},
+ }
+ iana1.Options.Del(OptionIAAddr)
+ require.Equal(t, iana1.Options.Options, Options{&optsc})
+
+ iana2 := OptIATA{
+ Options: IdentityOptions{[]Option{
+ &optiaaddr,
+ &optsc,
+ &optiaaddr,
+ }},
+ }
+ iana2.Options.Del(OptionIAAddr)
+ require.Equal(t, iana2.Options.Options, Options{&optsc})
+}
+
+func TestOptIATAToBytes(t *testing.T) {
+ opt := OptIATA{
+ IaId: [4]byte{1, 2, 3, 4},
+ Options: IdentityOptions{[]Option{
+ OptElapsedTime(10 * time.Millisecond),
+ }},
+ }
+ expected := []byte{
+ 1, 2, 3, 4, // IA ID
+ 0, 8, 0, 2, 0x00, 0x01,
+ }
+ require.Equal(t, expected, opt.ToBytes())
+}
+
+func TestOptIATAString(t *testing.T) {
+ data := []byte{
+ 1, 0, 0, 0, // IAID
+ 0, 5, 0, 0x18, 0x24, 1, 0xdb, 0, 0x30, 0x10, 0xc0, 0x8f, 0xfa, 0xce, 0, 0, 0, 0x44, 0, 0, 0, 0, 0xb2, 0x7a, 0, 0, 0xc0, 0x8a, // options
+ }
+ opt, err := ParseOptIATA(data)
+ require.NoError(t, err)
+
+ str := opt.String()
+ require.Contains(
+ t, str,
+ "IAID=[1 0 0 0]",
+ "String() should return the IAID",
+ )
+ require.Contains(
+ t, str,
+ "options={",
+ "String() should return a list of options",
+ )
+}