Skip to content

Commit 866b008

Browse files
committed
test(internal/linkstatus): add unit testing for link status
1 parent 3d4e206 commit 866b008

1 file changed

Lines changed: 140 additions & 0 deletions

File tree

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
package linkstatus
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
7+
"golang.org/x/sys/unix"
8+
)
9+
10+
func TestTypes_String(t *testing.T) {
11+
tests := []struct {
12+
name string
13+
in Types
14+
want string
15+
}{
16+
{"Unknown", Unknown, "linkstatus_unknown"},
17+
{"AdminUp", AdminUp, "linkstatus_adminup"},
18+
{"AdminDown", AdminDown, "linkstatus_admindown"},
19+
{"CarrierUp", CarrierUp, "linkstatus_carrierup"},
20+
{"CarrierDown", CarrierDown, "linkstatus_carrierdown"},
21+
}
22+
23+
for _, tt := range tests {
24+
t.Run(tt.name, func(t *testing.T) {
25+
if got := tt.in.String(); got != tt.want {
26+
t.Fatalf("String() = %q, want %q", got, tt.want)
27+
}
28+
})
29+
}
30+
}
31+
32+
func TestChanged(t *testing.T) {
33+
tests := []struct {
34+
name string
35+
flags uint32
36+
change uint32
37+
want []Types
38+
}{
39+
{
40+
name: "no_change",
41+
flags: 0,
42+
change: 0,
43+
want: nil,
44+
},
45+
{
46+
name: "admin_up",
47+
flags: unix.IFF_UP,
48+
change: unix.IFF_UP,
49+
want: []Types{AdminUp},
50+
},
51+
{
52+
name: "admin_down",
53+
flags: 0,
54+
change: unix.IFF_UP,
55+
want: []Types{AdminDown},
56+
},
57+
{
58+
name: "carrier_up",
59+
flags: unix.IFF_LOWER_UP,
60+
change: unix.IFF_LOWER_UP,
61+
want: []Types{CarrierUp},
62+
},
63+
{
64+
name: "carrier_down",
65+
flags: 0,
66+
change: unix.IFF_LOWER_UP,
67+
want: []Types{CarrierDown},
68+
},
69+
{
70+
name: "admin_and_carrier_up",
71+
flags: unix.IFF_UP | unix.IFF_LOWER_UP,
72+
change: unix.IFF_UP | unix.IFF_LOWER_UP,
73+
want: []Types{AdminUp, CarrierUp},
74+
},
75+
{
76+
name: "admin_down_carrier_up",
77+
flags: unix.IFF_LOWER_UP,
78+
change: unix.IFF_UP | unix.IFF_LOWER_UP,
79+
want: []Types{AdminDown, CarrierUp},
80+
},
81+
{
82+
name: "ignore_irrelevant_change_bits",
83+
flags: 0,
84+
change: unix.IFF_PROMISC,
85+
want: nil,
86+
},
87+
}
88+
89+
for _, tt := range tests {
90+
t.Run(tt.name, func(t *testing.T) {
91+
got := Changed(tt.flags, tt.change)
92+
if !reflect.DeepEqual(got, tt.want) {
93+
t.Fatalf("Changed(%#x, %#x) = %#v, want %#v", tt.flags, tt.change, got, tt.want)
94+
}
95+
})
96+
}
97+
}
98+
99+
func TestFlagsRaw(t *testing.T) {
100+
tests := []struct {
101+
name string
102+
flags uint32
103+
want []string
104+
}{
105+
{
106+
name: "invalid_zero",
107+
flags: 0,
108+
want: []string{"unknown"},
109+
},
110+
{
111+
name: "admin_up_carrier_up",
112+
flags: unix.IFF_UP | unix.IFF_LOWER_UP,
113+
want: []string{"linkstatus_adminup", "linkstatus_carrierup"},
114+
},
115+
{
116+
name: "admin_down_carrier_down",
117+
flags: unix.IFF_BROADCAST, // 非 0,且不含 IFF_UP/IFF_LOWER_UP
118+
want: []string{"linkstatus_admindown", "linkstatus_carrierdown"},
119+
},
120+
{
121+
name: "admin_up_carrier_down",
122+
flags: unix.IFF_UP,
123+
want: []string{"linkstatus_adminup", "linkstatus_carrierdown"},
124+
},
125+
{
126+
name: "admin_down_carrier_up",
127+
flags: unix.IFF_LOWER_UP,
128+
want: []string{"linkstatus_admindown", "linkstatus_carrierup"},
129+
},
130+
}
131+
132+
for _, tt := range tests {
133+
t.Run(tt.name, func(t *testing.T) {
134+
got := FlagsRaw(tt.flags)
135+
if !reflect.DeepEqual(got, tt.want) {
136+
t.Fatalf("FlagsRaw(%#x) = %#v, want %#v", tt.flags, got, tt.want)
137+
}
138+
})
139+
}
140+
}

0 commit comments

Comments
 (0)