def test_MakeBlacklist_BlacklistFilesIsSinglePath_AddBlacklistCalledWithPath(self, mock_add_blacklist): test_blacklist = "path/to/blacklist" file_approver = FileApprover() file_approver.make_blacklist(test_blacklist) mock_add_blacklist.assert_called_with(test_blacklist)
def test_AddWhitelist_WhitelistFileIsNone_WhitelistIsUnchanged(self): file_approver = FileApprover() file_approver.whitelist = self.get_sample_set() file_approver.add_whitelist(None) self.assertEqual(self.get_sample_set(), file_approver.whitelist)
def test_AddBlacklistPatterns_ValidListOfPatternsBlacklistIsNone_BlacklistHasPatterns(self): file_approver = FileApprover() test_patterns = ["pattern1", "pattern2", "pattern3"] file_approver.add_blacklist_patterns(test_patterns) self.assertSetEqual(set(test_patterns), file_approver.blacklist)
def test_AddBlacklistPatterns_ValidPatternBlacklistIsNone_BlacklistHasPattern(self): file_approver = FileApprover() test_pattern = "pattern1" file_approver.add_blacklist_patterns(test_pattern) self.assertSetEqual({test_pattern}, file_approver.blacklist)
def test_AddWhitelistPatterns_ValidPatternWhitelistIsNone_WhitelistHasPattern(self): file_approver = FileApprover() test_pattern = "pattern1" file_approver.add_whitelist_patterns(test_pattern) self.assertSetEqual({test_pattern}, file_approver.whitelist)
def test_AddBlacklistPatterns_PatternIsNone_BlacklistIsUnchanged(self): file_approver = FileApprover() file_approver.blacklist = self.get_sample_set() file_approver.add_blacklist_patterns(None) self.assertEqual(self.get_sample_set(), file_approver.blacklist)
def test_MakeWhitelist_WhitelistFilesIsSinglePath_AddWhitelistCalledWithPath(self, mock_add_whitelist): test_whitelist = "path/to/whitelist" file_approver = FileApprover() file_approver.make_whitelist(test_whitelist) mock_add_whitelist.assert_called_with(test_whitelist)
def test_IsApproved_FilenameGiven_IsListedCalledWithFilename(self, mock_blacklisted, mock_whitelisted): file_approver = FileApprover() test_filename = "testModule.dll" file_approver.is_approved(test_filename) mock_whitelisted.assert_called_with(test_filename) mock_blacklisted.assert_called_with(test_filename)
def test_AddBlacklist_GetPatternsFromFileReturnsNone_BlacklistIsUnchanged(self, mock_get_patterns): file_approver = FileApprover() file_approver.blacklist = self.get_sample_set() mock_get_patterns.return_value = None file_approver.add_blacklist("path/to/blacklist") self.assertEqual(self.get_sample_set(), file_approver.blacklist)
def test_IsApproved_WhitelistedAndBlacklisted_ReturnFalse(self, mock_blacklisted, mock_whitelisted): mock_whitelisted.return_value = True mock_blacklisted.return_value = True file_approver = FileApprover() approved = file_approver.is_approved(None) self.assertFalse(approved)
def test_AddBlacklistPatterns_ValidListOfPatternsBlacklistHasValues_BlacklistHasNewPatterns(self): file_approver = FileApprover() file_approver.blacklist = self.get_sample_set() test_patterns = ["pattern1", "pattern4", "pattern5"] file_approver.add_blacklist_patterns(test_patterns) expected_patterns = self.get_sample_set() | set(test_patterns) self.assertSetEqual(expected_patterns, file_approver.blacklist)
def test_AddBlacklistPatterns_ValidPatternBlacklistHasValues_BlacklastHasNewPattern(self): file_approver = FileApprover() file_approver.blacklist = self.get_sample_set() test_pattern = "pattern4" file_approver.add_blacklist_patterns(test_pattern) expected_patterns = self.get_sample_set() | {test_pattern} self.assertEqual(expected_patterns, file_approver.blacklist)
def test_AddBlacklist_ValidBlacklistFileAndBlacklistIsNone_BlacklistHasPatterns(self, mock_get_patterns): file_approver = FileApprover() test_patterns = self.get_sample_set() test_filename = "path/to/blacklist" mock_get_patterns.return_value = test_patterns file_approver.add_blacklist(test_filename) mock_get_patterns.assert_called_with(test_filename) self.assertEqual(test_patterns, file_approver.blacklist)
def test_MakeWhitelist_WhitelistFilesIsList_AddWhitelistCalledWithPaths(self, mock_add_whitelist): test_whitelist1 = "path/to/whitelist" test_whitelist2 = "path/to/whitelist/2" test_whitelist3 = "path/to/whitelist/3" test_whitelist_list = [test_whitelist1, test_whitelist2, test_whitelist3] file_approver = FileApprover() file_approver.make_whitelist(test_whitelist_list) expected_whitelists = [mock.call(test_whitelist1), mock.call(test_whitelist2), mock.call(test_whitelist3)] mock_add_whitelist.assert_has_calls(expected_whitelists)
def test_IsBlacklisted_FilenameGiven_IsInListCalledWithFilenameAndReturns(self, mock_in_list): file_approver = FileApprover() test_blacklist = ['testPattern'] file_approver.blacklist = test_blacklist test_filename = "testModule.dll" mock_in_list.return_value = True blacklisted = file_approver.is_blacklisted(test_filename) mock_in_list.assert_called_with(test_filename, test_blacklist) self.assertTrue(blacklisted)
def test_IsWhitelisted_FilenameGiven_IsInListCalledWithFilenameAndReturns(self, mock_in_list): file_approver = FileApprover() test_whitelist = ['testPattern'] file_approver.whitelist = test_whitelist test_filename = "testModule.dll" mock_in_list.return_value = False whitelisted = file_approver.is_whitelisted(test_filename) mock_in_list.assert_called_with(test_filename, test_whitelist) self.assertFalse(whitelisted)
def test_AddBlacklist_ValidBlacklistFileAndBlacklistHasValues_BlacklistHasNewPatterns(self, mock_get_patterns): file_approver = FileApprover() file_approver.blacklist = self.get_sample_set() test_patterns = {'pattern1', 'pattern4'} test_filename = "path/to/blacklist" mock_get_patterns.return_value = test_patterns file_approver.add_blacklist(test_filename) mock_get_patterns.assert_called_with(test_filename) expected_patterns = test_patterns | self.get_sample_set() self.assertEqual(expected_patterns, file_approver.blacklist)
def test_Constructor_PathsGiven_MakeListsCalledWithPaths(self, mock_blacklist, mock_whitelist): test_whitelist = "path/to/whitelist" test_blacklist = "path/to/blacklist" FileApprover(test_whitelist, test_blacklist) mock_whitelist.assert_called_with(test_whitelist) mock_blacklist.assert_called_with(test_blacklist)
def test_GetPatternsFromFile_FilenameGiven_OpenCalledWithFilenameAndReturnsList(self, mock_open, mock_path_exists): mock_path_exists.return_value = True test_filename = "path/to/list" test_file = ["line1\n", "line2\n", "line3\n"] mock_open.return_value.__enter__.return_value.__iter__.return_value = iter(test_file) expected_patterns = set(["line1", "line2", "line3"]) patterns = FileApprover.get_patterns_from_file(test_filename) mock_open.assert_called_with(test_filename, 'r') self.assertSetEqual(expected_patterns, patterns)
def test_IsInList_PatternIsInList_ReturnsTrue(self, mock_match): import re mock_match.return_value = True test_filename = "testModule.dll" test_patterns = ['testModule'] expected_pattern = r"^.*\\testModule(\.dll|\.exe|\.dylib)?$" in_list = FileApprover.is_in_list(test_filename, test_patterns) mock_match.assert_called_with(expected_pattern, test_filename, re.IGNORECASE) self.assertTrue(in_list)
def test_GetPatternsFromFile_FilenameGiven_OpenCalledWithFilenameAndReturnsList( self, mock_path_exists): mock_path_exists.return_value = True test_filename = "path/to/list" test_data = "line1\nline2\nline3\n" mock_open = mock.mock_open(read_data=test_data) try: patcher = mock.patch('__builtin__.open', mock_open) patcher.start() mock_open.return_value.__iter__.return_value = test_data.splitlines( ) except ImportError: # py3 patcher = mock.patch('builtins.open', mock_open) patcher.start() expected_patterns = set(["line1", "line2", "line3"]) patterns = FileApprover.get_patterns_from_file(test_filename) mock_open.assert_called_with(test_filename, 'r') self.assertSetEqual(expected_patterns, patterns) patcher.stop()
def scan(args, extra, output_dir): scanner = Scanner() if not args.runner_path: runner_path = os.path.abspath( os.path.join(args.dir, scanner.__runner_exe__)) else: runner_path = os.path.abspath(args.runner_path) if not os.path.exists(runner_path): logger.exception("Invalid test runner path: {}".format(runner_path)) return bootstrap_config = None if args.bootstrap_config: with open(args.bootstrap_config) as json_file: bootstrap_config = BootstrapConfig(flatten=True) bootstrap_config.load(json.load(json_file)) add_dirs_to_path(args.add_path) scan_results = [] # list of ScanResult() # Create a FileApprover to determine if scanned files can be tested file_approver = FileApprover(args.whitelist, args.whitelist_file, args.blacklist_file, args.include_gems, args.include_projects) module_failures = 0 # Dynamic Libraries / Modules if not __no_dll__: logger.info("Scanning for dynamic libraries") for file_name in scanner.enumerate_modules(args.dir): try: if args.limit and len(scan_results) >= args.limit: continue # reached scanning limit if args.only and not FileApprover.is_in_list( file_name, args.only.split(',')): continue # filename does not match any expected pattern if not file_approver.is_approved(file_name): continue result = scan_one(args, extra, ModuleType.LIBRARY, scanner, runner_path, bootstrap_config, file_name, output_dir) if result: scan_results += [result] if result.return_code != RunnerReturnCodes.TESTS_SUCCEEDED: module_failures += 1 except KeyboardInterrupt: logger.exception("Process interrupted by user.") break except: logger.exception("Module scan failed.") # Executables if args.exe: logger.info("Scanning for executables") for file_name in scanner.enumerate_executables(args.dir): if args.limit and len(scan_results) >= args.limit: continue # reached scanning limit if args.only and not FileApprover.is_in_list( file_name, args.only.split(',')): continue # filename does not match any expected pattern if not file_approver.is_approved(file_name): continue result = scan_one(args, extra, ModuleType.EXECUTABLE, scanner, runner_path, bootstrap_config, file_name, output_dir) if result: scan_results += [result] if result.return_code != RunnerReturnCodes.TESTS_SUCCEEDED: module_failures += 1 # Convert the set of XML files into an HTML report HTMLReporter.create_html_report(scan_results, output_dir) HTMLReporter.create_html_failure_report(scan_results, output_dir) return 1 if module_failures > 0 else 0
def test_MakeBlacklist_BlacklistFilesIsNone_BlacklistIsNone(self): file_approver = FileApprover() file_approver.make_blacklist(None) self.assertIsNone(file_approver.blacklist)
def test_MakeWhitelist_WhitelistFilesIsEmptyList_WhitelistIsNone(self): file_approver = FileApprover() file_approver.make_whitelist([]) self.assertIsNone(file_approver.whitelist)
def test_IsInList_PatternsIsEmpty_ReturnsFalse(self): in_list = FileApprover.is_in_list("testModule.dll", []) self.assertFalse(in_list)
def test_IsInList_FilenameIsNone_ReturnsFalse(self): in_list = FileApprover.is_in_list(None, ['pattern1']) self.assertFalse(in_list)
def test_GetPatternsFromFile_FileDoesNotExist_ThrowsError( self, mock_path_exists): mock_path_exists.return_value = False with self.assertRaises(AzTestError) as ex: patterns = FileApprover.get_patterns_from_file("path/to/list")
def test_GetPatternsFromFile_FilenameIsNone_ThrowsError(self): with self.assertRaises(AzTestError) as ex: patterns = FileApprover.get_patterns_from_file(None)
def test_IsBlacklisted_BlacklistIsNone_ReturnTrue(self): file_approver = FileApprover() blacklisted = file_approver.is_blacklisted(None) self.assertFalse(blacklisted)
def test_IsWhitelisted_WhitelistIsNone_ReturnTrue(self): file_approver = FileApprover() whitelisted = file_approver.is_whitelisted(None) self.assertTrue(whitelisted)