diff --git a/dox/cmd.py b/dox/cmd.py index 8237a54..ac52aad 100644 --- a/dox/cmd.py +++ b/dox/cmd.py @@ -111,7 +111,7 @@ def runner(args): # Get Image if args.images: - args_images = args.images.split(',') + args_images = [x.strip() for x in args.images.split(',')] if args.command: command = dox.config.cmdline.CommandLine(args.extra_args) diff --git a/dox/tests/test_cmd.py b/dox/tests/test_cmd.py new file mode 100644 index 0000000..1ce54a0 --- /dev/null +++ b/dox/tests/test_cmd.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +# Author: Chmouel Boudjnah +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +import argparse + +import mock + +import dox.cmd +from dox.tests import base + +default_argp = argparse.Namespace(user_map=None, command=None, + environment=None, extra_args=None, + debug=None, noop=True, + images=None, path_map=None) + + +class TestCmd(base.TestCase): + + @mock.patch('dox.runner.Runner.is_docker_installed', + return_value=False) + def test_runner(self, installed_mock): + self.assertRaises(SystemExit, dox.cmd.runner, default_argp) + + @mock.patch('dox.cmd.run_dox') + @mock.patch('dox.config.cmdline.CommandLine') + def test_multiple_images_one_command(self, m_cmdline, m_run_dox): + argp = default_argp + argp.images = 'foo, bar' + argp.command = '/bin/true' + dox.cmd.runner(argp) + + self.assertTrue(m_cmdline.called) + # silly but i'm not sure how to test that in a proper way + self.assertEqual(['foo', 'bar'], + m_run_dox.call_args_list[0][0][1]) + + @mock.patch('dox.cmd.run_dox') + @mock.patch('dox.images.get_images') + def test_multiple_environments(self, m_get_images, m_run_dox): + argp = default_argp + argp.environment = 'env1, env2' + dox.cmd.runner(argp) + + self.assertEqual(2, m_get_images.call_count) + self.assertEqual(2, m_run_dox.call_count) + + @mock.patch('dox.cmd.run_dox') + @mock.patch('dox.images.get_images') + def test_multiple_environments_images(self, m_get_images, m_run_dox): + argp = default_argp + argp.images = 'foo, bar' + argp.environment = 'env1, env2' + dox.cmd.runner(argp) + + self.assertEqual(0, m_get_images.call_count) + self.assertEqual(2, m_run_dox.call_count) + + @mock.patch('dox.cmd.run_dox') + @mock.patch('dox.images.get_images') + def test_default(self, m_get_images, m_run_dox): + dox.cmd.runner(default_argp) + + self.assertEqual('_default', + m_get_images.call_args_list[0][0][0].get('section')) + + @mock.patch('dox.runner.Runner') + def test_run_dox(self, m_runner): + dox.cmd.run_dox(default_argp, ['1', '2', '3'], '/bin/echo') + self.assertEqual(1, m_runner.call_count)