summaryrefslogtreecommitdiffhomepage
path: root/dhcpv6/option_statuscode_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'dhcpv6/option_statuscode_test.go')
-rw-r--r--dhcpv6/option_statuscode_test.go82
1 files changed, 55 insertions, 27 deletions
diff --git a/dhcpv6/option_statuscode_test.go b/dhcpv6/option_statuscode_test.go
index 4582909..3c99e4f 100644
--- a/dhcpv6/option_statuscode_test.go
+++ b/dhcpv6/option_statuscode_test.go
@@ -1,41 +1,69 @@
package dhcpv6
import (
+ "errors"
+ "fmt"
+ "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 TestParseOptStatusCode(t *testing.T) {
- data := []byte{
- 0, 5, // StatusUseMulticast
- 'u', 's', 'e', ' ', 'm', 'u', 'l', 't', 'i', 'c', 'a', 's', 't',
- }
- var opt OptStatusCode
- err := opt.FromBytes(data)
- require.NoError(t, err)
- require.Equal(t, iana.StatusUseMulticast, opt.StatusCode)
- require.Equal(t, "use multicast", opt.StatusMessage)
-}
+func TestStatusCodeParseAndGetter(t *testing.T) {
+ for i, tt := range []struct {
+ buf []byte
+ err error
+ want *OptStatusCode
+ }{
+ {
+ buf: []byte{
+ 0, 13, // StatusCode option
+ 0, 15, // length
+ 0, 5, // StatusUseMulticast
+ 'u', 's', 'e', ' ', 'm', 'u', 'l', 't', 'i', 'c', 'a', 's', 't',
+ },
+ want: &OptStatusCode{
+ StatusCode: iana.StatusUseMulticast,
+ StatusMessage: "use multicast",
+ },
+ },
+ {
+ buf: nil,
+ want: nil,
+ },
+ {
+ buf: []byte{0, 13, 0, 1, 0},
+ want: nil,
+ err: uio.ErrBufferTooShort,
+ },
+ {
+ buf: []byte{0, 13, 0},
+ want: nil,
+ err: uio.ErrUnreadBytes,
+ },
+ } {
+ 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.Status(); !reflect.DeepEqual(got, tt.want) {
+ t.Errorf("Status = %v, want %v", got, tt.want)
+ }
-func TestOptStatusCodeToBytes(t *testing.T) {
- expected := []byte{
- 0, 0, // StatusSuccess
- 's', 'u', 'c', 'c', 'e', 's', 's',
- }
- opt := OptStatusCode{
- StatusCode: iana.StatusSuccess,
- StatusMessage: "success",
+ if tt.want != nil {
+ var m MessageOptions
+ m.Add(tt.want)
+ got := m.ToBytes()
+ if diff := cmp.Diff(tt.buf, got); diff != "" {
+ t.Errorf("ToBytes mismatch (-want, +got): %s", diff)
+ }
+ }
+ })
}
- actual := opt.ToBytes()
- require.Equal(t, expected, actual)
-}
-
-func TestOptStatusCodeParseOptStatusCodeTooShort(t *testing.T) {
- var opt OptStatusCode
- err := opt.FromBytes([]byte{0})
- require.Error(t, err, "ParseOptStatusCode: Expected error on truncated option")
}
func TestOptStatusCodeString(t *testing.T) {