Ejemplo n.º 1
0
class TestRuleKey(_TestBase):

    names = _direct_names
    ignore_missing = [
        i.name for i in rules.values()
        if normalize(i.name) in [normalize(i) for i in bad_metadata]
    ]

    @foreach(names)
    def test_package(self, name):
        assert normalize(name) == name
        self._test_names([name], ignore_not_found=name in self.ignore_missing)
Ejemplo n.º 2
0
def _collate_preload():
    packages = []
    for rule in rules.values():
        if rule.preload:
            packages += [i for i in rule.preload if normalize(i) not in rules]

    return sorted(set(packages))
Ejemplo n.º 3
0
    def test_package(self, name):
        expected = self.expected[name]

        url = self._get_scm(name)

        self.assertIsNotNone(url)
        self.assertInsensitiveEqual(url, expected)

        normalised_name = normalize(name)
        fetch_list = _fetch_mapping[normalised_name]
        self.assertFalse(fetch_list)

        self._check_result(name, url)

        if PY2:
            return

        if isinstance(expected, str):
            self.assertLess(
                _compute_similarity(name, expected),
                0.05,
                "{} - {} should be moved to name mismatches".format(name, expected),
            )
        else:
            for i in expected:
                self.assertLess(
                    _compute_similarity(name, i),
                    0.05,
                    "{} - {} should be moved to name mismatches".format(name, expected),
                )
Ejemplo n.º 4
0
    def test_package(self, name):
        expected = self.expected[name]

        try:
            url = self._get_scm(name)
        except unittest.SkipTest:
            raise
        except Exception:
            if name in self.expected_failures:
                return
            raise

        if name in self.expected_failures:
            return

        self.assertIsNotNone(url)
        self.assertInsensitiveEqual(url, expected)
        if isinstance(expected, str):
            self.assertIn("/", expected, "{} should be {}".format(expected, url))

        normalised_name = normalize(name)
        fetch_list = _fetch_mapping[normalised_name]
        self.assertFalse(fetch_list)

        if normalised_name in missing_repos:
            pass
        elif url.startswith("https://github.com/"):
            slug = url[len("https://github.com/") :]
            rv = self._check_github_repo(slug)

            self.assertTrue(rv)

            try:
                rv = self._check_github_setuppy(slug, normalised_name)
            except GitHubAPIMessage as e:
                raise unittest.SkipTest(str(e))

            if rv is False:
                return
            self.assertTrue(rv)

        else:
            r = web_session.get(url)
            r.raise_for_status()

        if PY2:
            return

        if isinstance(expected, str):
            self.assertGreater(_compute_similarity(name, expected), 0.05)
        else:
            highest = 0
            for i in expected:
                val = _compute_similarity(name, i)
                highest = max(highest, val)
            self.assertGreater(highest, 0.05)
Ejemplo n.º 5
0
    def test_package(self, name):
        expected = self.expected[name]

        url = self._test_package(name)

        if name in self.expected_failures:
            return

        self.assertIsNotNone(url)
        self.assertInsensitiveEqual(url, expected)
        if isinstance(expected, str):
            self.assertIn("/", expected, "{} should be {}".format(expected, url))

        normalised_name = normalize(name)
        fetch_list = _fetch_mapping[normalised_name]

        self.assertTrue(fetch_list)

        if normalised_name in missing_repos:
            pass
        elif url.startswith("https://github.com/"):
            slug = url[len("https://github.com/") :]
            rv = self._check_github_repo(slug)

            self.assertTrue(rv)

            try:
                rv = self._check_github_setuppy(slug, normalised_name)
            except GitHubAPIMessage as e:
                raise unittest.SkipTest(str(e))

            if rv is False:
                return
            self.assertTrue(rv)

        elif url == "https://wiki.mozilla.org/Auto-tools/Projects/Mozbase":
            # Fetching is a bit slow, and failures for moz* are very repetitive
            pass
        else:
            r = web_session.get(url)
            r.raise_for_status()

        if PY2:
            return

        if isinstance(expected, str):
            self.assertGreater(_compute_similarity(name, expected), 0.05)
        else:
            highest = 0
            for i in expected:
                val = _compute_similarity(name, i)
                highest = max(highest, val)
            self.assertGreater(highest, 0.05)
Ejemplo n.º 6
0
    def _check_github_setuppy(self, slug, rule):
        if not isinstance(rule, Rule):
            normalised_name = rule
            rule = rules.get(normalised_name)
            if not rule:
                rule = DefaultRule(normalised_name)

        for setuppy_rule in setuppy_mismatches:
            setuppy_rule = normalize(setuppy_rule.strip("$"))
            if rule.key.startswith(setuppy_rule):
                return False

        matches = [rule.key]
        if normalised_name in setuppy_mismatches_xstatic:
            matches = ["xstatic-pkg", normalised_name[8:]]

        filenames = None
        try:
            filenames = [rule.repo_filename]
        except AttributeError:
            pass

        try:
            rv = get_repo_setuppy(slug, matches, filenames)
        except GitHubAPIMessage as e:
            raise unittest.SkipTest(str(e))
        except HTTPError as e:
            if "403" in str(e):
                raise unittest.SkipTest(str(e))
            raise

        if rv is not None:
            match_results = [match in normalize(rv) for match in matches]
            assert all(match_results), "{}: {} not in:\n{}".format(
                rule.key, matches, rv)

        return rv
Ejemplo n.º 7
0
    def test_package(self, name):
        expected = self.expected[name]

        url = self._get_scm(name)

        self.assertIsNotNone(url)
        self.assertInsensitiveEqual(url, expected)

        normalised_name = normalize(name)
        fetch_list = _fetch_mapping[normalised_name]
        self.assertTrue(fetch_list)

        if normalised_name in missing_repos:
            pass
        elif url.startswith("https://github.com/"):
            slug = url[len("https://github.com/") :]
            rv = self._check_github_repo(slug)

            self.assertTrue(rv)

            try:
                rv = self._check_github_setuppy(slug, normalised_name)
            except GitHubAPIMessage as e:
                raise unittest.SkipTest(str(e))

            if rv is False:
                return
            self.assertTrue(rv)

        else:
            r = web_session.get(url)
            r.raise_for_status()

        if PY2:
            return

        if isinstance(expected, str):
            self.assertLess(
                _compute_similarity(name, expected),
                0.05,
                "{} - {} should be moved to name mismatches".format(name, expected),
            )
        else:
            for i in expected:
                self.assertLess(
                    _compute_similarity(name, i),
                    0.05,
                    "{} - {} should be moved to name mismatches".format(name, expected),
                )
Ejemplo n.º 8
0
    def _check_result(self, name, url):
        normalised_name = normalize(name)

        r = None
        if normalised_name in missing_repos:
            pass
        elif url.startswith("https://github.com/"):
            slug = url[len("https://github.com/") :]
            rv = self._check_github_repo(slug)

            self.assertTrue(rv)

            try:
                rv = self._check_github_setuppy(slug, normalised_name)
            except GitHubAPIMessage as e:
                raise unittest.SkipTest(str(e))

            if rv is False:
                return
            self.assertTrue(rv)

        else:
            r = web_session.get(url, allow_redirects=False)

        if r is not None:
            r.raise_for_status()
            self.assertEqual(r.url, url)
            location = r.headers.get("location")
            if location:
                self.assertIn(r.status_code, [301, 302])
                location = location.replace(
                    "code.google.com/archive/p/", "code.google.com/p/"
                )
                self.assertIn(location, [url, url + "/"])
            else:
                self.assertEqual(r.status_code, 200)
Ejemplo n.º 9
0
 def test_package(self, name):
     assert normalize(name) == name
     self._test_names([name])
Ejemplo n.º 10
0
 def test_package(self, name):
     assert normalize(name) == name
     self._test_names([name], ignore_not_found=name in self.ignore_missing)
Ejemplo n.º 11
0
def normalise_list(in_list):
    return [normalize(name) for name in in_list]
Ejemplo n.º 12
0
    def _test_names(self, names, ignore_not_found=False, ignore_setuppy=False):
        assert len(names) == 1
        expected_failures = [normalize(i) for i in self.expected_failures]

        name = names[0]
        normalised_name = normalize(name)

        try:
            url = self._get_scm(name)
        except unittest.SkipTest:
            raise
        except InvalidPackage:
            if (normalised_name in expected_failures or self._ignore_invalid
                    or ignore_not_found):
                return

            raise
        except IncompletePackageMetadata:
            if PY2:
                return
            if (normalised_name in expected_failures or self._ignore_invalid
                    or self._allow_missing or ignore_not_found):
                return

            raise
        except Exception:
            if PY2 or normalised_name in expected_failures:
                return

            raise

        if not url:
            if (normalised_name in expected_failures or self._allow_missing
                    or ignore_not_found):
                return

            assert False, name

        if normalised_name in missing_repos or normalised_name in expected_failures:
            return

        if name in wrong_result:
            return

        distance = _compute_similarity(name, url)

        if distance < 0.1:
            pass
        else:
            normalised_name = normalize(name)
            mismatch_urls = [
                value for key, value in mismatch.items()
                if normalize(key) == normalised_name
            ]
            if url.lower() in [
                    "https://github.com/azure/azure-sdk-for-python",
                    "https://github.com/azure/azure-cli",
            ]:
                return
            elif mismatch_urls:
                if (url not in multipackage_repos
                        and url.lower() not in multipackage_repos):
                    assert len(mismatch_urls) == 1, "{} matched {}".format(
                        name, mismatch_urls)
                expected_url = mismatch_urls[0]
                self.assertInsensitiveEqual(url, expected_url)
            else:
                if True:
                    for rule in setuppy_mismatches:
                        if rule.endswith("-") and normalised_name.startswith(
                                rule):
                            break
                    else:
                        raise Exception(
                            '"{}": "{}" should be in mismatches'.format(
                                name, url))

        if url.startswith("https://github.com/"):

            slug = url[len("https://github.com/"):]
            try:
                rv = self._check_github_repo(slug)
            except unittest.SkipTest:
                raise
            except Exception:
                rv = None
            if not rv:
                if PY2 or name in self.expected_failures:
                    return
                elif name in wrong_result:
                    return
                elif ignore_setuppy:
                    return
                assert False, slug

            self._check_github_setuppy(slug, normalised_name)

        else:
            r = web_session.get(url, timeout=get_timeout(url))
            r.raise_for_status()