From 72c9b922b283be3d2fe0a8a094416ffc56ca0092 Mon Sep 17 00:00:00 2001 From: Dan Mick Date: Mon, 18 Jul 2016 20:27:16 -0700 Subject: [PATCH] Add OS class method 'version_codename' to infer one from the other Signed-off-by: Dan Mick --- teuthology/orchestra/opsys.py | 30 +++++++++++++++++++++++++ teuthology/orchestra/test/test_opsys.py | 11 +++++++++ 2 files changed, 41 insertions(+) diff --git a/teuthology/orchestra/opsys.py b/teuthology/orchestra/opsys.py index 87383403bd..5706e8c8eb 100644 --- a/teuthology/orchestra/opsys.py +++ b/teuthology/orchestra/opsys.py @@ -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 diff --git a/teuthology/orchestra/test/test_opsys.py b/teuthology/orchestra/test/test_opsys.py index b98f3527f4..0aa7479397 100644 --- a/teuthology/orchestra/test/test_opsys.py +++ b/teuthology/orchestra/test/test_opsys.py @@ -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')" -- 2.39.5