From 2b18513caddf63d6a12be30e4334681979dc9aba Mon Sep 17 00:00:00 2001 From: Ian Wienand Date: Fri, 10 Jun 2016 14:04:26 +1000 Subject: [PATCH] Convert element_dependencies to logging Use standard logging module for output. Add some basic testing of error messages to the unit-tests. Use the logging_config module to setup the logging for interactive use. Change-Id: Ia23722a7bd00aba336118edb155356a3b3ef6926 --- diskimage_builder/element_dependencies.py | 24 +++++++++++++-------- diskimage_builder/tests/test_elementdeps.py | 9 ++++++++ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/diskimage_builder/element_dependencies.py b/diskimage_builder/element_dependencies.py index be1c4f1c..b840c558 100644 --- a/diskimage_builder/element_dependencies.py +++ b/diskimage_builder/element_dependencies.py @@ -15,9 +15,14 @@ from __future__ import print_function import argparse import collections +import logging import os import sys +import diskimage_builder.logging_config + +logger = logging.getLogger(__name__) + def get_elements_dir(): if not os.environ.get('ELEMENTS_PATH'): @@ -42,8 +47,7 @@ def _get_set(element, fname, elements_dir=None): else: raise - sys.stderr.write("ERROR: Element '%s' not found in '%s'\n" % - (element, elements_dir)) + logger.error("Element '%s' not found in '%s'" % (element, elements_dir)) sys.exit(-1) @@ -100,20 +104,22 @@ def expand_dependencies(user_elements, elements_dir=None): final_elements.update(deps) if "operating-system" not in provided: - sys.stderr.write( - "ERROR: Please include an operating system element.\n") + logger.error( + "Please include an operating system element.") sys.exit(-1) conflicts = set(user_elements) & provided if conflicts: - sys.stderr.write("ERROR: Following elements were explicitly required " - "but are provided by other included elements: %s\n" % - ", ".join(conflicts)) + logger.error("Following elements were explicitly required " + "but are provided by other included elements: %s" % + ", ".join(conflicts)) sys.exit(-1) return final_elements - provided def main(argv): + diskimage_builder.logging_config.setup() + parser = argparse.ArgumentParser() parser.add_argument('elements', nargs='+', help='display dependencies of the given elements') @@ -125,8 +131,8 @@ def main(argv): args = parser.parse_args(argv[1:]) if args.expand_dependencies: - print("WARNING: expand-dependencies flag is deprecated, " - "and is now on by default.", file=sys.stderr) + logger.warning("expand-dependencies flag is deprecated, " + "and is now on by default.", file=sys.stderr) print(' '.join(expand_dependencies(args.elements))) return 0 diff --git a/diskimage_builder/tests/test_elementdeps.py b/diskimage_builder/tests/test_elementdeps.py index 7bbcdb49..f6039f84 100644 --- a/diskimage_builder/tests/test_elementdeps.py +++ b/diskimage_builder/tests/test_elementdeps.py @@ -12,6 +12,7 @@ # License for the specific language governing permissions and limitations # under the License. +import logging import os import fixtures @@ -39,6 +40,8 @@ class TestElementDeps(testtools.TestCase): def setUp(self): super(TestElementDeps, self).setUp() self.element_dir = self.useFixture(fixtures.TempDir()).path + self.log_fixture = self.useFixture( + fixtures.FakeLogger(level=logging.DEBUG)) _populate_element(self.element_dir, 'requires-foo', ['foo']) _populate_element(self.element_dir, 'foo', @@ -81,6 +84,8 @@ class TestElementDeps(testtools.TestCase): self.assertRaises(SystemExit, element_dependencies.expand_dependencies, ['fake'], self.element_dir) + self.assertIn("Element 'fake' not found", + self.log_fixture.output) def test_transitive_deps(self): result = element_dependencies.expand_dependencies( @@ -128,12 +133,16 @@ class TestElementDeps(testtools.TestCase): element_dependencies.expand_dependencies, ['provides_virtual'], elements_dir=self.element_dir) + self.assertIn("Please include an operating system element", + self.log_fixture.output) def test_duplicated_os_passed_as_element(self): self.assertRaises(SystemExit, element_dependencies.expand_dependencies, ['circular1', 'operating-system'], elements_dir=self.element_dir) + self.assertIn("provided by other included elements: operating-system", + self.log_fixture.output) class TestElements(testtools.TestCase):