Alex Miller | 6ee996f | 2013-02-28 13:53:52 -0800 | [diff] [blame] | 1 | #!/usr/bin/python |
Prashanth B | 340fd1e | 2014-06-22 12:44:10 -0700 | [diff] [blame] | 2 | #pylint: disable-msg=C0111 |
Eric Li | d656d56 | 2011-04-20 11:48:29 -0700 | [diff] [blame] | 3 | |
| 4 | """Tests for autotest_lib.scheduler.drones.""" |
| 5 | |
| 6 | import cPickle |
Justin Giorgi | 67ad67d | 2016-06-29 14:41:04 -0700 | [diff] [blame] | 7 | import unittest |
Eric Li | d656d56 | 2011-04-20 11:48:29 -0700 | [diff] [blame] | 8 | |
| 9 | import common |
| 10 | from autotest_lib.client.common_lib import utils |
Justin Giorgi | 67ad67d | 2016-06-29 14:41:04 -0700 | [diff] [blame] | 11 | from autotest_lib.client.common_lib.test_utils import mock |
Eric Li | d656d56 | 2011-04-20 11:48:29 -0700 | [diff] [blame] | 12 | from autotest_lib.scheduler import drones |
| 13 | from autotest_lib.server.hosts import ssh_host |
| 14 | |
| 15 | |
| 16 | class RemoteDroneTest(unittest.TestCase): |
Prashanth B | 340fd1e | 2014-06-22 12:44:10 -0700 | [diff] [blame] | 17 | |
Eric Li | d656d56 | 2011-04-20 11:48:29 -0700 | [diff] [blame] | 18 | def setUp(self): |
| 19 | self.god = mock.mock_god() |
| 20 | self._mock_host = self.god.create_mock_class(ssh_host.SSHHost, |
| 21 | 'mock SSHHost') |
| 22 | self.god.stub_function(drones.drone_utility, 'create_host') |
Prashanth B | 340fd1e | 2014-06-22 12:44:10 -0700 | [diff] [blame] | 23 | self.drone_utility_path = 'mock-drone-utility-path' |
Eric Li | d656d56 | 2011-04-20 11:48:29 -0700 | [diff] [blame] | 24 | |
| 25 | |
| 26 | def tearDown(self): |
| 27 | self.god.unstub_all() |
| 28 | |
| 29 | |
| 30 | def test_unreachable(self): |
| 31 | drones.drone_utility.create_host.expect_call('fakehost').and_return( |
| 32 | self._mock_host) |
| 33 | self._mock_host.is_up.expect_call().and_return(False) |
| 34 | self.assertRaises(drones.DroneUnreachable, |
| 35 | drones._RemoteDrone, 'fakehost') |
| 36 | |
| 37 | |
| 38 | def test_execute_calls_impl(self): |
| 39 | self.god.stub_with(drones._RemoteDrone, '_drone_utility_path', |
Prashanth B | 340fd1e | 2014-06-22 12:44:10 -0700 | [diff] [blame] | 40 | self.drone_utility_path) |
Eric Li | d656d56 | 2011-04-20 11:48:29 -0700 | [diff] [blame] | 41 | drones.drone_utility.create_host.expect_call('fakehost').and_return( |
| 42 | self._mock_host) |
| 43 | self._mock_host.is_up.expect_call().and_return(True) |
| 44 | mock_calls = ('foo',) |
| 45 | mock_result = utils.CmdResult(stdout=cPickle.dumps('mock return')) |
| 46 | self._mock_host.run.expect_call( |
Prashanth B | 340fd1e | 2014-06-22 12:44:10 -0700 | [diff] [blame] | 47 | 'python %s' % self.drone_utility_path, |
Eric Li | d656d56 | 2011-04-20 11:48:29 -0700 | [diff] [blame] | 48 | stdin=cPickle.dumps(mock_calls), stdout_tee=None, |
| 49 | connect_timeout=mock.is_instance_comparator(int)).and_return( |
| 50 | mock_result) |
Prashanth B | cf731e3 | 2014-08-10 18:03:57 -0700 | [diff] [blame] | 51 | drone = drones._RemoteDrone('fakehost', timestamp_remote_calls=False) |
Eric Li | d656d56 | 2011-04-20 11:48:29 -0700 | [diff] [blame] | 52 | self.assertEqual('mock return', drone._execute_calls_impl(mock_calls)) |
| 53 | self.god.check_playback() |
| 54 | |
| 55 | |
Prashanth B | 340fd1e | 2014-06-22 12:44:10 -0700 | [diff] [blame] | 56 | def test_execute_queued_calls(self): |
| 57 | self.god.stub_with(drones._RemoteDrone, '_drone_utility_path', |
| 58 | self.drone_utility_path) |
| 59 | drones.drone_utility.create_host.expect_call('fakehost').and_return( |
| 60 | self._mock_host) |
| 61 | self._mock_host.is_up.expect_call().and_return(True) |
Prashanth B | cf731e3 | 2014-08-10 18:03:57 -0700 | [diff] [blame] | 62 | drone = drones._RemoteDrone('fakehost', timestamp_remote_calls=False) |
Prashanth B | 340fd1e | 2014-06-22 12:44:10 -0700 | [diff] [blame] | 63 | mock_return={} |
| 64 | mock_return['results'] = ['mock return'] |
| 65 | mock_return['warnings'] = [] |
| 66 | drone.queue_call('foo') |
| 67 | mock_result = utils.CmdResult(stdout=cPickle.dumps(mock_return)) |
| 68 | self._mock_host.run.expect_call( |
| 69 | 'python %s' % self.drone_utility_path, |
| 70 | stdin=cPickle.dumps(drone.get_calls()), stdout_tee=None, |
| 71 | connect_timeout=mock.is_instance_comparator(int)).and_return( |
| 72 | mock_result) |
| 73 | self.assertEqual(mock_return['results'], drone.execute_queued_calls()) |
| 74 | self.god.check_playback() |
| 75 | |
| 76 | |
| 77 | |
Eric Li | d656d56 | 2011-04-20 11:48:29 -0700 | [diff] [blame] | 78 | if __name__ == '__main__': |
| 79 | unittest.main() |