summaryrefslogtreecommitdiff
path: root/cloudinit/tests/test_util.py
diff options
context:
space:
mode:
authorIgor Galić <me+github@igalic.co>2019-11-25 23:10:50 +0100
committerChad Smith <chad.smith@canonical.com>2019-11-25 15:10:50 -0700
commit2a135c4a421af47f5bd511e89e385a72f62bde33 (patch)
tree9abda1673b01fa4838874adb3a8551282552d984 /cloudinit/tests/test_util.py
parentaa935aefd2a01e792a397a28a915f0e029aeaed6 (diff)
downloadvyos-cloud-init-2a135c4a421af47f5bd511e89e385a72f62bde33.tar.gz
vyos-cloud-init-2a135c4a421af47f5bd511e89e385a72f62bde33.zip
FreeBSD: fix for get_linux_distro() and lru_cache (#59)
Since `is_FreeBSD()` is used a lot, which uses `system_info()`, which uses `get_linux_distro()` we add caching, by decorating the following functions with `@lru_cache`: - get_architecture() - _lsb_release() - is_FreeBSD - get_linux_distro - system_info() - _get_cmdline() Since [functools](https://docs.python.org/3/library/functools.html) only exists in Python 3, only python 3 will benefit from this improvement. For python 2, our shim is just a pass-thru. Too bad, but, also… https://pythonclock.org/ The main motivation here was, at first, to cache more, following the style of _lsb_release. That is now consolidated under this very same roof. LP: #1815030
Diffstat (limited to 'cloudinit/tests/test_util.py')
-rw-r--r--cloudinit/tests/test_util.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/cloudinit/tests/test_util.py b/cloudinit/tests/test_util.py
index f4f95e92..64ed82ea 100644
--- a/cloudinit/tests/test_util.py
+++ b/cloudinit/tests/test_util.py
@@ -387,6 +387,11 @@ class TestUdevadmSettle(CiTestCase):
@mock.patch('os.path.exists')
class TestGetLinuxDistro(CiTestCase):
+ def setUp(self):
+ # python2 has no lru_cache, and therefore, no cache_clear()
+ if hasattr(util.get_linux_distro, "cache_clear"):
+ util.get_linux_distro.cache_clear()
+
@classmethod
def os_release_exists(self, path):
"""Side effect function"""
@@ -399,6 +404,12 @@ class TestGetLinuxDistro(CiTestCase):
if path == '/etc/redhat-release':
return 1
+ @classmethod
+ def freebsd_version_exists(self, path):
+ """Side effect function """
+ if path == '/bin/freebsd-version':
+ return 1
+
@mock.patch('cloudinit.util.load_file')
def test_get_linux_distro_quoted_name(self, m_os_release, m_path_exists):
"""Verify we get the correct name if the os-release file has
@@ -417,6 +428,14 @@ class TestGetLinuxDistro(CiTestCase):
dist = util.get_linux_distro()
self.assertEqual(('ubuntu', '16.04', 'xenial'), dist)
+ @mock.patch('cloudinit.util.subp')
+ def test_get_linux_freebsd(self, m_subp, m_path_exists):
+ """Verify we get the correct name and release name on FreeBSD."""
+ m_path_exists.side_effect = TestGetLinuxDistro.freebsd_version_exists
+ m_subp.return_value = ("12.0-RELEASE-p10\n", '')
+ dist = util.get_linux_distro()
+ self.assertEqual(('freebsd', '12.0-RELEASE-p10', ''), dist)
+
@mock.patch('cloudinit.util.load_file')
def test_get_linux_centos6(self, m_os_release, m_path_exists):
"""Verify we get the correct name and release name on CentOS 6."""