aboutsummaryrefslogtreecommitdiff
path: root/lava/job/tests/test_commands.py
diff options
context:
space:
mode:
Diffstat (limited to 'lava/job/tests/test_commands.py')
-rw-r--r--lava/job/tests/test_commands.py155
1 files changed, 155 insertions, 0 deletions
diff --git a/lava/job/tests/test_commands.py b/lava/job/tests/test_commands.py
new file mode 100644
index 0000000..79f352f
--- /dev/null
+++ b/lava/job/tests/test_commands.py
@@ -0,0 +1,155 @@
+# Copyright (C) 2013 Linaro Limited
+#
+# Author: Antonio Terceiro <antonio.terceiro@linaro.org>
+#
+# This file is part of lava-tool.
+#
+# lava-tool is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# as published by the Free Software Foundation
+#
+# lava-tool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with lava-tool. If not, see <http://www.gnu.org/licenses/>.
+
+"""
+Unit tests for the commands classes
+"""
+
+import json
+import os
+
+from mock import patch
+
+from lava.config import Config
+from lava.helper.tests.helper_test import HelperTest
+from lava.job.commands import (
+ new,
+ run,
+ submit,
+ status,
+)
+from lava.parameter import Parameter
+from lava.tool.errors import CommandError
+
+
+class CommandTest(HelperTest):
+
+ def setUp(self):
+ super(CommandTest, self).setUp()
+ self.args.FILE = self.temp_file.name
+ self.args.type = "boot-test"
+
+ self.device_type = Parameter('device_type')
+ self.prebuilt_image = Parameter('prebuilt_image',
+ depends=self.device_type)
+ self.config = Config()
+ self.config.put_parameter(self.device_type, 'foo')
+ self.config.put_parameter(self.prebuilt_image, 'bar')
+
+
+class JobNewTest(CommandTest):
+
+ def setUp(self):
+ super(JobNewTest, self).setUp()
+ self.args.FILE = self.tmp("new_file.json")
+ self.new_command = new(self.parser, self.args)
+ self.new_command.config = self.config
+
+ def tearDown(self):
+ super(JobNewTest, self).tearDown()
+ if os.path.exists(self.args.FILE):
+ os.unlink(self.args.FILE)
+
+ def test_register_arguments(self):
+ new_cmd = new(self.parser, self.args)
+ new_cmd.register_arguments(self.parser)
+
+ # Make sure we do not forget about this test.
+ self.assertEqual(3, len(self.parser.method_calls))
+
+ _, args, _ = self.parser.method_calls[0]
+ self.assertIn("--non-interactive", args)
+
+ _, args, _ = self.parser.method_calls[1]
+ self.assertIn("FILE", args)
+
+ _, args, _ = self.parser.method_calls[2]
+ self.assertIn("--type", args)
+
+ def test_create_new_file(self):
+ self.new_command.invoke()
+ self.assertTrue(os.path.exists(self.args.FILE))
+
+ def test_fills_in_template_parameters(self):
+ self.new_command.invoke()
+
+ data = json.loads(open(self.args.FILE).read())
+ self.assertEqual(data['device_type'], 'foo')
+
+ def test_wont_overwrite_existing_file(self):
+ with open(self.args.FILE, 'w') as f:
+ f.write("CONTENTS")
+
+ self.assertRaises(CommandError, self.new_command.invoke)
+ self.assertEqual("CONTENTS", open(self.args.FILE).read())
+
+
+class JobSubmitTest(CommandTest):
+
+ def test_receives_job_file_in_cmdline(self):
+ command = submit(self.parser, self.args)
+ command.register_arguments(self.parser)
+ name, args, kwargs = self.parser.method_calls[1]
+ self.assertIn("FILE", args)
+
+
+class JobRunTest(CommandTest):
+
+ def test_register_arguments(self):
+ run_cmd = run(self.parser, self.args)
+ run_cmd.register_arguments(self.parser)
+
+ # Make sure we do not forget about this test.
+ self.assertEqual(2, len(self.parser.method_calls))
+
+ _, args, _ = self.parser.method_calls[0]
+ self.assertIn("--non-interactive", args)
+
+ _, args, _ = self.parser.method_calls[1]
+ self.assertIn("FILE", args)
+
+ def test_invoke_raises_0(self):
+ # Users passes a non existing job file to the run command.
+ self.args.FILE = self.tmp("test_invoke_raises_0.json")
+ command = run(self.parser, self.args)
+ self.assertRaises(CommandError, command.invoke)
+
+ @patch("lava.helper.command.has_command", create=True)
+ def test_invoke_raises_1(self, mocked_has_command):
+ # User passes a valid file to the run command, but she does not have
+ # the dispatcher installed.
+ mocked_has_command.return_value = False
+ command = run(self.parser, self.args)
+ self.assertRaises(CommandError, command.invoke)
+
+
+class TestsStatusCommand(CommandTest):
+
+ def test_register_arguments(self):
+ self.args.JOB_ID = "1"
+ status_cmd = status(self.parser, self.args)
+ status_cmd.register_arguments(self.parser)
+
+ # Make sure we do not forget about this test.
+ self.assertEqual(2, len(self.parser.method_calls))
+
+ _, args, _ = self.parser.method_calls[0]
+ self.assertIn("--non-interactive", args)
+
+ _, args, _ = self.parser.method_calls[1]
+ self.assertIn("JOB_ID", args)