diff options
Diffstat (limited to 'test/unittests/test_parallax.py')
-rw-r--r-- | test/unittests/test_parallax.py | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/test/unittests/test_parallax.py b/test/unittests/test_parallax.py new file mode 100644 index 0000000..b934d91 --- /dev/null +++ b/test/unittests/test_parallax.py @@ -0,0 +1,104 @@ +from __future__ import unicode_literals +# Copyright (C) 2019 Xin Liang <XLiang@suse.com> +# See COPYING for license information. +# +# unit tests for parallax.py + + +import unittest +from unittest import mock + +import crmsh.parallax +import crmsh.prun.prun + + +class TestParallax(unittest.TestCase): + def setUp(self): + """ + Test setUp. + """ + # Use the setup to create a fresh instance for each test + + @mock.patch("crmsh.prun.prun.prun") + def test_call(self, mock_prun: mock.MagicMock): + mock_prun.return_value = { + "node1": crmsh.prun.prun.ProcessResult(0, None, None) + } + result = crmsh.parallax.parallax_call(["node1"], "ls") + self.assertEqual( + result, + [("node1", (0, None, None))], + ) + + @mock.patch("crmsh.prun.prun.prun") + def test_call_non_zero_exit_code(self, mock_prun: mock.MagicMock): + mock_prun.return_value = { + "node1": crmsh.prun.prun.ProcessResult(1, None, None) + } + with self.assertRaises(ValueError): + crmsh.parallax.parallax_call(["node1"], "ls") + + @mock.patch("crmsh.prun.prun.prun") + def test_call_255_exit_code(self, mock_prun: mock.MagicMock): + mock_prun.return_value = { + "node1": crmsh.prun.prun.ProcessResult(255, None, None) + } + with self.assertRaises(ValueError): + crmsh.parallax.parallax_call(["node1"], "ls") + + @mock.patch("crmsh.prun.prun.prun") + def test_run(self, mock_prun: mock.MagicMock): + mock_prun.return_value = { + "node1": crmsh.prun.prun.ProcessResult(0, None, None) + } + result = crmsh.parallax.parallax_run(["node1"], "ls") + self.assertEqual( + {"node1": (0, None, None)}, + result, + ) + + @mock.patch("crmsh.prun.prun.prun") + def test_run_non_zero_exit_code(self, mock_prun: mock.MagicMock): + mock_prun.return_value = { + "node1": crmsh.prun.prun.ProcessResult(1, None, None) + } + result = crmsh.parallax.parallax_run(["node1"], "ls") + self.assertEqual( + {"node1": (1, None, None)}, + result, + ) + + @mock.patch("crmsh.prun.prun.prun") + def test_run_255_exit_code(self, mock_prun: mock.MagicMock): + mock_prun.return_value = { + "node1": crmsh.prun.prun.SSHError("alice", "node1", "foo") + } + with self.assertRaises(ValueError): + crmsh.parallax.parallax_run(["node1"], "ls") + + @mock.patch("crmsh.prun.prun.pfetch_from_remote") + def test_slurp(self, mock_pfetch: mock.MagicMock): + mock_pfetch.return_value = {"node1": "/opt/node1/file.c"} + results = crmsh.parallax.parallax_slurp(["node1"], "/opt", "/opt/file.c") + self.assertListEqual([("node1", "/opt/node1/file.c")], results) + mock_pfetch.assert_called_once_with(["node1"], "/opt/file.c", "/opt") + + @mock.patch("crmsh.prun.prun.pfetch_from_remote") + def test_slurp_exception(self, mock_pfetch: mock.MagicMock): + mock_pfetch.return_value = {"node1": crmsh.prun.prun.PRunError("alice", "node1", "foo")} + with self.assertRaises(ValueError): + crmsh.parallax.parallax_slurp(["node1"], "/opt", "/opt/file.c") + mock_pfetch.assert_called_once_with(["node1"], "/opt/file.c", "/opt") + + @mock.patch("crmsh.prun.prun.pcopy_to_remote") + def test_copy(self, mock_pcopy: mock.MagicMock): + mock_pcopy.return_value = {"node1": None, "node2": None} + crmsh.parallax.parallax_copy(["node1", "node2"], "/opt/file.c", "/tmp") + mock_pcopy.assert_called_once_with("/opt/file.c", ["node1", "node2"], "/tmp", False, timeout_seconds=-1) + + @mock.patch("crmsh.prun.prun.pcopy_to_remote") + def test_copy_exception(self, mock_pcopy: mock.MagicMock): + mock_pcopy.return_value = {"node1": crmsh.prun.prun.PRunError("alice", "node1", "foo"), "node2": None} + with self.assertRaises(ValueError): + crmsh.parallax.parallax_copy(["node1", "node2"], "/opt/file.c", "/tmp") + mock_pcopy.assert_called_once_with("/opt/file.c", ["node1", "node2"], "/tmp", False, timeout_seconds=-1) |