On 7/6/21 9:17 AM, Eric Auger wrote:
From: Willian Rampazzo <willi...@redhat.com>
As the KNOWN_DISTROS grows, more loosely methods will be created in
the avocado_qemu/__init__.py file.
Let's refactor the code so that KNOWN_DISTROS and related methods are
packaged in a class
Signed-off-by: Wainer dos Santos Moschetta <waine...@redhat.com>
Signed-off-by: Eric Auger <eric.au...@redhat.com>
---
tests/acceptance/avocado_qemu/__init__.py | 74 +++++++++++++----------
1 file changed, 42 insertions(+), 32 deletions(-)
diff --git a/tests/acceptance/avocado_qemu/__init__.py
b/tests/acceptance/avocado_qemu/__init__.py
index 81ac90bebb..af93cd63ea 100644
--- a/tests/acceptance/avocado_qemu/__init__.py
+++ b/tests/acceptance/avocado_qemu/__init__.py
@@ -299,29 +299,43 @@ def ssh_command(self, command):
f'Guest command failed: {command}')
return stdout_lines, stderr_lines
+class LinuxDistro:
+ """Represents a Linux distribution
I definitely like the idea.
-#: A collection of known distros and their respective image checksum
-KNOWN_DISTROS = {
- 'fedora': {
- '31': {
- 'x86_64':
- {'checksum':
'e3c1b309d9203604922d6e255c2c5d098a309c2d46215d8fc026954f3c5c27a0'},
- 'aarch64':
- {'checksum':
'1e18d9c0cf734940c4b5d5ec592facaed2af0ad0329383d5639c997fdf16fe49'},
- 'ppc64':
- {'checksum':
'7c3528b85a3df4b2306e892199a9e1e43f991c506f2cc390dc4efa2026ad2f58'},
- 's390x':
- {'checksum':
'4caaab5a434fd4d1079149a072fdc7891e354f834d355069ca982fdcaf5a122d'},
+ Holds information of known distros.
+ """
+ #: A collection of known distros and their respective image checksum
+ KNOWN_DISTROS = {
+ 'fedora': {
+ '31': {
+ 'x86_64':
+ {'checksum':
'e3c1b309d9203604922d6e255c2c5d098a309c2d46215d8fc026954f3c5c27a0'},
+ 'ppc64':
+ {'checksum':
'7c3528b85a3df4b2306e892199a9e1e43f991c506f2cc390dc4efa2026ad2f58'},
+ 's390x':
+ {'checksum':
'4caaab5a434fd4d1079149a072fdc7891e354f834d355069ca982fdcaf5a122d'},
}
}
}
+ def __init__(self, name, version, arch):
+ self.name = name
+ self.version = version
+ self.arch = arch
This looks a lot like
https://github.com/avocado-framework/avocado/blob/f0996dafefa412c77c221c2d1a6fafdcba1c97b7/avocado/utils/distro.py#L34
, although admittedly, their goals are very different.
As a next step, in the future, I'd consider separating the data from the
actual class and having it the LinuxDistro instances, helped by a
registry. Something like:
class LinuxDistroRegistry:
def __init__(self):
self.distros = set()
def register(self, linux_distro):
self.distros.add(linux_distro)
def query(self, **kwargs):
...
registry = LinuxDistroRegistry()
registry.register(LinuxDistro('fedora', '31', 'x86_64', 'deadbeefdeadbeef'))
registry.register(LinuxDistro('fedora', '31', 'aarch64',
'beefdeadbeefdead'))
checksum = registry.query(name='fedora', version='31',
arch='x86_64').checksum
+ try:
+ self._info = self.KNOWN_DISTROS.get(name).get(version).get(arch)
The `AttributeError` that could be caught at the removed
`get_known_distro_checksum()` function, could come from any of the
`.get()`s returning `None`, which in turn would not have a `.get()`
attribute.
But now, if there's a "name", then a "version", but no "arch" entry,
this line will set `self._info` to `None`. This is manifested if you
try to run a test that tries to find an aarch64 distro, such as:
./tests/venv/bin/avocado run
tests/acceptance/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv2
It will result in:
20:38:18 ERROR| Reproduced traceback from:
/var/lib/users/cleber/build/qemu/tests/venv/lib64/python3.9/site-packages/avocado/core/test.py:756
20:38:18 ERROR| Traceback (most recent call last):
20:38:18 ERROR| File
"/var/lib/users/cleber/build/qemu/tests/acceptance/avocado_qemu/__init__.py",
line 426, in download_boot
20:38:18 ERROR| checksum=self.distro.checksum,
20:38:18 ERROR| File
"/var/lib/users/cleber/build/qemu/tests/acceptance/avocado_qemu/__init__.py",
line 334, in checksum
20:38:18 ERROR| return self._info.get('checksum', None)
20:38:18 ERROR| AttributeError: 'NoneType' object has no attribute 'get'
20:38:18 ERROR|
20:38:18 ERROR| During handling of the above exception, another
exception occurred:
20:38:18 ERROR|
20:38:18 ERROR| Traceback (most recent call last):
20:38:18 ERROR| File
"/var/lib/users/cleber/build/qemu/tests/acceptance/avocado_qemu/__init__.py",
line 387, in setUp
20:38:18 ERROR| self.set_up_boot()
20:38:18 ERROR| File
"/var/lib/users/cleber/build/qemu/tests/acceptance/avocado_qemu/__init__.py",
line 455, in set_up_boot
20:38:18 ERROR| path = self.download_boot()
20:38:18 ERROR| File
"/var/lib/users/cleber/build/qemu/tests/acceptance/avocado_qemu/__init__.py",
line 431, in download_boot
20:38:18 ERROR| self.cancel('Failed to download/prepare boot image')
20:38:18 ERROR| File
"/var/lib/users/cleber/build/qemu/tests/venv/lib64/python3.9/site-packages/avocado/core/test.py",
line 988, in cancel
20:38:18 ERROR| raise exceptions.TestCancel(message)
20:38:18 ERROR| avocado.core.exceptions.TestCancel: Failed to
download/prepare boot image
Cheers,
- Cleber.