summaryrefslogtreecommitdiffhomepage
path: root/dhcpv6/option_clientid_test.go
diff options
context:
space:
mode:
authorChris Koch <chrisko@google.com>2023-02-24 21:39:24 -0800
committerChris K <c@chrisko.ch>2023-02-27 10:35:19 -0800
commitc063ce388b0632ce267a0ff9af24e186504ebcaa (patch)
tree1786dfeb50daf44bac4943c58044a21df8301a73 /dhcpv6/option_clientid_test.go
parent64b8c3dee967713689d8b65259d888af2076f1d9 (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.go160
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")
-}