def test_clean_up_priority_list_3_dcms(self):
     with mock.patch.object(DataCleaner, 'scan_dir'), \
             mock.patch.object(DataCleaner, '_get_file_stats') as mock_files, \
             mock.patch.object(DataCleaner, '_get_current_time') as mock_time:
         # test that 1. dcm files are removed on a whole
         mock_files.return_value = [
             ('folder1/0001.dcm', 0, 10),
             ('folder1/0002.dcm', 0, 10),
             ('folder1/0003.dcm', 0, 10),
             ('folder1/0004.dcm', 0, 10),
             ('folder2/0001.dcm', 10, 10),
             ('folder2/0002.dcm', 10, 10),
             ('folder2/folder3/file1.nii', 10, 10),
             ('folder3/0001.dcm', 5, 10),
             ('folder3/0002.dcm', 5, 10),
             ('folder3/t.db', 10, 10),
         ]
         mock_time.return_value = 20
         dc_instance = DataCleaner(
             folder='',
             folder_size_soft_limit=1.0 * 55 / 1024 / 1024,
             folder_size_hard_limit=1.0 * 55 / 1024 / 1024,
             max_data_seconds=-1,
             whitelist=[],
             priority_list=['*.dcm'])
         removed = dc_instance.clean_up(dry_run=True)
         self.assertEqual([('folder1/0001.dcm', 0, 10),
                           ('folder1/0002.dcm', 0, 10),
                           ('folder1/0003.dcm', 0, 10),
                           ('folder1/0004.dcm', 0, 10),
                           ('folder3/0001.dcm', 5, 10),
                           ('folder3/0002.dcm', 5, 10)], removed)
 def test_soft_hard_limit_2(self):
     with mock.patch.object(DataCleaner, 'scan_dir'), \
             mock.patch.object(DataCleaner, '_get_file_stats') as mock_files, \
             mock.patch.object(DataCleaner, '_get_current_time') as mock_time:
         mock_files.return_value = [('file1', 15, 30), ('file2', 5, 10),
                                    ('file3', 11, 30), ('file4', 13, 30)]
         mock_time.return_value = 20
         dc_instance = DataCleaner(
             folder='',
             folder_size_soft_limit=1.0 * 40 / 1024 / 1028,
             folder_size_hard_limit=1.0 * 110 / 1024 / 1028,
             max_data_seconds=-1,
             whitelist=[''],
             priority_list=['file*'])
         removed = dc_instance.clean_up(dry_run=True)
         self.assertEqual([], removed)
 def test_do_not_clean_young_files(self):
     with mock.patch.object(DataCleaner, 'scan_dir'), \
             mock.patch.object(DataCleaner, '_get_file_stats') as mock_files, \
             mock.patch.object(DataCleaner, '_get_current_time') as mock_time:
         mock_files.return_value = [('file1', 15, 30), ('file2', 5, 10),
                                    ('file3', 11, 30), ('file4', 13, 30)]
         mock_time.return_value = 20
         # file2 is 15 seconds old
         # file4 is 7 seconds old
         dc_instance = DataCleaner(folder='',
                                   folder_size_soft_limit=1024 * 1024,
                                   folder_size_hard_limit=1024 * 1024,
                                   max_data_seconds=10,
                                   whitelist=['file1', 'file3'],
                                   blacklist=['file*'],
                                   min_data_seconds=8)
         removed = dc_instance.clean_up(dry_run=True)
         self.assertEqual([('file2', 5, 10)], removed)
 def test_clean_up_priority_list_2(self):
     with mock.patch.object(DataCleaner, 'scan_dir'), \
             mock.patch.object(DataCleaner, '_get_file_stats') as mock_files, \
             mock.patch.object(DataCleaner, '_get_current_time') as mock_time:
         # test that 1. files not in priority_list are not removed
         #    (t.db not removed)
         # 2. files removed are in the order of the priority list
         #    (old*.nii removed first)
         # 3. files on the whitelist are not removed
         #    (not removing file1.nii and file3.nii)
         # 4. stop the removing process early if size requirements met
         #    (0004.dcm not removed)
         mock_files.return_value = [
             ('folder1/0001.png', 0, 10),
             ('folder1/0002.png', 0, 10),
             ('folder1/0003.png', 0, 10),
             ('folder1/0004.png', 0, 10),
             ('folder1/folder2/file1.nii', 10, 30),
             ('folder1/folder2/old_file2.nii', 10, 30),
             ('folder1/folder2/old_file3.nii', 10, 30),
             ('folder1/folder2/file4.nii', 10, 30),
             ('folder2/t.db', 10, 40),
         ]
         mock_time.return_value = 20
         dc_instance = DataCleaner(
             folder='',
             folder_size_soft_limit=1.0 * 115 / 1024 / 1024,
             folder_size_hard_limit=1.0 * 115 / 1024 / 1024,
             max_data_seconds=-1,
             whitelist=['*file1.nii', '*file3.nii'],
             priority_list=['*old*.nii', '*nii', '*.png', 'file*'])
         removed = dc_instance.clean_up(dry_run=True)
         # TODO file should be ideally deleted only once
         self.assertEqual([('folder1/folder2/old_file2.nii', 10, 30),
                           ('folder1/folder2/file4.nii', 10, 30),
                           ('folder1/folder2/old_file2.nii', 10, 30)],
                          removed)