@@ -21,11 +21,14 @@ import (
21
21
"io/ioutil"
22
22
"net"
23
23
"os"
24
+ "reflect"
24
25
"testing"
25
26
26
27
"github.com/containers/virtcontainers/pkg/mock"
27
28
gpb "github.com/gogo/protobuf/types"
28
29
pb "github.com/kata-containers/agent/protocols/grpc"
30
+ "github.com/stretchr/testify/assert"
31
+ "github.com/vishvananda/netlink"
29
32
"golang.org/x/net/context"
30
33
"google.golang.org/grpc"
31
34
)
@@ -170,24 +173,20 @@ func (p *gRPCProxy) DestroySandbox(ctx context.Context, req *pb.DestroySandboxRe
170
173
return emptyResp , nil
171
174
}
172
175
173
- func (p * gRPCProxy ) AddInterface (ctx context.Context , req * pb.AddInterfaceRequest ) (* gpb. Empty , error ) {
174
- return emptyResp , nil
176
+ func (p * gRPCProxy ) AddInterface (ctx context.Context , req * pb.AddInterfaceRequest ) (* pb. Interface , error ) {
177
+ return nil , nil
175
178
}
176
179
177
- func (p * gRPCProxy ) RemoveInterface (ctx context.Context , req * pb.RemoveInterfaceRequest ) (* gpb. Empty , error ) {
178
- return emptyResp , nil
180
+ func (p * gRPCProxy ) RemoveInterface (ctx context.Context , req * pb.RemoveInterfaceRequest ) (* pb. Interface , error ) {
181
+ return nil , nil
179
182
}
180
183
181
- func (p * gRPCProxy ) UpdateInterface (ctx context.Context , req * pb.UpdateInterfaceRequest ) (* gpb. Empty , error ) {
182
- return emptyResp , nil
184
+ func (p * gRPCProxy ) UpdateInterface (ctx context.Context , req * pb.UpdateInterfaceRequest ) (* pb. Interface , error ) {
185
+ return nil , nil
183
186
}
184
187
185
- func (p * gRPCProxy ) AddRoute (ctx context.Context , req * pb.RouteRequest ) (* gpb.Empty , error ) {
186
- return emptyResp , nil
187
- }
188
-
189
- func (p * gRPCProxy ) RemoveRoute (ctx context.Context , req * pb.RouteRequest ) (* gpb.Empty , error ) {
190
- return emptyResp , nil
188
+ func (p * gRPCProxy ) UpdateRoutes (ctx context.Context , req * pb.UpdateRoutesRequest ) (* pb.Routes , error ) {
189
+ return nil , nil
191
190
}
192
191
193
192
func (p * gRPCProxy ) OnlineCPUMem (ctx context.Context , req * pb.OnlineCPUMemRequest ) (* gpb.Empty , error ) {
@@ -243,3 +242,97 @@ func TestKataAgentSendReq(t *testing.T) {
243
242
}
244
243
}
245
244
}
245
+
246
+ func TestGenerateInterfacesAndRoutes (t * testing.T ) {
247
+
248
+ impl := & gRPCProxy {}
249
+
250
+ proxy := mock.ProxyGRPCMock {
251
+ GRPCImplementer : impl ,
252
+ GRPCRegister : gRPCRegister ,
253
+ }
254
+
255
+ sockDir , err := testGenerateKataProxySockDir ()
256
+ if err != nil {
257
+ t .Fatal (err )
258
+ }
259
+ defer os .RemoveAll (sockDir )
260
+
261
+ testKataProxyURL := fmt .Sprintf (testKataProxyURLTempl , sockDir )
262
+ if err := proxy .Start (testKataProxyURL ); err != nil {
263
+ t .Fatal (err )
264
+ }
265
+ defer proxy .Stop ()
266
+
267
+ k := & kataAgent {
268
+ state : KataAgentState {
269
+ URL : testKataProxyURL ,
270
+ },
271
+ }
272
+
273
+ //
274
+ //Create a couple of addresses
275
+ //
276
+ address1 := & net.IPNet {IP : net .IPv4 (172 , 17 , 0 , 2 ), Mask : net .CIDRMask (16 , 32 )}
277
+ address2 := & net.IPNet {IP : net .IPv4 (182 , 17 , 0 , 2 ), Mask : net .CIDRMask (16 , 32 )}
278
+
279
+ addrs := []netlink.Addr {
280
+ {IPNet : address1 , Label : "phyaddr1" },
281
+ {IPNet : address2 , Label : "phyaddr2" },
282
+ }
283
+
284
+ // Create a couple of routes:
285
+ dst2 := & net.IPNet {IP : net .IPv4 (172 , 17 , 0 , 0 ), Mask : net .CIDRMask (16 , 32 )}
286
+ src2 := net .IPv4 (172 , 17 , 0 , 2 )
287
+ gw2 := net .IPv4 (172 , 17 , 0 , 1 )
288
+
289
+ routes := []netlink.Route {
290
+ {LinkIndex : 329 , Dst : nil , Src : nil , Gw : net .IPv4 (172 , 17 , 0 , 1 ), Scope : netlink .Scope (254 )},
291
+ {LinkIndex : 329 , Dst : dst2 , Src : src2 , Gw : gw2 },
292
+ }
293
+
294
+ networkInfo := NetworkInfo {
295
+ Iface : NetlinkIface {
296
+ LinkAttrs : netlink.LinkAttrs {MTU : 1500 },
297
+ Type : "" ,
298
+ },
299
+ Addrs : addrs ,
300
+ Routes : routes ,
301
+ }
302
+
303
+ ep0 := & PhysicalEndpoint {
304
+ IfaceName : "eth0" ,
305
+ HardAddr : net.HardwareAddr {0x02 , 0x00 , 0xca , 0xfe , 0x00 , 0x04 }.String (),
306
+ EndpointProperties : networkInfo ,
307
+ }
308
+
309
+ endpoints := []Endpoint {ep0 }
310
+
311
+ nns := NetworkNamespace {NetNsPath : "foobar" , NetNsCreated : true , Endpoints : endpoints }
312
+
313
+ resInterfaces , resRoutes , err := k .generateInterfacesAndRoutes (nns )
314
+
315
+ //
316
+ // Build expected results:
317
+ //
318
+ expectedAddresses := []* pb.IPAddress {
319
+ {Family : 0 , Address : "172.17.0.2" , Mask : "16" },
320
+ {Family : 0 , Address : "182.17.0.2" , Mask : "16" },
321
+ }
322
+
323
+ expectedInterfaces := []* pb.Interface {
324
+ {Device : "eth0" , Name : "eth0" , IPAddresses : expectedAddresses , Mtu : 1500 , HwAddr : "02:00:ca:fe:00:04" },
325
+ }
326
+
327
+ expectedRoutes := []* pb.Route {
328
+ {Dest : "" , Gateway : "172.17.0.1" , Device : "eth0" , Source : "" , Scope : uint32 (254 )},
329
+ {Dest : "172.17.0.0/16" , Gateway : "172.17.0.1" , Device : "eth0" , Source : "172.17.0.2" },
330
+ }
331
+
332
+ assert .Nil (t , err , "unexpected failure when calling generateKataInterfacesAndRoutes" )
333
+ assert .True (t , reflect .DeepEqual (resInterfaces , expectedInterfaces ),
334
+ "Interfaces returned didn't match: got %+v, expecting %+v" , resInterfaces , expectedInterfaces )
335
+ assert .True (t , reflect .DeepEqual (resRoutes , expectedRoutes ),
336
+ "Routes returned didn't match: got %+v, expecting %+v" , resRoutes , expectedRoutes )
337
+
338
+ }
0 commit comments