Home | History | Annotate | Download | only in hosts
      1 #!/usr/bin/python
      2 
      3 import common
      4 import os
      5 import unittest
      6 
      7 from autotest_lib.client.common_lib import error, utils
      8 from autotest_lib.client.common_lib.test_utils import mock
      9 from autotest_lib.client.common_lib.hosts import base_classes
     10 
     11 
     12 class test_host_class(unittest.TestCase):
     13     def setUp(self):
     14         self.god = mock.mock_god()
     15 
     16 
     17     def tearDown(self):
     18         self.god.unstub_all()
     19 
     20 
     21     def test_run_output_notimplemented(self):
     22         host = base_classes.Host()
     23         self.assertRaises(NotImplementedError, host.run_output, "fake command")
     24 
     25 
     26     def _setup_test_check_diskspace(self, command, command_result,
     27                                     command_exit_status, directory,
     28                                     directory_exists):
     29         self.god.stub_function(os.path, 'isdir')
     30         self.god.stub_function(base_classes.Host, 'run')
     31         host = base_classes.Host()
     32         host.hostname = 'unittest-host'
     33         host.run.expect_call(
     34                 'test -e "%s"' % directory,
     35                 ignore_status=True).and_return(
     36                         utils.CmdResult(
     37                                 exit_status = 0 if directory_exists else 1))
     38         if directory_exists:
     39             fake_cmd_status = utils.CmdResult(
     40                 exit_status=command_exit_status, stdout=command_result)
     41             host.run.expect_call(command).and_return(fake_cmd_status)
     42         return host
     43 
     44 
     45     def test_check_diskspace(self):
     46         df_cmd = 'df -PB 1000000 /foo | tail -1'
     47         test_df_tail = ('/dev/sda1                    1061       939'
     48                         '       123      89% /')
     49         host = self._setup_test_check_diskspace(
     50             df_cmd, test_df_tail, 0, '/foo', True)
     51         host.check_diskspace('/foo', 0.1)
     52         self.god.check_playback()
     53 
     54 
     55     def test_check_diskspace_disk_full(self):
     56         df_cmd = 'df -PB 1000000 /foo | tail -1'
     57         test_df_tail = ('/dev/sda1                    1061       939'
     58                         '       123      89% /')
     59         host = self._setup_test_check_diskspace(
     60             df_cmd, test_df_tail, 0, '/foo', True)
     61         self.assertRaises(error.AutoservDiskFullHostError,
     62                           host.check_diskspace, '/foo', 0.2)
     63         self.god.check_playback()
     64 
     65 
     66     def test_check_diskspace_directory_not_found(self):
     67         df_cmd = 'df -PB 1000000 /foo | tail -1'
     68         test_df_tail = ('/dev/sda1                    1061       939'
     69                         '       123      89% /')
     70         host = self._setup_test_check_diskspace(
     71             df_cmd, test_df_tail, 0, '/foo', False)
     72         self.assertRaises(error.AutoservDirectoryNotFoundError,
     73                           host.check_diskspace, '/foo', 0.2)
     74         self.god.check_playback()
     75 
     76 
     77     def test_check_diskspace_directory_du_failed(self):
     78         df_cmd = 'df -PB 1000000 /foo | tail -1'
     79         test_df_tail = ('df: /foo: No such file or directory')
     80         host = self._setup_test_check_diskspace(
     81             df_cmd, test_df_tail, 1, '/foo', True)
     82         self.assertRaises(error.AutoservDiskSizeUnknownError,
     83                           host.check_diskspace, '/foo', 0.1)
     84         self.god.check_playback()
     85 
     86 
     87 if __name__ == "__main__":
     88     unittest.main()
     89