blob: 2b83e6ce4f43a0a8271b34f3c4723d263d143550 [file] [log] [blame]
Tim Hammerquist545ba4e2017-12-12 02:36:17 +00001#!/usr/bin/env python -tt
2
3"""
4unittests.test_commands
5"""
6
7from __future__ import print_function
8
9try:
10 import unittest2 as unittest
11except ImportError:
12 import unittest
13
14import mock
15import os
16import StringIO
17
18import dbsign.commands as C
19import dbsign.logger as L
20from dbsign.result import Failure, Success
21import dbsign.shell as sh
22
23
24log = L.get_logger(__name__)
25
26
27def 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
34def dummy_run(params, *args):
35 return sh.ShellCommand(params, 0, 'dummy_stdout', 'dummy_stderr')
36
37
38class 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))