1// Copyright 2016 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package route
6
7import (
8	"reflect"
9	"testing"
10)
11
12type parseAddrsOnDarwinTest struct {
13	attrs uint
14	fn    func(int, []byte) (int, Addr, error)
15	b     []byte
16	as    []Addr
17}
18
19var parseAddrsOnDarwinLittleEndianTests = []parseAddrsOnDarwinTest{
20	{
21		sysRTA_DST | sysRTA_GATEWAY | sysRTA_NETMASK,
22		parseKernelInetAddr,
23		[]byte{
24			0x10, 0x2, 0x0, 0x0, 0xc0, 0xa8, 0x56, 0x0,
25			0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
26
27			0x14, 0x12, 0x4, 0x0, 0x6, 0x0, 0x0, 0x0,
28			0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
29			0x0, 0x0, 0x0, 0x0,
30
31			0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
32		},
33		[]Addr{
34			&Inet4Addr{IP: [4]byte{192, 168, 86, 0}},
35			&LinkAddr{Index: 4},
36			&Inet4Addr{IP: [4]byte{255, 255, 255, 255}},
37			nil,
38			nil,
39			nil,
40			nil,
41			nil,
42		},
43	},
44}
45
46func TestParseAddrsOnDarwin(t *testing.T) {
47	tests := parseAddrsOnDarwinLittleEndianTests
48	if nativeEndian != littleEndian {
49		t.Skip("no test for non-little endian machine yet")
50	}
51
52	for i, tt := range tests {
53		as, err := parseAddrs(tt.attrs, tt.fn, tt.b)
54		if err != nil {
55			t.Error(i, err)
56			continue
57		}
58		if !reflect.DeepEqual(as, tt.as) {
59			t.Errorf("#%d: got %+v; want %+v", i, as, tt.as)
60			continue
61		}
62	}
63}
64