Home | History | Annotate | Download | only in bin
      1 #!/usr/bin/python
      2 
      3 """Tests for site_sysinfo."""
      4 
      5 __author__ = 'dshi (at] google.com (Dan Shi)'
      6 
      7 import common
      8 import os
      9 import random
     10 import unittest
     11 from autotest_lib.client.bin import site_sysinfo
     12 from autotest_lib.client.common_lib import autotemp
     13 
     14 
     15 class diffable_logdir_test(unittest.TestCase):
     16     """Tests for methods in class diffable_logdir."""
     17 
     18 
     19     def setUp(self):
     20         """Initialize a temp direcotry with test files."""
     21         self.tempdir = autotemp.tempdir(unique_id='diffable_logdir')
     22         self.src_dir = os.path.join(self.tempdir.name, 'src')
     23         self.dest_dir = os.path.join(self.tempdir.name, 'dest')
     24 
     25         self.existing_files = ['existing_file_'+str(i) for i in range(3)]
     26         self.existing_files_folder = ['', 'sub', 'sub/sub2']
     27         self.existing_files_path = [os.path.join(self.src_dir, folder, f)
     28                                     for f,folder in zip(self.existing_files,
     29                                                 self.existing_files_folder)]
     30         self.new_files = ['new_file_'+str(i) for i in range(2)]
     31         self.new_files_folder = ['sub', 'sub/sub3']
     32         self.new_files_path = [os.path.join(self.src_dir, folder, f)
     33                                     for f,folder in zip(self.new_files,
     34                                                 self.new_files_folder)]
     35 
     36         # Create some file with random data in source directory.
     37         for p in self.existing_files_path:
     38             self.append_text_to_file(str(random.random()), p)
     39 
     40 
     41     def tearDown(self):
     42         """Clearn up."""
     43         self.tempdir.clean()
     44 
     45 
     46     def append_text_to_file(self, text, file_path):
     47         """Append text to the end of a file, create the file if not existed.
     48 
     49         @param text: text to be appended to a file.
     50         @param file_path: path to the file.
     51 
     52         """
     53         dir_name = os.path.dirname(file_path)
     54         if not os.path.exists(dir_name):
     55             os.makedirs(dir_name)
     56         with open(file_path, 'a') as f:
     57             f.write(text)
     58 
     59 
     60     def test_diffable_logdir_success(self):
     61         """Test the diff function to save new data from a directory."""
     62         info = site_sysinfo.diffable_logdir(self.src_dir,
     63                                             keep_file_hierarchy=False,
     64                                             append_diff_in_name=False)
     65         # Run the first time to collect file status.
     66         info.run(log_dir=None, collect_init_status=True)
     67 
     68         # Add new files to the test directory.
     69         for file_name, file_path in zip(self.new_files,
     70                                          self.new_files_path):
     71             self.append_text_to_file(file_name, file_path)
     72 
     73         # Temp file for existing_file_2, used to hold on the inode. If the
     74         # file is deleted and recreated, its inode might not change.
     75         existing_file_2 = self.existing_files_path[2]
     76         existing_file_2_tmp =  existing_file_2 + '_tmp'
     77         os.rename(existing_file_2, existing_file_2_tmp)
     78 
     79         # Append data to existing file.
     80         for file_name, file_path in zip(self.existing_files,
     81                                          self.existing_files_path):
     82             self.append_text_to_file(file_name, file_path)
     83 
     84         # Remove the tmp file.
     85         os.remove(existing_file_2_tmp)
     86 
     87         # Run the second time to do diff.
     88         info.run(self.dest_dir, collect_init_status=False)
     89 
     90         # Validate files in dest_dir.
     91         for file_name, file_path in zip(self.existing_files+self.new_files,
     92                                 self.existing_files_path+self.new_files_path):
     93             file_path = file_path.replace('src', 'dest')
     94             with open(file_path, 'r') as f:
     95                 self.assertEqual(file_name, f.read())
     96 
     97 
     98 if __name__ == '__main__':
     99     unittest.main()
    100