コード例 #1
0
    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)
コード例 #2
0
    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)
コード例 #3
0
    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)
コード例 #4
0
    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)
コード例 #5
0
    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)
コード例 #6
0
    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)
コード例 #7
0
    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)
コード例 #8
0
    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)
コード例 #9
0
    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)
コード例 #10
0
    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)
コード例 #11
0
    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)
コード例 #12
0
    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)
コード例 #13
0
    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)
コード例 #14
0
    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)
コード例 #15
0
    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)
コード例 #16
0
    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)
コード例 #17
0
    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)
コード例 #18
0
    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)
コード例 #19
0
    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)
コード例 #20
0
    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)
コード例 #21
0
ファイル: test_filters.py プロジェクト: wikieden/lumberyard
    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()
コード例 #22
0
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
コード例 #23
0
    def test_MakeBlacklist_BlacklistFilesIsNone_BlacklistIsNone(self):
        file_approver = FileApprover()

        file_approver.make_blacklist(None)

        self.assertIsNone(file_approver.blacklist)
コード例 #24
0
    def test_MakeWhitelist_WhitelistFilesIsEmptyList_WhitelistIsNone(self):
        file_approver = FileApprover()

        file_approver.make_whitelist([])

        self.assertIsNone(file_approver.whitelist)
コード例 #25
0
    def test_IsInList_PatternsIsEmpty_ReturnsFalse(self):
        in_list = FileApprover.is_in_list("testModule.dll", [])

        self.assertFalse(in_list)
コード例 #26
0
    def test_IsInList_FilenameIsNone_ReturnsFalse(self):
        in_list = FileApprover.is_in_list(None, ['pattern1'])

        self.assertFalse(in_list)
コード例 #27
0
    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")
コード例 #28
0
 def test_GetPatternsFromFile_FilenameIsNone_ThrowsError(self):
     with self.assertRaises(AzTestError) as ex:
         patterns = FileApprover.get_patterns_from_file(None)
コード例 #29
0
    def test_IsBlacklisted_BlacklistIsNone_ReturnTrue(self):
        file_approver = FileApprover()

        blacklisted = file_approver.is_blacklisted(None)

        self.assertFalse(blacklisted)
コード例 #30
0
    def test_IsWhitelisted_WhitelistIsNone_ReturnTrue(self):
        file_approver = FileApprover()

        whitelisted = file_approver.is_whitelisted(None)

        self.assertTrue(whitelisted)