Tim Hammerquist | 545ba4e | 2017-12-12 02:36:17 +0000 | [diff] [blame] | 1 | #!/usr/bin/env python -tt |
| 2 | |
| 3 | """ |
| 4 | unittests.test_commands |
| 5 | """ |
| 6 | |
| 7 | from __future__ import print_function |
| 8 | |
| 9 | try: |
| 10 | import unittest2 as unittest |
| 11 | except ImportError: |
| 12 | import unittest |
| 13 | |
| 14 | import mock |
| 15 | import os |
| 16 | import StringIO |
| 17 | |
| 18 | import dbsign.commands as C |
| 19 | import dbsign.logger as L |
| 20 | from dbsign.result import Failure, Success |
| 21 | import dbsign.shell as sh |
| 22 | |
| 23 | |
| 24 | log = L.get_logger(__name__) |
| 25 | |
| 26 | |
| 27 | def dummy_sudo_run(params, *args): |
| 28 | if sh.UNSAFE_FLAG in os.environ: |
| 29 | return dummy_run(params, *args) |
| 30 | else: |
| 31 | raise RuntimeError() |
| 32 | |
| 33 | |
| 34 | def dummy_run(params, *args): |
| 35 | return sh.ShellCommand(params, 0, 'dummy_stdout', 'dummy_stderr') |
| 36 | |
| 37 | |
| 38 | class TestCommands(unittest.TestCase): |
| 39 | def setUp(self): |
| 40 | pass |
| 41 | |
| 42 | def tearDown(self): |
| 43 | pass |
| 44 | |
| 45 | @mock.patch('dbsign.shell.sudo_run') |
| 46 | @mock.patch('__builtin__.print') |
| 47 | def test_auth_sudo(self, _print, _sudo_run): |
| 48 | _sudo_run.side_effect = [ |
| 49 | Success('good1'), # run 1 |
| 50 | Failure('bad2'), Success('good2'), # run 2 |
| 51 | Failure('bad3'), Failure('bad3'), # run 3 |
| 52 | ] |
| 53 | self.assertTrue(C._auth_sudo()) |
| 54 | self.assertTrue(C._auth_sudo()) |
| 55 | self.assertFalse(C._auth_sudo()) |
| 56 | |
| 57 | @mock.patch('dbsign.shell.run') |
| 58 | @mock.patch('sys.stdout', new_callable=StringIO.StringIO) |
| 59 | def test_run_linter(self, mock_stdout, new_run): |
| 60 | new_run.side_effect = dummy_run |
| 61 | C._run_linter() |
| 62 | new_run.assert_called() |
| 63 | self.assertIn('flake8', new_run.call_args[0][0]) |
| 64 | |
| 65 | @mock.patch('__builtin__.print') |
| 66 | def test_cmd_help(self, _print): |
| 67 | parser = mock.MagicMock() |
| 68 | code = C.cmd_help(parser) |
| 69 | self.assertTrue(_print.called) |
| 70 | self.assertTrue(parser.format_help.called) |
| 71 | self.assertEqual(0, code) |
| 72 | |
| 73 | @mock.patch('dbsign.security.unlock_keychain') |
| 74 | @mock.patch('__builtin__.print') |
| 75 | def test_cmd_prep(self, _print, _unlock): |
| 76 | _unlock.side_effect = (Success('good'), Failure('bad')) |
| 77 | self.assertEqual(0, C.cmd_prep()) |
| 78 | self.assertEqual(1, C.cmd_prep()) |
| 79 | |
| 80 | @mock.patch('dbsign.commands._run_unittests') |
| 81 | @mock.patch('dbsign.commands._auth_sudo') |
| 82 | @mock.patch('__builtin__.print') |
| 83 | def test_cmd_test(self, _print, _auth_sudo, _run_unit): |
| 84 | _run_unit.side_effect = [(), (1, 2, 3)] |
| 85 | self.assertEqual(0, C.cmd_test()) |
| 86 | self.assertEqual(1, _print.call_count) |
| 87 | |
| 88 | _print.reset_mock() |
| 89 | self.assertEqual(3, C.cmd_test()) |
| 90 | self.assertEqual(2, _print.call_count) |
| 91 | |
| 92 | @mock.patch('unittest.TextTestRunner().run()') |
| 93 | @mock.patch('unittest.TestLoader().discover()') |
| 94 | @unittest.skip('TODO') |
| 95 | def test_run_unittests(self, _test_discover, _test_run): |
| 96 | _test_discover.return_value = ('test1', 'test2', 'test3') |
| 97 | _test_run.return_value = mock.MagicMock() |
| 98 | |
| 99 | problems = C._run_unittests() |
| 100 | self.assertEqual(0, len(problems)) |
| 101 | |
| 102 | problems = C._run_unittests() |
| 103 | self.assertEqual(0, len(problems)) |