diff --git a/kolla/cmd/build.py b/kolla/cmd/build.py index 4067719131..e618899e5f 100755 --- a/kolla/cmd/build.py +++ b/kolla/cmd/build.py @@ -736,6 +736,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') @@ -790,11 +795,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)