summaryrefslogtreecommitdiff
path: root/tests/unittests/test_dmi.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unittests/test_dmi.py')
-rw-r--r--tests/unittests/test_dmi.py90
1 files changed, 52 insertions, 38 deletions
diff --git a/tests/unittests/test_dmi.py b/tests/unittests/test_dmi.py
index 674e7b98..6c28724a 100644
--- a/tests/unittests/test_dmi.py
+++ b/tests/unittests/test_dmi.py
@@ -1,16 +1,13 @@
-from tests.unittests import helpers
-from cloudinit import dmi
-from cloudinit import util
-from cloudinit import subp
-
import os
-import tempfile
import shutil
+import tempfile
from unittest import mock
+from cloudinit import dmi, subp, util
+from tests.unittests import helpers
-class TestReadDMIData(helpers.FilesystemMockingTestCase):
+class TestReadDMIData(helpers.FilesystemMockingTestCase):
def setUp(self):
super(TestReadDMIData, self).setUp()
self.new_root = tempfile.mkdtemp()
@@ -24,7 +21,7 @@ class TestReadDMIData(helpers.FilesystemMockingTestCase):
self._m_is_FreeBSD = p.start()
def _create_sysfs_parent_directory(self):
- util.ensure_dir(os.path.join('sys', 'class', 'dmi', 'id'))
+ util.ensure_dir(os.path.join("sys", "class", "dmi", "id"))
def _create_sysfs_file(self, key, content):
"""Mocks the sys path found on Linux systems."""
@@ -37,92 +34,109 @@ class TestReadDMIData(helpers.FilesystemMockingTestCase):
In order to test a missing sys path and call outs to dmidecode, this
function fakes the results of dmidecode to test the results.
"""
+
def _dmidecode_subp(cmd):
if cmd[-1] != key:
raise subp.ProcessExecutionError()
return (content, error)
self.patched_funcs.enter_context(
- mock.patch("cloudinit.dmi.subp.which", side_effect=lambda _: True))
+ mock.patch("cloudinit.dmi.subp.which", side_effect=lambda _: True)
+ )
self.patched_funcs.enter_context(
- mock.patch("cloudinit.dmi.subp.subp", side_effect=_dmidecode_subp))
+ mock.patch("cloudinit.dmi.subp.subp", side_effect=_dmidecode_subp)
+ )
def _configure_kenv_return(self, key, content, error=None):
"""
In order to test a FreeBSD system call outs to kenv, this
function fakes the results of kenv to test the results.
"""
+
def _kenv_subp(cmd):
if cmd[-1] != dmi.DMIDECODE_TO_KERNEL[key].freebsd:
raise subp.ProcessExecutionError()
return (content, error)
self.patched_funcs.enter_context(
- mock.patch("cloudinit.dmi.subp.subp", side_effect=_kenv_subp))
+ mock.patch("cloudinit.dmi.subp.subp", side_effect=_kenv_subp)
+ )
def patch_mapping(self, new_mapping):
self.patched_funcs.enter_context(
- mock.patch('cloudinit.dmi.DMIDECODE_TO_KERNEL',
- new_mapping))
+ mock.patch("cloudinit.dmi.DMIDECODE_TO_KERNEL", new_mapping)
+ )
def test_sysfs_used_with_key_in_mapping_and_file_on_disk(self):
- self.patch_mapping({'mapped-key': dmi.kdmi('mapped-value', None)})
- expected_dmi_value = 'sys-used-correctly'
- self._create_sysfs_file('mapped-value', expected_dmi_value)
- self._configure_dmidecode_return('mapped-key', 'wrong-wrong-wrong')
- self.assertEqual(expected_dmi_value, dmi.read_dmi_data('mapped-key'))
+ self.patch_mapping({"mapped-key": dmi.kdmi("mapped-value", None)})
+ expected_dmi_value = "sys-used-correctly"
+ self._create_sysfs_file("mapped-value", expected_dmi_value)
+ self._configure_dmidecode_return("mapped-key", "wrong-wrong-wrong")
+ self.assertEqual(expected_dmi_value, dmi.read_dmi_data("mapped-key"))
def test_dmidecode_used_if_no_sysfs_file_on_disk(self):
self.patch_mapping({})
self._create_sysfs_parent_directory()
- expected_dmi_value = 'dmidecode-used'
- self._configure_dmidecode_return('use-dmidecode', expected_dmi_value)
+ expected_dmi_value = "dmidecode-used"
+ self._configure_dmidecode_return("use-dmidecode", expected_dmi_value)
with mock.patch("cloudinit.util.os.uname") as m_uname:
- m_uname.return_value = ('x-sysname', 'x-nodename',
- 'x-release', 'x-version', 'x86_64')
- self.assertEqual(expected_dmi_value,
- dmi.read_dmi_data('use-dmidecode'))
+ m_uname.return_value = (
+ "x-sysname",
+ "x-nodename",
+ "x-release",
+ "x-version",
+ "x86_64",
+ )
+ self.assertEqual(
+ expected_dmi_value, dmi.read_dmi_data("use-dmidecode")
+ )
def test_dmidecode_not_used_on_arm(self):
self.patch_mapping({})
print("current =%s", subp)
self._create_sysfs_parent_directory()
- dmi_val = 'from-dmidecode'
- dmi_name = 'use-dmidecode'
+ dmi_val = "from-dmidecode"
+ dmi_name = "use-dmidecode"
self._configure_dmidecode_return(dmi_name, dmi_val)
print("now =%s", subp)
- expected = {'armel': None, 'aarch64': dmi_val, 'x86_64': dmi_val}
+ expected = {"armel": None, "aarch64": dmi_val, "x86_64": dmi_val}
found = {}
# we do not run the 'dmi-decode' binary on some arches
# verify that anything requested that is not in the sysfs dir
# will return None on those arches.
with mock.patch("cloudinit.util.os.uname") as m_uname:
for arch in expected:
- m_uname.return_value = ('x-sysname', 'x-nodename',
- 'x-release', 'x-version', arch)
+ m_uname.return_value = (
+ "x-sysname",
+ "x-nodename",
+ "x-release",
+ "x-version",
+ arch,
+ )
print("now2 =%s", subp)
found[arch] = dmi.read_dmi_data(dmi_name)
self.assertEqual(expected, found)
def test_none_returned_if_neither_source_has_data(self):
self.patch_mapping({})
- self._configure_dmidecode_return('key', 'value')
- self.assertIsNone(dmi.read_dmi_data('expect-fail'))
+ self._configure_dmidecode_return("key", "value")
+ self.assertIsNone(dmi.read_dmi_data("expect-fail"))
def test_none_returned_if_dmidecode_not_in_path(self):
self.patched_funcs.enter_context(
- mock.patch.object(subp, 'which', lambda _: False))
+ mock.patch.object(subp, "which", lambda _: False)
+ )
self.patch_mapping({})
- self.assertIsNone(dmi.read_dmi_data('expect-fail'))
+ self.assertIsNone(dmi.read_dmi_data("expect-fail"))
def test_empty_string_returned_instead_of_foxfox(self):
# uninitialized dmi values show as \xff, return empty string
my_len = 32
- dmi_value = b'\xff' * my_len + b'\n'
+ dmi_value = b"\xff" * my_len + b"\n"
expected = ""
- dmi_key = 'system-product-name'
- sysfs_key = 'product_name'
+ dmi_key = "system-product-name"
+ sysfs_key = "product_name"
self._create_sysfs_file(sysfs_key, dmi_value)
self.assertEqual(expected, dmi.read_dmi_data(dmi_key))
@@ -132,7 +146,7 @@ class TestReadDMIData(helpers.FilesystemMockingTestCase):
# first verify we get the value if not in container
self._m_is_container.return_value = False
key, val = ("system-product-name", "my_product")
- self._create_sysfs_file('product_name', val)
+ self._create_sysfs_file("product_name", val)
self.assertEqual(val, dmi.read_dmi_data(key))
# then verify in container returns None
@@ -142,7 +156,7 @@ class TestReadDMIData(helpers.FilesystemMockingTestCase):
def test_container_returns_none_on_unknown(self):
"""In a container even bogus keys return None."""
self._m_is_container.return_value = True
- self._create_sysfs_file('product_name', "should-be-ignored")
+ self._create_sysfs_file("product_name", "should-be-ignored")
self.assertIsNone(dmi.read_dmi_data("bogus"))
self.assertIsNone(dmi.read_dmi_data("system-product-name"))