Commit 22bd2815 authored by Łukasz Nowak's avatar Łukasz Nowak

software/kvm: Show output of the check

In case of on problem, the output won't be shown, but in case if there is a
problem it's possible to understand the underlying cause.
parent bb6b0d52
Pipeline #39851 failed with stage
in 0 seconds
...@@ -103,4 +103,4 @@ md5sum = e569494a941e1d585c2e0bbf070cf1c9 ...@@ -103,4 +103,4 @@ md5sum = e569494a941e1d585c2e0bbf070cf1c9
[disk-image-corruption.sh] [disk-image-corruption.sh]
filename = template/disk-image-corruption.sh filename = template/disk-image-corruption.sh
md5sum = ae1f4eaf629243ea9e58c8895849e01a md5sum = 714e9d6e2fdb0ef4ef7844a3148a5a4b
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
if [ ! -s "{{ disk_path }}" ]; then if [ ! -s "{{ disk_path }}" ]; then
exit 0 exit 0
fi fi
{{ qemu_img_path }} check -U {{ disk_path }} > /dev/null 2>&1 {{ qemu_img_path }} check -U {{ disk_path }}
RETURN_CODE=$? RETURN_CODE=$?
# Return code 0 is "OK" # Return code 0 is "OK"
# Return code 3 is "found leaks, but image is OK" # Return code 3 is "found leaks, but image is OK"
......
...@@ -215,7 +215,7 @@ class KvmMixin: ...@@ -215,7 +215,7 @@ class KvmMixin:
) )
@classmethod @classmethod
def getPartitionId(cls, instance_type): def getPartitionIdByType(cls, instance_type):
software_url = cls.getSoftwareURL() software_url = cls.getSoftwareURL()
for computer_partition in cls.slap.computer.getComputerPartitionList(): for computer_partition in cls.slap.computer.getComputerPartitionList():
try: try:
...@@ -235,7 +235,7 @@ class KvmMixin: ...@@ -235,7 +235,7 @@ class KvmMixin:
@classmethod @classmethod
def getPartitionPath(cls, instance_type='kvm-export', *paths): def getPartitionPath(cls, instance_type='kvm-export', *paths):
return os.path.join( return os.path.join(
cls.slap._instance_root, cls.getPartitionId(instance_type), *paths) cls.slap._instance_root, cls.getPartitionIdByType(instance_type), *paths)
@classmethod @classmethod
def getBackupPartitionPath(cls, *paths): def getBackupPartitionPath(cls, *paths):
...@@ -1116,10 +1116,11 @@ class TestInstanceResilient(KVMTestCase, KvmMixin): ...@@ -1116,10 +1116,11 @@ class TestInstanceResilient(KVMTestCase, KvmMixin):
@classmethod @classmethod
def setUpClass(cls): def setUpClass(cls):
super().setUpClass() super().setUpClass()
cls.pbs1_ipv6 = cls.getPartitionIPv6(cls.getPartitionId('PBS (kvm / 1)')) cls.pbs1_ipv6 = cls.getPartitionIPv6(cls.getPartitionIdByType(
cls.kvm_instance_partition_reference = cls.getPartitionId('kvm0') 'PBS (kvm / 1)'))
cls.kvm_instance_partition_reference = cls.getPartitionIdByType('kvm0')
cls.kvm0_ipv6 = cls.getPartitionIPv6(cls.kvm_instance_partition_reference) cls.kvm0_ipv6 = cls.getPartitionIPv6(cls.kvm_instance_partition_reference)
cls.kvm1_ipv6 = cls.getPartitionIPv6(cls.getPartitionId('kvm1')) cls.kvm1_ipv6 = cls.getPartitionIPv6(cls.getPartitionIdByType('kvm1'))
def test(self): def test(self):
connection_parameter_dict = self\ connection_parameter_dict = self\
...@@ -2990,3 +2991,52 @@ vm""", fh.read()) ...@@ -2990,3 +2991,52 @@ vm""", fh.read())
class TestInstanceHttpServerJson( class TestInstanceHttpServerJson(
KvmMixinJson, TestInstanceHttpServer): KvmMixinJson, TestInstanceHttpServer):
pass pass
@skipUnlessKvm
class TestDefaultDiskImageCorruption(KVMTestCase, KvmMixin):
__partition_reference__ = 'ddic'
kvm_instance_partition_reference = 'ddic0'
def assertPromiseFails(self, partition_directory, promise):
monitor_run_promise = os.path.join(
partition_directory, 'software_release', 'bin',
'monitor.runpromise'
)
monitor_configuration = os.path.join(
partition_directory, 'etc', 'monitor.conf')
try:
output = subprocess.check_output(
[monitor_run_promise, '-c', monitor_configuration, '-a', '-f',
'--run-only', promise],
stderr=subprocess.STDOUT).decode('utf-8')
self.fail('Promise did not failed with output %s' % (output,))
except subprocess.CalledProcessError as e:
return e.output.decode('utf-8')
def _test(self, partition_type):
image = self.getPartitionPath(partition_type, 'srv', 'virtual.qcow2')
with open(image, 'w') as fh:
fh.write('damage')
partition = self.getPartitionPath(partition_type)
promise = 'kvm-disk-image-corruption.py'
output = self.assertPromiseFails(partition, promise)
self.assertIn(
'qemu-img: This image format does not support checks', output)
def test(self):
self._test('default')
@skipUnlessKvm
class TestResilientDiskImageCorruption(TestDefaultDiskImageCorruption):
@classmethod
def getInstanceSoftwareType(cls):
return 'kvm-resilient'
def test(self):
self._test('kvm-export')
def test_kvm_import(self):
self._test('kvm-import')
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment