1 package netplan
2
3 import (
4 "net"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8
9 v1ien "edge-infra.dev/pkg/sds/ien/k8s/apis/v1"
10 )
11
12 func TestStaticRoutes(t *testing.T) {
13 const (
14 gw4In = "172.23.1.128"
15 gw4NotIn = "10.18.23.138"
16 addr4 = "172.23.1.129/16"
17 invalid = "invalid"
18 )
19 var (
20 wrkr = &v1ien.IENode{
21 Spec: v1ien.IENodeSpec{
22 Role: v1ien.Worker,
23 },
24 }
25 )
26 testCaseList := []struct {
27 iface v1ien.Network
28 ien *v1ien.IENode
29 expected []Route
30 err error
31 name string
32 gatewayEnabled bool
33 }{
34 {
35 iface: v1ien.Network{
36 Gateway4: gw4In,
37 Addresses: []string{addr4},
38 },
39 expected: []Route{{
40 To: "default",
41 Via: gw4In,
42 OnLink: false,
43 }},
44
45 err: nil,
46 name: "Gateway4 IP in subnet of one of the addresses",
47 ien: wrkr,
48 },
49 {
50 iface: v1ien.Network{
51 Gateway4: gw4NotIn,
52 Addresses: []string{addr4},
53 },
54 expected: []Route{{
55
56 To: "default",
57 Via: gw4NotIn,
58 OnLink: true,
59 }},
60 err: nil,
61 name: "Gateway4 IP NOT in subnet of any of the addresses",
62 ien: wrkr,
63 },
64 {
65 iface: v1ien.Network{
66 Gateway4: gw4NotIn,
67 Addresses: []string{},
68 },
69 expected: []Route{{
70 To: "default",
71 Via: gw4NotIn,
72 OnLink: true,
73 }},
74 err: nil,
75 name: "No addresses so implicitly no subnet match found for Gateway4 IP",
76 ien: wrkr,
77 },
78 {
79 iface: v1ien.Network{
80 Gateway4: gw4In,
81 Addresses: []string{addr4},
82 },
83 expected: []Route{{
84 To: "default",
85 Via: gw4In,
86 OnLink: false,
87 }},
88 gatewayEnabled: true,
89 err: nil,
90 name: "Is not gateway, but gateway is enabled",
91 ien: wrkr,
92 },
93 {
94 iface: v1ien.Network{
95 Gateway4: gw4In,
96 Addresses: []string{
97 invalid,
98 addr4,
99 },
100 },
101 err: &net.ParseError{Type: "CIDR address", Text: invalid},
102 name: "Invalid address",
103 ien: wrkr,
104 },
105 }
106 for _, testCase := range testCaseList {
107 actual, err := staticRoutes(testCase.iface)
108 if testCase.err != nil {
109 assert.Errorf(t, err, testCase.name)
110 assert.Equalf(t, err.Error(), testCase.err.Error(), testCase.name)
111 }
112 assert.Equalf(t, len(testCase.expected), len(actual), testCase.name)
113 assert.Equalf(t, testCase.expected, actual, testCase.name)
114 }
115 }
116
View as plain text