@@ -23,68 +23,75 @@ import (
23
23
"testing"
24
24
25
25
"k8s.io/kubernetes/pkg/proxy/ipvs"
26
- "k8s.io/kubernetes/pkg/util/iptables"
27
26
)
28
27
28
+ type fakeIPSetVersioner struct {
29
+ version string // what to return
30
+ err error // what to return
31
+ }
32
+
33
+ func (fake * fakeIPSetVersioner ) GetVersion () (string , error ) {
34
+ return fake .version , fake .err
35
+ }
36
+
37
+ type fakeKernelCompatTester struct {
38
+ ok bool
39
+ }
40
+
41
+ func (fake * fakeKernelCompatTester ) IsCompatible () error {
42
+ if ! fake .ok {
43
+ return fmt .Errorf ("error" )
44
+ }
45
+ return nil
46
+ }
47
+
48
+ // fakeKernelHandler implements KernelHandler.
49
+ type fakeKernelHandler struct {
50
+ modules []string
51
+ kernelVersion string
52
+ }
53
+
54
+ func (fake * fakeKernelHandler ) GetModules () ([]string , error ) {
55
+ return fake .modules , nil
56
+ }
57
+
58
+ func (fake * fakeKernelHandler ) GetKernelVersion () (string , error ) {
59
+ return fake .kernelVersion , nil
60
+ }
61
+
29
62
func Test_getProxyMode (t * testing.T ) {
30
63
var cases = []struct {
31
- flag string
32
- iptablesVersion string
33
- ipsetVersion string
34
- kmods []string
35
- kernelVersion string
36
- kernelCompat bool
37
- iptablesError error
38
- ipsetError error
39
- expected string
64
+ flag string
65
+ ipsetVersion string
66
+ kmods []string
67
+ kernelVersion string
68
+ kernelCompat bool
69
+ ipsetError error
70
+ expected string
40
71
}{
41
72
{ // flag says userspace
42
73
flag : "userspace" ,
43
74
expected : proxyModeUserspace ,
44
75
},
45
- { // flag says iptables, error detecting version
46
- flag : "iptables" ,
47
- iptablesError : fmt .Errorf ("flag says iptables, error detecting version" ),
48
- expected : proxyModeUserspace ,
49
- },
50
- { // flag says iptables, version too low
51
- flag : "iptables" ,
52
- iptablesVersion : "0.0.0" ,
53
- expected : proxyModeUserspace ,
76
+ { // flag says iptables, kernel not compatible
77
+ flag : "iptables" ,
78
+ kernelCompat : false ,
79
+ expected : proxyModeUserspace ,
54
80
},
55
- { // flag says iptables, version ok, kernel not compatible
56
- flag : "iptables" ,
57
- iptablesVersion : iptables .MinCheckVersion ,
58
- kernelCompat : false ,
59
- expected : proxyModeUserspace ,
81
+ { // flag says iptables, kernel is compatible
82
+ flag : "iptables" ,
83
+ kernelCompat : true ,
84
+ expected : proxyModeIPTables ,
60
85
},
61
- { // flag says iptables, version ok, kernel is compatible
62
- flag : "iptables" ,
63
- iptablesVersion : iptables .MinCheckVersion ,
64
- kernelCompat : true ,
65
- expected : proxyModeIPTables ,
86
+ { // detect, kernel not compatible
87
+ flag : "" ,
88
+ kernelCompat : false ,
89
+ expected : proxyModeUserspace ,
66
90
},
67
- { // detect, error
68
- flag : "" ,
69
- iptablesError : fmt .Errorf ("oops" ),
70
- expected : proxyModeUserspace ,
71
- },
72
- { // detect, version too low
73
- flag : "" ,
74
- iptablesVersion : "0.0.0" ,
75
- expected : proxyModeUserspace ,
76
- },
77
- { // detect, version ok, kernel not compatible
78
- flag : "" ,
79
- iptablesVersion : iptables .MinCheckVersion ,
80
- kernelCompat : false ,
81
- expected : proxyModeUserspace ,
82
- },
83
- { // detect, version ok, kernel is compatible
84
- flag : "" ,
85
- iptablesVersion : iptables .MinCheckVersion ,
86
- kernelCompat : true ,
87
- expected : proxyModeIPTables ,
91
+ { // detect, kernel is compatible
92
+ flag : "" ,
93
+ kernelCompat : true ,
94
+ expected : proxyModeIPTables ,
88
95
},
89
96
{ // flag says ipvs, ipset version ok, kernel modules installed for linux kernel before 4.19
90
97
flag : "ipvs" ,
@@ -101,69 +108,38 @@ func Test_getProxyMode(t *testing.T) {
101
108
expected : proxyModeIPVS ,
102
109
},
103
110
{ // flag says ipvs, ipset version too low, fallback on iptables mode
104
- flag : "ipvs" ,
105
- kmods : []string {"ip_vs" , "ip_vs_rr" , "ip_vs_wrr" , "ip_vs_sh" , "nf_conntrack" },
106
- kernelVersion : "4.19" ,
107
- ipsetVersion : "0.0" ,
108
- iptablesVersion : iptables .MinCheckVersion ,
109
- kernelCompat : true ,
110
- expected : proxyModeIPTables ,
111
+ flag : "ipvs" ,
112
+ kmods : []string {"ip_vs" , "ip_vs_rr" , "ip_vs_wrr" , "ip_vs_sh" , "nf_conntrack" },
113
+ kernelVersion : "4.19" ,
114
+ ipsetVersion : "0.0" ,
115
+ kernelCompat : true ,
116
+ expected : proxyModeIPTables ,
111
117
},
112
118
{ // flag says ipvs, bad ipset version, fallback on iptables mode
113
- flag : "ipvs" ,
114
- kmods : []string {"ip_vs" , "ip_vs_rr" , "ip_vs_wrr" , "ip_vs_sh" , "nf_conntrack" },
115
- kernelVersion : "4.19" ,
116
- ipsetVersion : "a.b.c" ,
117
- iptablesVersion : iptables .MinCheckVersion ,
118
- kernelCompat : true ,
119
- expected : proxyModeIPTables ,
119
+ flag : "ipvs" ,
120
+ kmods : []string {"ip_vs" , "ip_vs_rr" , "ip_vs_wrr" , "ip_vs_sh" , "nf_conntrack" },
121
+ kernelVersion : "4.19" ,
122
+ ipsetVersion : "a.b.c" ,
123
+ kernelCompat : true ,
124
+ expected : proxyModeIPTables ,
120
125
},
121
126
{ // flag says ipvs, required kernel modules are not installed, fallback on iptables mode
122
- flag : "ipvs" ,
123
- kmods : []string {"foo" , "bar" , "baz" },
124
- kernelVersion : "4.19" ,
125
- ipsetVersion : ipvs .MinIPSetCheckVersion ,
126
- iptablesVersion : iptables .MinCheckVersion ,
127
- kernelCompat : true ,
128
- expected : proxyModeIPTables ,
129
- },
130
- { // flag says ipvs, required kernel modules are not installed, iptables version too old, fallback on userspace mode
131
- flag : "ipvs" ,
132
- kmods : []string {"foo" , "bar" , "baz" },
133
- kernelVersion : "4.19" ,
134
- ipsetVersion : ipvs .MinIPSetCheckVersion ,
135
- iptablesVersion : "0.0.0" ,
136
- kernelCompat : true ,
137
- expected : proxyModeUserspace ,
138
- },
139
- { // flag says ipvs, required kernel modules are not installed, iptables version too old, fallback on userspace mode
140
- flag : "ipvs" ,
141
- kmods : []string {"foo" , "bar" , "baz" },
142
- kernelVersion : "4.19" ,
143
- ipsetVersion : ipvs .MinIPSetCheckVersion ,
144
- iptablesVersion : "0.0.0" ,
145
- kernelCompat : true ,
146
- expected : proxyModeUserspace ,
147
- },
148
- { // flag says ipvs, ipset version too low, iptables version too old, kernel not compatible, fallback on userspace mode
149
- flag : "ipvs" ,
150
- kmods : []string {"ip_vs" , "ip_vs_rr" , "ip_vs_wrr" , "ip_vs_sh" , "nf_conntrack" },
151
- kernelVersion : "4.19" ,
152
- ipsetVersion : "0.0" ,
153
- iptablesVersion : iptables .MinCheckVersion ,
154
- kernelCompat : false ,
155
- expected : proxyModeUserspace ,
127
+ flag : "ipvs" ,
128
+ kmods : []string {"foo" , "bar" , "baz" },
129
+ kernelVersion : "4.19" ,
130
+ ipsetVersion : ipvs .MinIPSetCheckVersion ,
131
+ kernelCompat : true ,
132
+ expected : proxyModeIPTables ,
156
133
},
157
134
}
158
135
for i , c := range cases {
159
- versioner := & fakeIPTablesVersioner {c .iptablesVersion , c .iptablesError }
160
136
kcompater := & fakeKernelCompatTester {c .kernelCompat }
161
137
ipsetver := & fakeIPSetVersioner {c .ipsetVersion , c .ipsetError }
162
138
khandler := & fakeKernelHandler {
163
139
modules : c .kmods ,
164
140
kernelVersion : c .kernelVersion ,
165
141
}
166
- r := getProxyMode (c .flag , versioner , khandler , ipsetver , kcompater )
142
+ r := getProxyMode (c .flag , khandler , ipsetver , kcompater )
167
143
if r != c .expected {
168
144
t .Errorf ("Case[%d] Expected %q, got %q" , i , c .expected , r )
169
145
}
0 commit comments