sandbox/virtcontainers: modify tests relate to memory hotplug.

Signed-off-by: Clare Chen <clare.chenhui@huawei.com>
Signed-off-by: Zichang Lin <linzichang@huawei.com>
This commit is contained in:
Zichang Lin 2018-10-11 16:33:58 +08:00 committed by Clare Chen
parent 14f480af8f
commit 36306e283c
5 changed files with 96 additions and 20 deletions

View File

@ -75,7 +75,7 @@ default_bridges = @DEFBRIDGES@
# Default memory size in MiB for SB/VM. # Default memory size in MiB for SB/VM.
# If unspecified then it will be set @DEFMEMSZ@ MiB. # If unspecified then it will be set @DEFMEMSZ@ MiB.
#default_memory = @DEFMEMSZ@ default_memory = @DEFMEMSZ@
# #
# Default memory slots per SB/VM. # Default memory slots per SB/VM.
# If unspecified then it will be set @DEFMEMSLOTS@. # If unspecified then it will be set @DEFMEMSLOTS@.

View File

@ -896,7 +896,6 @@ func TestCreateSandboxConfigFail(t *testing.T) {
_, err = createSandbox(context.Background(), spec, runtimeConfig, testContainerID, bundlePath, testConsole, true, true) _, err = createSandbox(context.Background(), spec, runtimeConfig, testContainerID, bundlePath, testConsole, true, true)
assert.Error(err) assert.Error(err)
assert.False(vcmock.IsMockError(err))
} }
func TestCreateCreateSandboxFail(t *testing.T) { func TestCreateCreateSandboxFail(t *testing.T) {

View File

@ -993,6 +993,10 @@ func (c *Container) update(resources specs.LinuxResources) error {
return err return err
} }
if err := c.storeContainer(); err != nil {
return err
}
return c.sandbox.agent.updateContainer(c.sandbox, *c, resources) return c.sandbox.agent.updateContainer(c.sandbox, *c, resources)
} }
@ -1353,11 +1357,8 @@ func (c *Container) updateResources(oldResources, newResources ContainerResource
if err := c.updateVCPUResources(oldResources, &newResources); err != nil { if err := c.updateVCPUResources(oldResources, &newResources); err != nil {
return err return err
} }
// Set and save container's config VCPUs field only // Set container's config VCPUs field only
c.config.Resources.VCPUs = newResources.VCPUs c.config.Resources.VCPUs = newResources.VCPUs
if err := c.storeContainer(); err != nil {
return err
}
} }
// Memory is not updated if memory limit not set // Memory is not updated if memory limit not set
@ -1366,9 +1367,8 @@ func (c *Container) updateResources(oldResources, newResources ContainerResource
return err return err
} }
// Set and save container's config Mem field only // Set container's config MemByte field only
c.config.Resources.MemByte = newResources.MemByte c.config.Resources.MemByte = newResources.MemByte
return c.storeContainer()
} }
return nil return nil

View File

@ -326,11 +326,9 @@ func TestContainerAddResources(t *testing.T) {
MemByte: memByte, MemByte: memByte,
} }
c.sandbox = &Sandbox{ c.sandbox = &Sandbox{
hypervisor: &mockHypervisor{ hypervisor: &mockHypervisor{},
vCPUs: vCPUs, agent: &noopAgent{},
}, storage: &filesystem{},
agent: &noopAgent{},
storage: &filesystem{},
} }
err = c.addResources() err = c.addResources()
assert.Nil(err) assert.Nil(err)
@ -363,16 +361,94 @@ func TestContainerRemoveResources(t *testing.T) {
} }
c.sandbox = &Sandbox{ c.sandbox = &Sandbox{
hypervisor: &mockHypervisor{ hypervisor: &mockHypervisor{},
vCPUs: vCPUs, storage: &filesystem{},
},
storage: &filesystem{},
} }
err = c.removeResources() err = c.removeResources()
assert.Nil(err) assert.Nil(err)
} }
func TestContainerUpdateResources(t *testing.T) {
assert := assert.New(t)
sandbox := &Sandbox{
hypervisor: &mockHypervisor{},
agent: &noopAgent{},
storage: &filesystem{},
}
c := &Container{
sandbox: sandbox,
}
c.config = &ContainerConfig{Annotations: make(map[string]string)}
// VCPUs is equal to zero
oldResource := ContainerResources{
VCPUs: 0,
MemByte: 0,
}
newResource := ContainerResources{
VCPUs: 0,
MemByte: 104857600,
}
err := c.updateResources(oldResource, newResource)
assert.Nil(err)
// MemByte is equal to zero
newResource = ContainerResources{
VCPUs: 5,
MemByte: 0,
}
err = c.updateResources(oldResource, newResource)
assert.Nil(err)
// oldResource is equal to newResource
oldResource = ContainerResources{
VCPUs: 5,
MemByte: 104857600,
}
newResource = ContainerResources{
VCPUs: 5,
MemByte: 104857600,
}
err = c.updateResources(oldResource, newResource)
assert.Nil(err)
// memory hotplug and cpu hotplug
oldResource = ContainerResources{
VCPUs: 5,
MemByte: 104857600,
}
newResource = ContainerResources{
VCPUs: 10,
MemByte: 209715200,
}
err = c.updateResources(oldResource, newResource)
assert.Nil(err)
// memory hot remove and cpu hot remove
oldResource = ContainerResources{
VCPUs: 10,
MemByte: 209715200,
}
newResource = ContainerResources{
VCPUs: 5,
MemByte: 104857600,
}
err = c.updateResources(oldResource, newResource)
assert.Nil(err)
}
func TestContainerEnterErrorsOnContainerStates(t *testing.T) { func TestContainerEnterErrorsOnContainerStates(t *testing.T) {
assert := assert.New(t) assert := assert.New(t)
c := &Container{ c := &Container{

View File

@ -8,7 +8,6 @@ package virtcontainers
import "context" import "context"
type mockHypervisor struct { type mockHypervisor struct {
vCPUs uint32
} }
func (m *mockHypervisor) init(ctx context.Context, id string, hypervisorConfig *HypervisorConfig, storage resourceStorage) error { func (m *mockHypervisor) init(ctx context.Context, id string, hypervisorConfig *HypervisorConfig, storage resourceStorage) error {
@ -63,7 +62,7 @@ func (m *mockHypervisor) addDevice(devInfo interface{}, devType deviceType) erro
func (m *mockHypervisor) hotplugAddDevice(devInfo interface{}, devType deviceType) (interface{}, error) { func (m *mockHypervisor) hotplugAddDevice(devInfo interface{}, devType deviceType) (interface{}, error) {
switch devType { switch devType {
case cpuDev: case cpuDev:
return m.vCPUs, nil return devInfo.(uint32), nil
case memoryDev: case memoryDev:
memdev := devInfo.(*memoryDevice) memdev := devInfo.(*memoryDevice)
return memdev.sizeMB, nil return memdev.sizeMB, nil
@ -74,7 +73,9 @@ func (m *mockHypervisor) hotplugAddDevice(devInfo interface{}, devType deviceTyp
func (m *mockHypervisor) hotplugRemoveDevice(devInfo interface{}, devType deviceType) (interface{}, error) { func (m *mockHypervisor) hotplugRemoveDevice(devInfo interface{}, devType deviceType) (interface{}, error) {
switch devType { switch devType {
case cpuDev: case cpuDev:
return m.vCPUs, nil return devInfo.(uint32), nil
case memoryDev:
return 0, nil
} }
return nil, nil return nil, nil
} }