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