def test_validate_failure_when_excluded_file(self): create_files(['abc', 'def']) config = _create_parameter_model(recursive=False, file_dir=test_utils.temp_folder, excluded_files=['abc']) self.assertRegex(config.validate_value('abc'), '.+ but should be in \[\'def\'\]')
def test_allowed_values_when_working_dir(self): working_dir = os.path.join('work', 'dir') file_dir = 'inner' create_files(['abc', 'def'], os.path.join(working_dir, file_dir)) working_dir_path = os.path.join(test_utils.temp_folder, working_dir) config = _create_parameter_model(recursive=False, file_dir=file_dir, working_dir=working_dir_path) self.assertEqual(['abc', 'def'], config.values)
def test_validate_success_when_working_dir(self): working_dir = os.path.join('work', 'dir') file_dir = 'inner' create_files(['abc', 'def'], os.path.join(working_dir, file_dir)) working_dir_path = os.path.join(test_utils.temp_folder, 'work', 'dir') config = _create_parameter_model(recursive=False, file_dir=file_dir, working_dir=working_dir_path) self.assertIsNone(config.validate_value('def'))
def test_multiple_files(self): test_utils.create_files(['My.txt', 'file.dat', 'test.sh', 'file2.txt']) test_utils.create_dir('documents') test_utils.create_files(['another.txt'], 'documents') provider = FilesProvider(test_utils.temp_folder, file_extensions=['txt']) self.assertEqual(['file2.txt', 'My.txt'], provider.get_values({}))
def test_validate_fail_on_extension_when_file_type_dir_and_extensions(self): create_files(['.passwords'], 'private') create_files(['admin.log', 'file.txt', 'print.pdf']) config = _create_parameter_model(recursive=True, file_type=FILE_TYPE_DIR, extensions=['txt']) error = config.validate_value(['print.pdf']) self.assertRegex(error, '.+ is not allowed')
def test_validate_success_when_file_type_dir(self): create_files(['.passwords'], 'private') create_files(['tasks.list']) config = _create_parameter_model(recursive=True, file_type=FILE_TYPE_DIR) self.assertIsNone(config.validate_value(['private']))
def test_file_type_dir(self): files = ['file1', 'file2'] test_utils.create_files(files) test_utils.create_dir('my_dir') actual_files = model_helper.list_files(test_utils.temp_folder, file_type=FILE_TYPE_DIR) self.assertEqual(['my_dir'], actual_files)
def test_validate_fail_when_file_type_dir(self): create_files(['.passwords'], 'private') create_files(['tasks.list']) config = _create_parameter_model(recursive=True, file_type=FILE_TYPE_DIR) error = config.validate_value(['tasks.list']) self.assertRegex(error, '.+ is not allowed')
def test_validate_fail_when_file_type_file(self): create_files(['abc.txt', 'admin.log'], 'home') create_files(['.passwords'], os.path.join('home', 'private')) config = _create_parameter_model(recursive=True, file_type=FILE_TYPE_FILE) error = config.validate_value(['home', 'private']) self.assertRegex(error, '.+ is not allowed')
def test_list_files_when_extension(self): create_files(['xyz', 'nop'], os.path.join('my_dir')) create_files(['abc.txt', 'def.pdf']) config = _create_parameter_model(recursive=True, extensions=['pdf']) files = config.list_files([]) self.assertCountEqual([_file('def.pdf'), _dir('my_dir')], files)
def test_validate_fail_when_relative_reference(self): create_files(['abc.txt']) config = _create_parameter_model(recursive=True) error = config.validate_value( ['..', test_utils.temp_folder, 'abc.txt']) self.assertEqual('Relative path references are not allowed', error)
def test_validate_success_when_file_type_file(self): create_files(['abc.txt', 'admin.log'], 'home') create_files(['.passwords'], os.path.join('home', 'private')) config = _create_parameter_model(recursive=True, file_type=FILE_TYPE_FILE) self.assertIsNone(config.validate_value(['home', 'abc.txt']))
def test_validate_fail_on_list_excluded_subfolder(self): subfolder = os.path.join('work', 'another') create_files(['xyz', 'abc'], subfolder) config = _create_parameter_model(recursive=True, excluded_files=['work']) self.assertRaisesRegex(InvalidValueException, '.+ is excluded', config.list_files, [subfolder])
def test_list_files_when_file_type_dir(self): create_files(['abc', 'def'], os.path.join('my_dir')) create_files(['xyz', 'nop']) config = _create_parameter_model(recursive=True, file_type=FILE_TYPE_DIR) files = config.list_files([]) self.assertCountEqual([_dir('my_dir')], files)
def test_list_files_when_working_dir_and_file_dir_dotdot(self): working_dir = os.path.join('work', 'dir') create_files(['xyz', 'abc'], os.path.join('work', 'another')) working_dir_path = os.path.join(test_utils.temp_folder, working_dir) config = _create_parameter_model(recursive=True, file_dir='..', working_dir=working_dir_path) files = config.list_files(['another']) self.assertCountEqual([_file('xyz'), _file('abc')], files)
def test_validate_fail_when_file_type_file(self): create_files(['abc.txt', 'admin.log'], 'home') create_files(['.passwords'], os.path.join('home', 'private')) config = _create_parameter_model(recursive=True, file_type=FILE_TYPE_FILE) error = config.validate_value(['home', 'private']) self.assertRegex(error, '.+ is not allowed')
def test_validate_fail_on_excluded_file(self): subfolder = os.path.join('work', 'another') create_files(['xyz', 'abc'], subfolder) config = _create_parameter_model( recursive=True, excluded_files=[os.path.join(subfolder, 'abc')]) error = config.validate_value(['work', 'another', 'abc']) self.assertRegex(error, '.+ is excluded')
def test_validate_fail_when_file_type_dir(self): create_files(['.passwords'], 'private') create_files(['tasks.list']) config = _create_parameter_model(recursive=True, file_type=FILE_TYPE_DIR) error = config.validate_value(['tasks.list']) self.assertRegex(error, '.+ is not allowed')
def test_validate_success_when_file_type_dir_and_extensions(self): create_files(['.passwords'], 'private') create_files(['admin.log', 'file.txt', 'print.pdf']) config = _create_parameter_model(recursive=True, file_type=FILE_TYPE_DIR, extensions=['txt']) self.assertIsNone(config.validate_value(['file.txt']))
def test_file_type_dir(self): files = ['file1', 'file2'] test_utils.create_files(files) test_utils.create_dir('my_dir') actual_files = model_helper.list_files(test_utils.temp_folder, file_type=FILE_TYPE_DIR) self.assertEqual(['my_dir'], actual_files)
def test_allowed_values_when_excluded_files(self): dirname = 'inner' create_files(['abc', 'def'], dirname) config = _create_parameter_model(recursive=False, file_dir=os.path.join( test_utils.temp_folder, dirname), excluded_files=['abc']) self.assertEqual(['def'], config.values)
def test_list_files_when_excluded_recursive_glob(self): subfolder = os.path.join('work', 'another') create_files(['A.pdf', 'B.pdf', 'C.exe'], subfolder) config = _create_parameter_model( recursive=True, excluded_files=[os.path.join('**', '*.exe')]) files = config.list_files(['work', 'another']) self.assertCountEqual([_file('A.pdf'), _file('B.pdf')], files)
def test_list_files_when_excluded_plain_file(self): subfolder = os.path.join('work', 'another') create_files(['xyz', 'abc'], subfolder) config = _create_parameter_model( recursive=True, excluded_files=[os.path.join(subfolder, 'abc')]) files = config.list_files(['work', 'another']) self.assertCountEqual([_file('xyz')], files)
def test_glob_relative_path(self): created_files = ['file1', 'file2', 'file3'] test_utils.create_files(created_files) matcher = self.create_matcher(['*1']) files = model_helper.list_files(test_utils.temp_folder, excluded_files_matcher=matcher) self.assertEqual(['file2', 'file3'], files)
def test_allowed_values_when_working_dir(self): working_dir = os.path.join('work', 'dir') file_dir = 'inner' create_files(['abc', 'def'], os.path.join(working_dir, file_dir)) working_dir_path = os.path.join(test_utils.temp_folder, working_dir) config = _create_parameter_model(recursive=False, file_dir=file_dir, working_dir=working_dir_path) self.assertEqual(['abc', 'def'], config.values)
def test_validate_fail_on_dir_when_file_type_dir_and_extensions(self): create_files(['.passwords'], 'private') create_files(['admin.log', 'file.txt', 'print.pdf']) config = _create_parameter_model(recursive=True, file_type=FILE_TYPE_DIR, extensions=['txt']) error = config.validate_value(['private']) self.assertRegex(error, '.+ is not allowed')
def test_list_files_when_file_type_dir(self): create_files(['abc', 'def'], os.path.join('my_dir')) create_files(['xyz', 'nop']) config = _create_parameter_model(recursive=True, file_type=FILE_TYPE_DIR) files = config.list_files([]) self.assertCountEqual([ _dir('my_dir')], files)
def test_validate_failure_when_working_dir(self): file_dir = 'inner' create_files(['abc', 'def'], file_dir) working_dir_path = os.path.join(test_utils.temp_folder, 'work', 'dir') config = _create_parameter_model(recursive=False, file_dir=file_dir, working_dir=working_dir_path) self.assertRegex(config.validate_value('def'), '.+ but should be in \[\]')
def test_plain_relative_path_in_subfolder(self): created_files = ['file1', 'file2', 'file3'] test_utils.create_files(created_files, 'sub') subfolder_path = os.path.join(test_utils.temp_folder, 'sub') matcher = self.create_matcher([(os.path.join('sub', 'file2'))]) files = model_helper.list_files(subfolder_path, excluded_files_matcher=matcher) self.assertEqual(['file1', 'file3'], files)
def test_validate_success_when_working_dir(self): working_dir = os.path.join('work', 'dir') file_dir = 'inner' create_files(['abc', 'def'], os.path.join(working_dir, file_dir)) working_dir_path = os.path.join(test_utils.temp_folder, 'work', 'dir') config = _create_parameter_model(recursive=False, file_dir=file_dir, working_dir=working_dir_path) self.assertIsNone(config.validate_value('def'))
def test_recursive_glob_relative_different_work_dir(self): created_files = ['file1', 'file2', 'file3'] test_utils.create_files(created_files, 'sub') matcher = FileMatcher(['**'], test_utils.temp_folder + '2') subfolder_path = os.path.join(test_utils.temp_folder, 'sub') files = model_helper.list_files(subfolder_path, excluded_files_matcher=matcher) self.assertEqual(['file1', 'file2', 'file3'], files)
def test_recursive_glob_relative_path_any_match(self): created_files = ['file1', 'file2', 'file3'] test_utils.create_files(created_files, 'sub') matcher = self.create_matcher(['**']) subfolder_path = os.path.join(test_utils.temp_folder, 'sub') files = model_helper.list_files(subfolder_path, excluded_files_matcher=matcher) self.assertEqual([], files)
def test_glob_absolute_path(self): created_files = ['file1', 'file2', 'file3'] test_utils.create_files(created_files) matcher = self.create_matcher( [file_utils.normalize_path('*1', test_utils.temp_folder)]) files = model_helper.list_files(test_utils.temp_folder, excluded_files_matcher=matcher) self.assertEqual(['file2', 'file3'], files)
def test_plain_absolute_path(self): created_files = ['file1', 'file2', 'file3'] test_utils.create_files(created_files) excluded_file = os.path.abspath( os.path.join(test_utils.temp_folder, 'file2')) matcher = self.create_matcher([excluded_file]) files = model_helper.list_files(test_utils.temp_folder, excluded_files_matcher=matcher) self.assertEqual(['file1', 'file3'], files)
def test_recursive_glob_relative_path_match_any_in_subfolder(self): created_files = ['file1', 'file2', 'file3'] subfolder = os.path.join('a', 'b', 'c', 'd', 'e') test_utils.create_files(created_files, subfolder) matcher = self.create_matcher(['**/e/**']) subfolder_path = os.path.join(test_utils.temp_folder, subfolder) files = model_helper.list_files(subfolder_path, excluded_files_matcher=matcher) self.assertEqual([], files)
def test_recursive_glob_absolute_path(self): created_files = ['file1', 'file2', 'file3'] test_utils.create_files(created_files, 'sub') matcher = self.create_matcher( [file_utils.normalize_path('**/file1', test_utils.temp_folder)]) subfolder_path = os.path.join(test_utils.temp_folder, 'sub') files = model_helper.list_files(subfolder_path, excluded_files_matcher=matcher) self.assertEqual(['file2', 'file3'], files)
def test_list_files_when_extension(self): create_files(['xyz', 'nop'], os.path.join('my_dir')) create_files(['abc.txt', 'def.pdf']) config = _create_parameter_model(recursive=True, extensions=['pdf']) files = config.list_files([]) self.assertCountEqual([ _file('def.pdf'), _dir('my_dir')], files)
def test_list_files_when_working_dir(self): param = create_script_param_config('recurs_file', type=PARAM_TYPE_SERVER_FILE, file_recursive=True, file_dir='.') config_model = _create_config_model('my_conf', parameters=[param], working_dir=test_utils.temp_folder) create_files(['file1', 'file2']) file_names = [f['name'] for f in (config_model.list_files_for_param('recurs_file', []))] self.assertCountEqual(['file1', 'file2'], file_names)
def test_list_files_when_working_dir_and_file_dir_dotdot(self): working_dir = os.path.join('work', 'dir') create_files(['xyz', 'abc'], os.path.join('work', 'another')) working_dir_path = os.path.join(test_utils.temp_folder, working_dir) config = _create_parameter_model(recursive=True, file_dir='..', working_dir=working_dir_path) files = config.list_files(['another']) self.assertCountEqual([_file('xyz'), _file('abc')], files)
def test_list_files_when_working_dir(self): param = create_script_param_config('recurs_file', type=PARAM_TYPE_SERVER_FILE, file_recursive=True, file_dir='.') config_model = _create_config_model('my_conf', parameters=[param], working_dir=test_utils.temp_folder) create_files(['file1', 'file2']) file_names = [f['name'] for f in (config_model.list_files_for_param('recurs_file', []))] self.assertCountEqual(['file1', 'file2'], file_names)
def test_list_files_when_unaccessible_parent(self): create_files(['abc'], os.path.join('some', 'nested', 'folder')) config = _create_parameter_model(recursive=True) protected_dir = os.path.join(test_utils.temp_folder, 'some') os.chmod(protected_dir, stat.S_IWRITE) try: self.assertRaises(InvalidValueException, config.list_files, ['some', 'nested', 'folder']) finally: os.chmod(protected_dir, stat.S_IWRITE | stat.S_IEXEC | stat.S_IREAD)
def test_list_files_unaccessible_dir(self): create_files(['file1'], os.path.join('public')) create_files(['file2'], os.path.join('private')) config = _create_parameter_model(recursive=True) private_path = os.path.join(test_utils.temp_folder, 'private') os.chmod(private_path, stat.S_IWRITE) try: files = config.list_files([]) self.assertCountEqual([ _dir('public'), _dir('private', readable=False)], files) finally: os.chmod(private_path, stat.S_IWRITE | stat.S_IEXEC | stat.S_IREAD)
def test_list_files_for_nested_when_file_type_and_extensions(self): create_files(['abc', 'def']) create_files(['xyz.txt', 'def.pdf', 'admin.log'], 'sub') create_files(['grandchild.log'], os.path.join('sub', 'logs')) config = _create_parameter_model(recursive=True, file_type=FILE_TYPE_FILE, extensions=['pdf', 'log']) files = config.list_files(['sub']) self.assertCountEqual([ _file('def.pdf'), _file('admin.log'), _dir('logs')], files)
def test_list_files_1_level(self): config = _create_parameter_model(recursive=True) create_files(['abc.txt', 'def.pdf']) create_files(['admin.log', 'passwords'], 'hidden') create_files(['music.mp3'], 'public') files = config.list_files(['hidden']) self.assertCountEqual([ _file('admin.log'), _file('passwords')], files)
def test_list_files_3_level(self): create_files(['xyz'], os.path.join('my', 'home', 'folder', 'temp')) create_files(['abc', 'def'], os.path.join('my', 'home', 'folder')) create_files(['music.mp3'], os.path.join('my', 'home')) config = _create_parameter_model(recursive=True) files = config.list_files(['my', 'home', 'folder']) self.assertCountEqual([ _file('abc'), _file('def'), _dir('temp')], files)
def test_list_files_with_nested_structure(self): config = _create_parameter_model(recursive=True) create_files(['abc.txt', 'def.pdf']) create_files(['admin.log'], 'hidden') create_files(['music.mp3'], 'public') files = config.list_files([]) self.assertCountEqual( [_file('abc.txt'), _file('def.pdf'), _dir('hidden'), _dir('public')], files)
def test_list_files_for_non_recursive(self): create_files(['abc', 'def']) config = _create_parameter_model(recursive=False) self.assertRaises(WrongParameterUsageException, config.list_files, [])
def test_list_files_fails_when_relative_path(self): create_files(['abc'], 'my_folder') config = _create_parameter_model(recursive=True) self.assertRaises(InvalidValueException, config.list_files, ['.', 'my_folder'])
def test_validate_success_when_file_type_dir(self): create_files(['.passwords'], 'private') create_files(['tasks.list']) config = _create_parameter_model(recursive=True, file_type=FILE_TYPE_DIR) self.assertIsNone(config.validate_value(['private']))
def test_validate_success_when_file_type_file(self): create_files(['abc.txt', 'admin.log'], 'home') create_files(['.passwords'], os.path.join('home', 'private')) config = _create_parameter_model(recursive=True, file_type=FILE_TYPE_FILE) self.assertIsNone(config.validate_value(['home', 'abc.txt']))
def test_list_files_when_folder_with_dot(self): create_files(['abc'], '.my_folder') config = _create_parameter_model(recursive=True) files = config.list_files(['.my_folder']) self.assertCountEqual([_file('abc')], files)
def test_validate_fail_when_extensions(self): create_files(['abc.txt', 'admin.log', 'doc.pdf'], 'home') config = _create_parameter_model(recursive=True, extensions='log') error = config.validate_value(['home', 'abc.txt']) self.assertRegex(error, '.+ is not allowed')
def test_list_files_when_not_directory(self): create_files(['abc']) config = _create_parameter_model(recursive=True) self.assertRaises(InvalidValueException, config.list_files, ['abc'])
def test_validate_success_when_file_type_dir_and_extensions(self): create_files(['.passwords'], 'private') create_files(['admin.log', 'file.txt', 'print.pdf']) config = _create_parameter_model(recursive=True, file_type=FILE_TYPE_DIR, extensions=['txt']) self.assertIsNone(config.validate_value(['file.txt']))
def test_validate_success_when_extensions(self): create_files(['abc.txt', 'admin.log', 'doc.pdf'], 'home') config = _create_parameter_model(recursive=True, extensions='txt') self.assertIsNone(config.validate_value(['home', 'abc.txt']))
def test_validate_existing_top_file(self): create_files(['abc']) config = _create_parameter_model(recursive=True) self.assertIsNone(config.validate_value(['abc']))
def test_validate_existing_nested_file(self): create_files(['abc.txt'], os.path.join('my', 'nested', 'folder')) config = _create_parameter_model(recursive=True) self.assertIsNone(config.validate_value(['my', 'nested', 'folder', 'abc.txt']))
def test_validate_fail_when_relative_reference(self): create_files(['abc.txt']) config = _create_parameter_model(recursive=True) error = config.validate_value(['..', test_utils.temp_folder, 'abc.txt']) self.assertEqual('Relative path references are not allowed', error)
def test_multiple_files(self): test_utils.create_files(['My.txt', 'file.dat', 'test.sh']) test_utils.create_dir('documents') files = model_helper.list_files(test_utils.temp_folder) self.assertEqual(['documents', 'file.dat', 'My.txt', 'test.sh'], files)
def test_allowed_values(self): create_files(['abc', 'xyz', 'def']) config = _create_parameter_model(recursive=False) self.assertEqual(['abc', 'def', 'xyz'], config.values)