diff options
-rw-r--r-- | dhcpv6/option_interfaceid_test.go | 64 |
1 files changed, 49 insertions, 15 deletions
diff --git a/dhcpv6/option_interfaceid_test.go b/dhcpv6/option_interfaceid_test.go index b38cadb..640c06a 100644 --- a/dhcpv6/option_interfaceid_test.go +++ b/dhcpv6/option_interfaceid_test.go @@ -1,30 +1,64 @@ package dhcpv6 import ( - "bytes" + "errors" + "fmt" + "reflect" "testing" + "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/require" + "github.com/u-root/uio/uio" ) -func TestParseOptInterfaceID(t *testing.T) { - expected := []byte("DSLAM01 eth2/1/01/21") - var opt optInterfaceID - if err := opt.FromBytes(expected); err != nil { - t.Fatal(err) - } - if url := opt.ID; !bytes.Equal(url, expected) { - t.Fatalf("Invalid Interface ID. Expected %v, got %v", expected, url) +func TestInterfaceIDParseAndGetter(t *testing.T) { + for i, tt := range []struct { + buf []byte + err error + want []byte + }{ + { + buf: []byte{ + 0, 18, // Interface ID + 0, 4, // length + 'S', 'L', 'A', 'M', + }, + want: []byte("SLAM"), + }, + { + buf: []byte{ + 0, 18, + 0, 0, + }, + }, + { + buf: []byte{0, 18, 0}, + err: uio.ErrUnreadBytes, + }, + } { + t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { + var ro RelayOptions + if err := ro.FromBytes(tt.buf); !errors.Is(err, tt.err) { + t.Errorf("FromBytes = %v, want %v", err, tt.err) + } + if got := ro.InterfaceID(); !reflect.DeepEqual(got, tt.want) { + t.Errorf("InterfaceID = %v, want %v", got, tt.want) + } + + if tt.want != nil { + var m RelayOptions + m.Add(OptInterfaceID(tt.want)) + got := m.ToBytes() + if diff := cmp.Diff(tt.buf, got); diff != "" { + t.Errorf("ToBytes mismatch (-want, +got): %s", diff) + } + } + }) } } func TestOptInterfaceID(t *testing.T) { - want := []byte("DSLAM01 eth2/1/01/21") - opt := OptInterfaceID(want) - if got := opt.ToBytes(); !bytes.Equal(got, want) { - t.Fatalf("%s.ToBytes() = %v, want %v", opt, got, want) - } - + opt := OptInterfaceID([]byte("DSLAM01 eth2/1/01/21")) require.Contains( t, opt.String(), |