From 6cfea302464043a0682a58cb21474ee21053bc3b Mon Sep 17 00:00:00 2001 From: Tim Miller Date: Tue, 5 Feb 2013 09:53:33 -0800 Subject: [PATCH] Prevent silent failure of element-info: bin/element-info accesses it's library via a symlink: bin/diskimage_builder -> diskimage_builder This causes the relative path in elements.py to be incorrect. element-info silently fails in this situation, because it allows missing 'element-deps' files, so that these files may be optional. This change causes element-info to fail explicitly if $ELEMENTS_DIR is not set, as it now is when called by diskimage-create, and adds tests reflecting this behavior. Change-Id: Iec50f934feb13dfed64d69297a3af6ac9f842677 --- diskimage_builder/elements.py | 5 ++--- diskimage_builder/test_elementdeps.py | 13 ++++++++++++- diskimage_builder/test_elements.py | 1 + 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/diskimage_builder/elements.py b/diskimage_builder/elements.py index 3002a919..728ccf98 100644 --- a/diskimage_builder/elements.py +++ b/diskimage_builder/elements.py @@ -20,9 +20,8 @@ import sys def get_elements_dir(): - if 'ELEMENTS_DIR' not in os.environ: - return os.path.abspath( - os.path.join(os.path.dirname(__file__), '..', 'elements')) + if not os.environ.get('ELEMENTS_DIR'): + raise Exception("$ELEMENTS_DIR must be set.") return os.environ['ELEMENTS_DIR'] diff --git a/diskimage_builder/test_elementdeps.py b/diskimage_builder/test_elementdeps.py index a62a66f3..c52cafa2 100644 --- a/diskimage_builder/test_elementdeps.py +++ b/diskimage_builder/test_elementdeps.py @@ -16,9 +16,10 @@ import os from testtools import TestCase -from fixtures import Fixture, TempDir +from fixtures import Fixture, EnvironmentVariable, TempDir from diskimage_builder.elements import expand_dependencies +from diskimage_builder.elements import get_elements_dir data_dir = os.path.abspath( os.path.join(os.path.dirname(__file__), 'test-elements')) @@ -72,3 +73,13 @@ class TestElementDeps(TestCase): result = expand_dependencies(['circular1'], elements_dir=self.element_dir) self.assertEquals(set(['circular1', 'circular2']), result) + + +class TestElements(TestCase): + def test_depends_on_env(self): + self.useFixture(EnvironmentVariable('ELEMENTS_DIR', '/foo/bar')) + self.assertEquals('/foo/bar', get_elements_dir()) + + def test_env_not_set(self): + self.useFixture(EnvironmentVariable('ELEMENTS_DIR', '')) + self.assertRaises(Exception, get_elements_dir, ()) diff --git a/diskimage_builder/test_elements.py b/diskimage_builder/test_elements.py index 1668b8a9..503277e8 100644 --- a/diskimage_builder/test_elements.py +++ b/diskimage_builder/test_elements.py @@ -22,6 +22,7 @@ class StubPackage: pass +# load all tests from /elements/*/tests/ dirs. # conceptually load_tests should be in __init__, but see # http://bugs.python.org/issue16662 instead. So, its here in test_elements.py def load_tests(loader, tests, pattern):