diff options
author | Chris Koch <chrisko@google.com> | 2023-02-24 21:39:24 -0800 |
---|---|---|
committer | Chris K <c@chrisko.ch> | 2023-02-27 10:35:19 -0800 |
commit | c063ce388b0632ce267a0ff9af24e186504ebcaa (patch) | |
tree | 1786dfeb50daf44bac4943c58044a21df8301a73 /dhcpv6/option_clientid_test.go | |
parent | 64b8c3dee967713689d8b65259d888af2076f1d9 (diff) |
New tests for ClientID & ServerID
Signed-off-by: Chris Koch <chrisko@google.com>
Diffstat (limited to 'dhcpv6/option_clientid_test.go')
-rw-r--r-- | dhcpv6/option_clientid_test.go | 160 |
1 files changed, 85 insertions, 75 deletions
diff --git a/dhcpv6/option_clientid_test.go b/dhcpv6/option_clientid_test.go index dd637ae..a80403a 100644 --- a/dhcpv6/option_clientid_test.go +++ b/dhcpv6/option_clientid_test.go @@ -1,78 +1,108 @@ package dhcpv6 import ( + "errors" + "fmt" "net" "reflect" "testing" + "github.com/google/go-cmp/cmp" "github.com/insomniacslk/dhcp/iana" "github.com/stretchr/testify/require" + "github.com/u-root/uio/uio" ) -func TestParseMessageOptionsWithClientID(t *testing.T) { - buf := []byte{ - 0, 1, // Client ID option - 0, 10, // length - 0, 3, // DUID_LL - 0, 1, // hwtype ethernet - 0, 1, 2, 3, 4, 5, // HW addr - } - - want := &DUIDLL{HWType: iana.HWTypeEthernet, LinkLayerAddr: net.HardwareAddr{0, 1, 2, 3, 4, 5}} - var mo MessageOptions - if err := mo.FromBytes(buf); err != nil { - t.Errorf("FromBytes = %v", err) - } else if got := mo.ClientID(); !reflect.DeepEqual(got, want) { - t.Errorf("ClientID = %v, want %v", got, want) +func TestClientIDParseAndGetter(t *testing.T) { + for i, tt := range []struct { + buf []byte + err error + want DUID + }{ + { + buf: []byte{ + 0, 1, // Client ID option + 0, 10, // length + 0, 3, // DUID_LL + 0, 1, // hwtype ethernet + 0, 1, 2, 3, 4, 5, // HW addr + }, + want: &DUIDLL{HWType: iana.HWTypeEthernet, LinkLayerAddr: net.HardwareAddr{0, 1, 2, 3, 4, 5}}, + }, + { + buf: nil, + want: nil, + }, + { + buf: []byte{0, 1, 0, 1, 0}, + want: nil, + err: uio.ErrBufferTooShort, + }, + } { + t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { + var mo MessageOptions + if err := mo.FromBytes(tt.buf); !errors.Is(err, tt.err) { + t.Errorf("FromBytes = %v, want %v", err, tt.err) + } + if got := mo.ClientID(); !reflect.DeepEqual(got, tt.want) { + t.Errorf("ClientID = %v, want %v", got, tt.want) + } + }) } } -func TestParseOptClientID(t *testing.T) { - data := []byte{ - 0, 3, // DUID_LL - 0, 1, // hwtype ethernet - 0, 1, 2, 3, 4, 5, // hw addr - } - var opt optClientID - err := opt.FromBytes(data) - require.NoError(t, err) - want := OptClientID( - &DUIDLL{ - HWType: iana.HWTypeEthernet, - LinkLayerAddr: net.HardwareAddr([]byte{0, 1, 2, 3, 4, 5}), +func TestClientID(t *testing.T) { + for i, tt := range []struct { + buf []byte + want optClientID + err error + }{ + { + buf: []byte{ + 0, 3, // DUID_LL + 0, 1, // hwtype ethernet + 0, 1, 2, 3, 4, 5, // hw addr + }, + want: optClientID{ + &DUIDLL{ + HWType: iana.HWTypeEthernet, + LinkLayerAddr: net.HardwareAddr([]byte{0, 1, 2, 3, 4, 5}), + }, + }, }, - ) - require.Equal(t, want, &opt) -} - -func TestOptClientIdToBytes(t *testing.T) { - opt := OptClientID( - &DUIDLL{ - HWType: iana.HWTypeEthernet, - LinkLayerAddr: net.HardwareAddr([]byte{5, 4, 3, 2, 1, 0}), + { + buf: []byte{0}, + err: uio.ErrBufferTooShort, }, - ) - expected := []byte{ - 0, 3, // DUID_LL - 0, 1, // hwtype ethernet - 5, 4, 3, 2, 1, 0, // hw addr - } - require.Equal(t, expected, opt.ToBytes()) -} + { + buf: []byte{0, 3, 0}, + err: uio.ErrBufferTooShort, + }, + { + buf: nil, + err: uio.ErrBufferTooShort, + }, + } { + t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { + var opt optClientID + if err := opt.FromBytes(tt.buf); !errors.Is(err, tt.err) { + t.Errorf("FromBytes = %v, want %v", err, tt.err) + } + if tt.err == nil { + if !reflect.DeepEqual(tt.want, opt) { + t.Errorf("FromBytes = %v, want %v", opt, tt.want) + } -func TestOptClientIdDecodeEncode(t *testing.T) { - data := []byte{ - 0, 3, // DUID_LL - 0, 1, // hwtype ethernet - 5, 4, 3, 2, 1, 0, // hw addr + out := tt.want.ToBytes() + if diff := cmp.Diff(tt.buf, out); diff != "" { + t.Errorf("ToBytes mismatch: (-want, +got):\n%s", diff) + } + } + }) } - var opt optClientID - err := opt.FromBytes(data) - require.NoError(t, err) - require.Equal(t, data, opt.ToBytes()) } -func TestOptionClientId(t *testing.T) { +func TestOptionClientIDString(t *testing.T) { opt := OptClientID( &DUIDLL{ HWType: iana.HWTypeEthernet, @@ -87,23 +117,3 @@ func TestOptionClientId(t *testing.T) { "String() should contain the correct cid output", ) } - -func TestOptClientIdparseOptClientIDBogusDUID(t *testing.T) { - data := []byte{ - 0, 4, // DUID_UUID - 1, 2, 3, 4, 5, 6, 7, 8, 9, // a UUID should be 18 bytes not 17 - 10, 11, 12, 13, 14, 15, 16, 17, - } - var opt optClientID - err := opt.FromBytes(data) - require.Error(t, err, "A truncated OptClientId DUID should return an error") -} - -func TestOptClientIdparseOptClientIDInvalidTooShort(t *testing.T) { - data := []byte{ - 0, // truncated: DUIDs are at least 2 bytes - } - var opt optClientID - err := opt.FromBytes(data) - require.Error(t, err, "A truncated OptClientId should return an error") -} |