]> git.apps.os.sepia.ceph.com Git - teuthology.git/commitdiff
Add OS class method 'version_codename' to infer one from the other
authorDan Mick <dan.mick@redhat.com>
Tue, 19 Jul 2016 03:27:16 +0000 (20:27 -0700)
committerDan Mick <dan.mick@redhat.com>
Tue, 26 Jul 2016 17:44:19 +0000 (10:44 -0700)
Signed-off-by: Dan Mick <dan.mick@redhat.com>
teuthology/orchestra/opsys.py
teuthology/orchestra/test/test_opsys.py

index 87383403bdc0767f5e5aa6ad72119a29f3b32e0a..5706e8c8eb05ed630612920721aecb933a242b78 100644 (file)
@@ -159,6 +159,36 @@ class OS(object):
 
         return obj
 
+
+    @classmethod
+    def version_codename(cls, name, version_or_codename):
+        """
+        Return (version, codename) based on one input, trying to infer
+        which we're given
+        """
+        codename = None
+        version = None
+
+        try:
+            codename = OS._version_to_codename(name, version_or_codename)
+        except KeyError:
+            pass
+
+        try:
+            version = OS._codename_to_version(name, version_or_codename)
+        except (KeyError, RuntimeError):
+            pass
+
+        if version:
+            codename = version_or_codename
+        elif codename:
+            version = version_or_codename
+        else:
+            raise KeyError('%s not a %s version or codename' %
+                           (version_or_codename, name))
+        return version, codename
+
+
     @staticmethod
     def _get_value(str_, name):
         regex = '^%s[:=](.+)' % name
index b98f3527f4a9c9fa825d7a54d31a059677017523..0aa74793978b3d72ecf75ef29277e36e9c3e7667 100644 (file)
@@ -1,5 +1,6 @@
 from textwrap import dedent
 from ..opsys import OS
+import pytest
 
 
 class TestOS(object):
@@ -159,6 +160,16 @@ class TestOS(object):
         assert os.codename == 'maipo'
         assert os.package_type == 'rpm'
 
+    def test_version_codename_success(self):
+        assert OS.version_codename('ubuntu', '14.04') == ('14.04', 'trusty')
+        assert OS.version_codename('ubuntu', 'trusty') == ('14.04', 'trusty')
+
+    def test_version_codename_failure(self):
+        with pytest.raises(KeyError) as excinfo:
+            OS.version_codename('ubuntu', 'frog')
+        assert excinfo.type == KeyError
+        assert 'frog' in excinfo.value.args[0]
+
     def test_repr(self):
         os = OS(name='NAME', version='0.1.2', codename='code')
         assert repr(os) == "OS(name='NAME', version='0.1.2', codename='code')"