mirror of
https://github.com/aljazceru/kata-containers.git
synced 2025-12-27 02:54:27 +01:00
Files are copied over gRPC and there is no limit in size of the files that can be copied. Small files are copied using just one gRPC call while big files are copied by parts. Signed-off-by: Julio Montes <julio.montes@intel.com>
272 lines
5.5 KiB
Go
272 lines
5.5 KiB
Go
// Copyright (c) 2016 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
package virtcontainers
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/kata-containers/runtime/virtcontainers/pkg/hyperstart"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/vishvananda/netlink"
|
|
)
|
|
|
|
var testRouteDest = "192.168.10.1/32"
|
|
var testRouteGateway = "192.168.0.0"
|
|
var testRouteDeviceName = "test_eth0"
|
|
var testRouteDestIPv6 = "2001:db8::/32"
|
|
|
|
func TestHyperstartGenerateSocketsSuccessful(t *testing.T) {
|
|
config := HyperConfig{
|
|
SockCtlName: "ctlSock",
|
|
SockTtyName: "ttySock",
|
|
}
|
|
|
|
sandbox := &Sandbox{
|
|
id: testSandboxID,
|
|
}
|
|
|
|
h := &hyper{}
|
|
|
|
h.generateSockets(sandbox, config)
|
|
|
|
expectedSockets := []Socket{
|
|
{
|
|
DeviceID: fmt.Sprintf(defaultDeviceIDTemplate, 0),
|
|
ID: fmt.Sprintf(defaultIDTemplate, 0),
|
|
HostPath: config.SockCtlName,
|
|
Name: fmt.Sprintf(defaultChannelTemplate, 0),
|
|
},
|
|
{
|
|
DeviceID: fmt.Sprintf(defaultDeviceIDTemplate, 1),
|
|
ID: fmt.Sprintf(defaultIDTemplate, 1),
|
|
HostPath: config.SockTtyName,
|
|
Name: fmt.Sprintf(defaultChannelTemplate, 1),
|
|
},
|
|
}
|
|
|
|
if !reflect.DeepEqual(expectedSockets, h.sockets) {
|
|
t.Fatalf("Expecting %+v, Got %+v", expectedSockets, h.sockets)
|
|
}
|
|
}
|
|
|
|
func TestHyperstartGenerateSocketsSuccessfulNoPathProvided(t *testing.T) {
|
|
config := HyperConfig{}
|
|
|
|
sandbox := &Sandbox{
|
|
id: testSandboxID,
|
|
}
|
|
|
|
h := &hyper{}
|
|
|
|
h.generateSockets(sandbox, config)
|
|
|
|
expectedSockets := []Socket{
|
|
{
|
|
DeviceID: fmt.Sprintf(defaultDeviceIDTemplate, 0),
|
|
ID: fmt.Sprintf(defaultIDTemplate, 0),
|
|
HostPath: fmt.Sprintf(defaultSockPathTemplates[0], runStoragePath, sandbox.id),
|
|
Name: fmt.Sprintf(defaultChannelTemplate, 0),
|
|
},
|
|
{
|
|
DeviceID: fmt.Sprintf(defaultDeviceIDTemplate, 1),
|
|
ID: fmt.Sprintf(defaultIDTemplate, 1),
|
|
HostPath: fmt.Sprintf(defaultSockPathTemplates[1], runStoragePath, sandbox.id),
|
|
Name: fmt.Sprintf(defaultChannelTemplate, 1),
|
|
},
|
|
}
|
|
|
|
if !reflect.DeepEqual(expectedSockets, h.sockets) {
|
|
t.Fatalf("Expecting %+v, Got %+v", expectedSockets, h.sockets)
|
|
}
|
|
}
|
|
|
|
func testProcessHyperRoute(t *testing.T, route netlink.Route, deviceName string, expected *hyperstart.Route) {
|
|
h := &hyper{}
|
|
hyperRoute := h.processHyperRoute(route, deviceName)
|
|
|
|
if expected == nil {
|
|
if hyperRoute != nil {
|
|
t.Fatalf("Expecting route to be nil, Got %+v", hyperRoute)
|
|
} else {
|
|
return
|
|
}
|
|
}
|
|
|
|
// At this point, we know that "expected" != nil.
|
|
if !reflect.DeepEqual(*expected, *hyperRoute) {
|
|
t.Fatalf("Expecting %+v, Got %+v", *expected, *hyperRoute)
|
|
}
|
|
}
|
|
|
|
func TestProcessHyperRouteEmptyGWSuccessful(t *testing.T) {
|
|
expected := &hyperstart.Route{
|
|
Dest: testRouteDest,
|
|
Gateway: "",
|
|
Device: testRouteDeviceName,
|
|
}
|
|
|
|
_, dest, err := net.ParseCIDR(testRouteDest)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
route := netlink.Route{
|
|
Dst: dest,
|
|
Gw: net.IP{},
|
|
}
|
|
|
|
testProcessHyperRoute(t, route, testRouteDeviceName, expected)
|
|
}
|
|
|
|
func TestProcessHyperRouteEmptyDestSuccessful(t *testing.T) {
|
|
expected := &hyperstart.Route{
|
|
Dest: defaultRouteLabel,
|
|
Gateway: testRouteGateway,
|
|
Device: testRouteDeviceName,
|
|
}
|
|
|
|
_, dest, err := net.ParseCIDR(defaultRouteDest)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
route := netlink.Route{
|
|
Dst: dest,
|
|
Gw: net.ParseIP(testRouteGateway),
|
|
}
|
|
|
|
testProcessHyperRoute(t, route, testRouteDeviceName, expected)
|
|
}
|
|
|
|
func TestProcessHyperRouteDestIPv6Failure(t *testing.T) {
|
|
_, dest, err := net.ParseCIDR(testRouteDestIPv6)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
route := netlink.Route{
|
|
Dst: dest,
|
|
Gw: net.IP{},
|
|
}
|
|
|
|
testProcessHyperRoute(t, route, testRouteDeviceName, nil)
|
|
}
|
|
|
|
func TestHyperPathAPI(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
h1 := &hyper{}
|
|
h2 := &hyper{}
|
|
id := "foobar"
|
|
|
|
// getVMPath
|
|
path1 := h1.getVMPath(id)
|
|
path2 := h2.getVMPath(id)
|
|
assert.Equal(path1, path2)
|
|
|
|
// getSharePath
|
|
path1 = h1.getSharePath(id)
|
|
path2 = h2.getSharePath(id)
|
|
assert.Equal(path1, path2)
|
|
}
|
|
|
|
func TestHyperConfigure(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
dir, err := ioutil.TempDir("", "hyperstart-test")
|
|
assert.Nil(err)
|
|
|
|
h := &hyper{}
|
|
m := &mockHypervisor{}
|
|
c := HyperConfig{}
|
|
id := "foobar"
|
|
|
|
invalidAgent := KataAgentConfig{}
|
|
err = h.configure(m, id, dir, true, invalidAgent)
|
|
assert.Nil(err)
|
|
|
|
err = h.configure(m, id, dir, true, c)
|
|
assert.Nil(err)
|
|
|
|
err = h.configure(m, id, dir, false, c)
|
|
assert.Nil(err)
|
|
}
|
|
|
|
func TestHyperReseedAPI(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
h := &hyper{}
|
|
err := h.reseedRNG([]byte{})
|
|
assert.Nil(err)
|
|
}
|
|
|
|
func TestHyperUpdateInterface(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
h := &hyper{}
|
|
_, err := h.updateInterface(nil)
|
|
assert.Nil(err)
|
|
}
|
|
|
|
func TestHyperListInterfaces(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
h := &hyper{}
|
|
_, err := h.listInterfaces()
|
|
assert.Nil(err)
|
|
}
|
|
|
|
func TestHyperUpdateRoutes(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
h := &hyper{}
|
|
_, err := h.updateRoutes(nil)
|
|
assert.Nil(err)
|
|
}
|
|
|
|
func TestHyperListRoutes(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
h := &hyper{}
|
|
_, err := h.listRoutes()
|
|
assert.Nil(err)
|
|
}
|
|
|
|
func TestHyperSetProxy(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
h := &hyper{}
|
|
p := &ccProxy{}
|
|
s := &Sandbox{storage: &filesystem{}}
|
|
|
|
err := h.setProxy(s, p, 0, "")
|
|
assert.Error(err)
|
|
|
|
err = h.setProxy(s, p, 0, "foobar")
|
|
assert.Error(err)
|
|
}
|
|
|
|
func TestHyperGetAgentUrl(t *testing.T) {
|
|
assert := assert.New(t)
|
|
h := &hyper{}
|
|
|
|
url, err := h.getAgentURL()
|
|
assert.Nil(err)
|
|
assert.Empty(url)
|
|
}
|
|
|
|
func TestHyperCopyFile(t *testing.T) {
|
|
assert := assert.New(t)
|
|
h := &hyper{}
|
|
|
|
err := h.copyFile("", "")
|
|
assert.Nil(err)
|
|
}
|