From b3e8ac8371a497aed6270358062cdfe4952a37ae Mon Sep 17 00:00:00 2001 From: Mark Goddard Date: Tue, 31 May 2016 12:01:06 -0500 Subject: [PATCH] Don't always unpack image build results tuple, as it may be None Change-Id: I21b1327da1de1bd3cc3018ba37715b0a19c1dbef Closes-Bug: #1587501 --- kolla/cmd/build.py | 16 +++++++++++----- kolla/tests/test_build.py | 27 +++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/kolla/cmd/build.py b/kolla/cmd/build.py index 18ff68503d..779ac76978 100755 --- a/kolla/cmd/build.py +++ b/kolla/cmd/build.py @@ -738,6 +738,11 @@ class KollaWorker(object): def run_build(): + """Build container images. + + :return: A 3-tuple containing bad, good, and unmatched container image + status dicts, or None if no images were built. + """ conf = cfg.ConfigOpts() common_config.parse(conf, sys.argv[1:], prog='kolla-build') @@ -792,11 +797,12 @@ def run_build(): def main(): - bad_results, good_results, unmatched_results = run_build() - if len(bad_results): - return 1 - else: - return 0 + statuses = run_build() + if statuses: + bad_results, good_results, unmatched_results = statuses + if bad_results: + return 1 + return 0 if __name__ == '__main__': diff --git a/kolla/tests/test_build.py b/kolla/tests/test_build.py index b6eeffa7d0..cc55bd48aa 100644 --- a/kolla/tests/test_build.py +++ b/kolla/tests/test_build.py @@ -218,3 +218,30 @@ class KollaWorkerTest(base.TestCase): kolla.images = self.images self.assertRaises(ValueError, kolla.filter_images) + + +@mock.patch.object(build, 'run_build') +class MainTest(base.TestCase): + + def test_images_built(self, mock_run_build): + image_statuses = ({}, {'img': 'built'}, {}) + mock_run_build.return_value = image_statuses + result = build.main() + self.assertEqual(0, result) + + def test_images_unmatched(self, mock_run_build): + image_statuses = ({}, {}, {'img': 'unmatched'}) + mock_run_build.return_value = image_statuses + result = build.main() + self.assertEqual(0, result) + + def test_no_images_built(self, mock_run_build): + mock_run_build.return_value = None + result = build.main() + self.assertEqual(0, result) + + def test_bad_images(self, mock_run_build): + image_statuses = ({'img': 'error'}, {}, {}) + mock_run_build.return_value = image_statuses + result = build.main() + self.assertEqual(1, result)