Spawn VM with specific resource quotas
- Spawn VM and verify that provided resources is correct
on VM. Delete VM after interaction.
Change-Id: Iaba6d3379e85863b22bf06a23204377a98c1e2ac
Reviewed-on: https://review.gerrithub.io/365160
Reviewed-by: Tatyanka Leontovich <tleontovich@mirantis.com>
Reviewed-by: Dennis Dmitriev <dis.xcom@gmail.com>
Tested-by: Dennis Dmitriev <dis.xcom@gmail.com>
diff --git a/tcp_tests/managers/virtlet_manager.py b/tcp_tests/managers/virtlet_manager.py
index 717ba76..866192d 100644
--- a/tcp_tests/managers/virtlet_manager.py
+++ b/tcp_tests/managers/virtlet_manager.py
@@ -40,15 +40,15 @@
label='Install Virtlet project')
self.__config.virtlet.virtlet_installed = True
- def run_vm(self, name=None):
+ def run_vm(self, name=None, yaml_path='virtlet/examples/cirros-vm.yaml'):
if not name:
name = 'virtlet-vm-{}'.format(uuid4())
virt_node = self.virtlet_nodes[0]
cmd = (
- "kubectl convert -f virtlet/examples/cirros-vm.yaml --local "
- "-o json | jq '.metadata.name|=\"{}\"' | kubectl create -f -")
+ "kubectl convert -f {0} --local "
+ "-o json | jq '.metadata.name|=\"{1}\"' | kubectl create -f -")
self.__underlay.check_call(
- cmd.format(name),
+ cmd.format(name, yaml_path),
node_name=virt_node['node_name'])
return name
@@ -81,3 +81,44 @@
timeout_msg="VM {} didn't Running state in {} sec. "
"Current state: ".format(
name, timeout, self.get_vm_info(name)['stdout'][0]))
+
+ def adjust_cirros_resources(
+ self, cpu=2, memory='256',
+ target_yaml='virtlet/examples/cirros-vm-exp.yaml'):
+ virt_node = self.virtlet_nodes[0]
+ # We will need to change params in case of example change
+ cmd = ("cd ~/virtlet/examples && "
+ "cp cirros-vm.yaml {2} && "
+ "sed -r 's/^(\s*)(VirtletVCPUCount\s*:\s*\"1\"\s*$)/ "
+ "\1VirtletVCPUCount: \"{0}\"/' {2} && "
+ "sed -r 's/^(\s*)(memory\s*:\s*128Mi\s*$)/\1memory: "
+ "{1}Mi/' {2}".format(cpu, memory, target_yaml))
+ self.__underlay.check_call(cmd, node_name=virt_node['node_name'])
+
+ def get_domain_name(self, vm_name):
+ virt_node = self.virtlet_nodes[0]
+ cmd = ("cd ~/virtlet/examples && "
+ "./virsh.sh list | grep -i {0} "
+ "| awk {{'print $2'}}".format(vm_name))
+ result = self.__underlay.check_call(cmd,
+ node_name=virt_node['node_name'])
+ return result['stdout'].strip()
+
+ def get_vm_cpu_count(self, domain_name):
+ virt_node = self.virtlet_nodes[0]
+ cmd = ("cd ~/virtlet/examples && "
+ "./virsh.sh dumpxml {0} | "
+ "grep 'cpu' | grep -o '[[:digit:]]*'".format(domain_name))
+ result = self.__underlay.check_call(cmd,
+ node_name=virt_node['node_name'])
+ return int(result['stdout'].strip())
+
+ def get_vm_memory_count(self, domain_name):
+ virt_node = self.virtlet_nodes[0]
+ cmd = ("cd ~/virtlet/examples && "
+ "./virsh.sh dumpxml {0} | "
+ "grep 'memory unit' | "
+ "grep -o '[[:digit:]]*'".format(domain_name))
+ result = self.__underlay.check_call(cmd,
+ node_name=virt_node['node_name'])
+ return int(result['stdout'].strip())
diff --git a/tcp_tests/tests/system/test_install_virtlet.py b/tcp_tests/tests/system/test_install_virtlet.py
index f49319d..0ccb75d 100644
--- a/tcp_tests/tests/system/test_install_virtlet.py
+++ b/tcp_tests/tests/system/test_install_virtlet.py
@@ -62,4 +62,4 @@
5. Launch Ceph one-node cluster in docker
"""
- LOG.info("*************** DONE **************")
\ No newline at end of file
+ LOG.info("*************** DONE **************")
diff --git a/tcp_tests/tests/system/test_virtlet_actions.py b/tcp_tests/tests/system/test_virtlet_actions.py
index 523aceb..4db505c 100644
--- a/tcp_tests/tests/system/test_virtlet_actions.py
+++ b/tcp_tests/tests/system/test_virtlet_actions.py
@@ -46,3 +46,35 @@
vm_name = virtlet_actions.run_vm()
virtlet_actions.wait_active_state(vm_name)
virtlet_actions.delete_vm(vm_name)
+
+ def test_vm_resource_quotas(self, underlay, virtlet_deployed, show_step,
+ virtlet_actions):
+ """Test for deploying a VM with specific quotas
+
+ Scenario:
+ 1. Prepare VM's yaml
+ 2. Start a VM
+ 3. Check that VM resources is equal to provided in yaml
+ 4. Destroy VM
+
+ """
+
+ target_cpu = 2 # Cores
+ target_memory = 256 # Size in MB
+ target_memory_kb = target_memory*1024
+ target_yaml = 'virtlet/examples/cirros-vm-exp.yaml'
+ virtlet_actions.adjust_cirros_resources(cpu=target_cpu,
+ memory=target_memory,
+ target_yaml=target_yaml)
+ vm_name = virtlet_actions.run_vm(target_yaml)
+ virtlet_actions.wait_active_state(vm_name)
+ domain_name = virtlet_actions.get_domain_name(vm_name)
+ cpu = virtlet_actions.get_vm_cpu_count(domain_name)
+ mem = virtlet_actions.get_vm_memory_count(domain_name)
+ fail_msg = '{0} is not correct memory unit for VM. Correct is {1}'.\
+ format(mem, target_memory_kb)
+ assert target_memory_kb == mem, fail_msg
+ fail_msg = '{0} is not correct cpu cores count for VM. ' \
+ 'Correct is {1}'.format(cpu, target_cpu)
+ assert target_cpu == cpu, fail_msg
+ virtlet_actions.delete_vm(target_yaml)