示例#1
0
 def test_combined(self):
     l = ["blarn", "me/cows", "WI/cows", "madison",
         "belleville/cows", "verona/cows"]
     self.uril.add_uri("blarn")
     self.uril.add_mirror(fetch.mirror(["me", "WI"], "asdf"))
     self.uril.add_uri("madison")
     self.uril.add_mirror(fetch.default_mirror(
         ["belleville", "verona"], "foon"))
     self.assertUri(self.uril, l)
示例#2
0
 def test_combined(self):
     l = ["blarn", "me/cows", "WI/cows", "madison",
         "belleville/cows", "verona/cows"]
     self.uril.add_uri("blarn")
     self.uril.add_mirror(fetch.mirror(["me", "WI"], "asdf"))
     self.uril.add_uri("madison")
     self.uril.add_mirror(fetch.default_mirror(
         ["belleville", "verona"], "foon"))
     self.assertUri(self.uril, l)
示例#3
0
    def __init__(self, parent, cachedb, eclass_cache, mirrors, default_mirrors, *args, **kwargs):
        super(package_factory, self).__init__(parent, *args, **kwargs)
        self._cache = cachedb
        self._ecache = eclass_cache

        if mirrors:
            mirrors = dict((k, mirror(v, k)) for k, v in mirrors.iteritems())

        self.mirrors = mirrors
        if default_mirrors:
            self.default_mirrors = default_mirror(default_mirrors, "conf. default mirror")
        else:
            self.default_mirrors = None
示例#4
0
    def __init__(self, parent, cachedb, eclass_cache, mirrors, default_mirrors,
                 *args, **kwargs):
        super().__init__(parent, *args, **kwargs)
        self._cache = cachedb
        self._ecache = eclass_cache

        if mirrors:
            mirrors = {k: fetch.mirror(v, k) for k, v in mirrors.items()}

        self.mirrors = mirrors
        if default_mirrors:
            self.default_mirrors = fetch.default_mirror(default_mirrors, "conf. default mirror")
        else:
            self.default_mirrors = None
示例#5
0
    def test_fetchables(self):
        l = []
        def f(self, cpv, allow_missing=False):
            l.append(cpv)
            return allow_missing, {'monkey.tgz': {}, 'boon.tgz': {}, 'foon.tar.gz': {}}
        repo = self.make_parent(_get_digests=f)
        parent = self.make_parent(_parent_repo=repo)
        # verify it does digest lookups...
        o = self.get_pkg({'SRC_URI': 'http://foo.com/bar.tgz'}, repo=parent)
        with pytest.raises(errors.MetadataException):
            getattr(o, 'fetchables')
        assert l == [o]

        # basic tests;
        for x in range(0, 3):
            f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz',
                'EAPI': str(x)},
                 repo=parent).fetchables
            assert list(f[0].uri) == ['http://foo.com/monkey.tgz']
            assert f[0].filename == 'monkey.tgz'

        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz '
            'http://dar/boon.tgz', 'EAPI': '2'},
             repo=parent).fetchables
        assert [list(x.uri) for x in f] == [['http://foo.com/monkey.tgz'], ['http://dar/boon.tgz']]
        assert [x.filename for x in f] == ['monkey.tgz', 'boon.tgz']

        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz -> foon.tar.gz',
            'EAPI': '2'},
             repo=parent).fetchables
        assert list(f[0].uri) == ['http://foo.com/monkey.tgz']
        assert f[0].filename == 'foon.tar.gz'

        o = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz -> ',
            'EAPI': '2'}, repo=parent)
        with pytest.raises(errors.MetadataException):
            getattr(o, 'fetchables')

        # verify it collapses multiple basenames down to the same.
        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz '
            'http://foo.com2/monkey.tgz'}, repo=parent).fetchables
        assert list(f[0].uri) == ['http://foo.com/monkey.tgz', 'http://foo.com2/monkey.tgz']

        mirror = fetch.mirror(['http://boon.com/'], 'mirror1')
        parent = self.make_parent(_parent_repo=repo, mirrors={'mirror1': mirror})

        f = self.get_pkg(
            {'SRC_URI': 'mirror://mirror1/foon/monkey.tgz'}, repo=parent).fetchables
        assert list(f[0].uri) == ['http://boon.com/foon/monkey.tgz']

        # unknown mirrors get ignored (and flagged by pkgcheck)
        pkg = self.get_pkg({'SRC_URI': 'mirror://mirror2/foon/monkey.tgz'}, repo=parent)
        assert pkg.fetchables

        assert (
            [list(x.uri) for x in self.get_pkg(
                {'EAPI': '2', 'SRC_URI': 'mirror://mirror1/monkey.tgz -> foon.tar.gz'},
                repo=parent).fetchables] ==
            [['http://boon.com/monkey.tgz']])

        parent = self.make_parent(_parent_repo=repo,
            mirrors={'mirror1': mirror}, default_mirrors=fetch.default_mirror(
                ['http://default.com/dist/', 'http://default2.com/'],
                'default'))

        assert (
            [list(x.uri) for x in self.get_pkg(
                {'EAPI': '2', 'SRC_URI': 'mirror://mirror1/monkey.tgz -> foon.tar.gz'},
                repo=parent).fetchables] ==
            [[
                'http://default.com/dist/foon.tar.gz',
                'http://default2.com/foon.tar.gz',
                'http://boon.com/monkey.tgz']])

        parent = self.make_parent(_parent_repo=repo, default_mirrors=mirror)
        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz'},
            repo=parent).fetchables
        assert list(f[0].uri) == ['http://boon.com/monkey.tgz', 'http://foo.com/monkey.tgz']

        # skip default mirrors
        pkg = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz'}, repo=parent)
        f = pkg._get_attr['fetchables'](pkg, skip_default_mirrors=True)
        assert list(f[0].uri) == ['http://foo.com/monkey.tgz']

        # test primaryuri...
        mirror2 = fetch.mirror(['http://boon2.com/'], 'default')
        parent = self.make_parent(_parent_repo=repo, default_mirrors=mirror,
            mirrors={'mirror1': mirror2})
        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz '
            'mirror://mirror1/boon.tgz', 'RESTRICT': 'primaryuri'},
            repo=parent).fetchables
        assert list(f[0].uri) == ['http://foo.com/monkey.tgz', 'http://boon.com/monkey.tgz']
        assert list(f[1].uri) == ['http://boon2.com/boon.tgz', 'http://boon.com/boon.tgz']
        assert len(f) == 2

        # restrict=mirror..
        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz',
            'RESTRICT': 'mirror'}, repo=parent).fetchables
        assert list(f[0].uri) == ['http://foo.com/monkey.tgz']
        assert len(f) == 1

        # test uri for when there *is* no uri
        f = self.get_pkg({'SRC_URI': 'monkey.tgz'}, repo=parent).fetchables
        assert list(f[0].uri) == []
示例#6
0
    def test_fetchables(self):
        l = []
        def f(self, cpv, allow_missing=False):
            l.append(cpv)
            return allow_missing, {'monkey.tgz': {}, 'boon.tgz': {}, 'foon.tar.gz': {}}
        repo = self.make_parent(_get_digests=f)
        parent = self.make_parent(_parent_repo=repo)
        # verify it does digest lookups...
        o = self.get_pkg({'SRC_URI':'http://foo.com/bar.tgz'}, repo=parent)
        self.assertRaises(errors.MetadataException, getattr, o, 'fetchables')
        self.assertEqual(l, [o])

        # basic tests;
        for x in xrange(0,3):
            f = self.get_pkg({'SRC_URI':'http://foo.com/monkey.tgz',
                'EAPI':str(x)},
                 repo=parent).fetchables
            self.assertEqual(list(f[0].uri), ['http://foo.com/monkey.tgz'])
            self.assertEqual(f[0].filename, 'monkey.tgz')

        f = self.get_pkg({'SRC_URI':'http://foo.com/monkey.tgz '
            'http://dar/boon.tgz', 'EAPI':'2'},
             repo=parent).fetchables
        self.assertEqual([list(x.uri) for x in f],
            [['http://foo.com/monkey.tgz'], ['http://dar/boon.tgz']])
        self.assertEqual([x.filename for x in f],
            ['monkey.tgz', 'boon.tgz'])

        f = self.get_pkg({'SRC_URI':'http://foo.com/monkey.tgz -> foon.tar.gz',
            'EAPI':'2'},
             repo=parent).fetchables
        self.assertEqual(list(f[0].uri), ['http://foo.com/monkey.tgz'])
        self.assertEqual(f[0].filename, 'foon.tar.gz')

        o = self.get_pkg({'SRC_URI':'http://foo.com/monkey.tgz -> ',
            'EAPI':'2'}, repo=parent)
        self.assertRaises(errors.MetadataException, getattr, o, 'fetchables')

        # verify it collapses multiple basenames down to the same.
        f = self.get_pkg({'SRC_URI':'http://foo.com/monkey.tgz '
            'http://foo.com2/monkey.tgz'}, repo=parent).fetchables
        self.assertEqual(list(f[0].uri), ['http://foo.com/monkey.tgz',
            'http://foo.com2/monkey.tgz'])

        mirror = fetch.mirror(['http://boon.com/'], 'mirror1')
        parent = self.make_parent(_parent_repo=repo, mirrors={
            'mirror1': mirror})

        f = self.get_pkg({'SRC_URI': 'mirror://mirror1/foon/monkey.tgz'},
            repo=parent).fetchables
        self.assertEqual(list(f[0].uri), ['http://boon.com/foon/monkey.tgz'])

        # assert it bails if mirror doesn't exist.
        self.assertRaises(errors.MetadataException, getattr, self.get_pkg(
                {'SRC_URI':'mirror://mirror2/foon/monkey.tgz'},
                repo=parent), 'fetchables')

        self.assertEqual([list(x.uri) for x in self.get_pkg({'EAPI':'2',
            'SRC_URI': 'mirror://mirror1/monkey.tgz -> foon.tar.gz'},
            repo=parent).fetchables],
            [['http://boon.com/monkey.tgz']])

        parent = self.make_parent(_parent_repo=repo,
            mirrors={'mirror1':mirror}, default_mirrors=fetch.default_mirror(
                ['http://default.com/dist/', 'http://default2.com/'],
                'default'))

        self.assertEqual([list(x.uri) for x in self.get_pkg({'EAPI':'2',
            'SRC_URI': 'mirror://mirror1/monkey.tgz -> foon.tar.gz'},
            repo=parent).fetchables],
            [['http://default.com/dist/foon.tar.gz',
            'http://default2.com/foon.tar.gz',
            'http://boon.com/monkey.tgz']])

        parent = self.make_parent(_parent_repo=repo, default_mirrors=mirror)
        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz'},
            repo=parent).fetchables
        self.assertEqual(list(f[0].uri), ['http://boon.com/monkey.tgz',
            'http://foo.com/monkey.tgz'])

        # test primaryuri...
        mirror2 = fetch.mirror(['http://boon2.com/'], 'default')
        parent = self.make_parent(_parent_repo=repo, default_mirrors=mirror,
            mirrors={'mirror1':mirror2})
        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz '
            'mirror://mirror1/boon.tgz', 'RESTRICT':'primaryuri'},
            repo=parent).fetchables
        self.assertEqual(list(f[0].uri),
            ['http://foo.com/monkey.tgz', 'http://boon.com/monkey.tgz'])
        self.assertEqual(list(f[1].uri),
            ['http://boon2.com/boon.tgz', 'http://boon.com/boon.tgz'])
        self.assertEqual(len(f), 2)

        # restrict=mirror..
        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz',
            'RESTRICT': 'mirror'}, repo=parent).fetchables
        self.assertEqual(list(f[0].uri),
            ['http://foo.com/monkey.tgz'])
        self.assertEqual(len(f), 1)

        # test uri for when there *is* no uri
        f = self.get_pkg({'SRC_URI': 'monkey.tgz'}, repo=parent).fetchables
        self.assertEqual(list(f[0].uri), [])
示例#7
0
    def test_fetchables(self):
        l = []

        def f(self, cpv, allow_missing=False):
            l.append(cpv)
            return allow_missing, {"monkey.tgz": {}, "boon.tgz": {}, "foon.tar.gz": {}}

        repo = self.make_parent(_get_digests=f)
        parent = self.make_parent(_parent_repo=repo)
        # verify it does digest lookups...
        o = self.get_pkg({"SRC_URI": "http://foo.com/bar.tgz"}, repo=parent)
        self.assertRaises(errors.MetadataException, getattr, o, "fetchables")
        self.assertEqual(l, [o])

        # basic tests;
        for x in xrange(0, 3):
            f = self.get_pkg({"SRC_URI": "http://foo.com/monkey.tgz", "EAPI": str(x)}, repo=parent).fetchables
            self.assertEqual(list(f[0].uri), ["http://foo.com/monkey.tgz"])
            self.assertEqual(f[0].filename, "monkey.tgz")

        f = self.get_pkg(
            {"SRC_URI": "http://foo.com/monkey.tgz " "http://dar/boon.tgz", "EAPI": "2"}, repo=parent
        ).fetchables
        self.assertEqual([list(x.uri) for x in f], [["http://foo.com/monkey.tgz"], ["http://dar/boon.tgz"]])
        self.assertEqual([x.filename for x in f], ["monkey.tgz", "boon.tgz"])

        f = self.get_pkg({"SRC_URI": "http://foo.com/monkey.tgz -> foon.tar.gz", "EAPI": "2"}, repo=parent).fetchables
        self.assertEqual(list(f[0].uri), ["http://foo.com/monkey.tgz"])
        self.assertEqual(f[0].filename, "foon.tar.gz")

        o = self.get_pkg({"SRC_URI": "http://foo.com/monkey.tgz -> ", "EAPI": "2"}, repo=parent)
        self.assertRaises(errors.MetadataException, getattr, o, "fetchables")

        # verify it collapses multiple basenames down to the same.
        f = self.get_pkg({"SRC_URI": "http://foo.com/monkey.tgz " "http://foo.com2/monkey.tgz"}, repo=parent).fetchables
        self.assertEqual(list(f[0].uri), ["http://foo.com/monkey.tgz", "http://foo.com2/monkey.tgz"])

        mirror = fetch.mirror(["http://boon.com/"], "mirror1")
        parent = self.make_parent(_parent_repo=repo, mirrors={"mirror1": mirror})

        f = self.get_pkg({"SRC_URI": "mirror://mirror1/foon/monkey.tgz"}, repo=parent).fetchables
        self.assertEqual(list(f[0].uri), ["http://boon.com/foon/monkey.tgz"])

        # assert it bails if mirror doesn't exist.
        self.assertRaises(
            errors.MetadataException,
            getattr,
            self.get_pkg({"SRC_URI": "mirror://mirror2/foon/monkey.tgz"}, repo=parent),
            "fetchables",
        )

        self.assertEqual(
            [
                list(x.uri)
                for x in self.get_pkg(
                    {"EAPI": "2", "SRC_URI": "mirror://mirror1/monkey.tgz -> foon.tar.gz"}, repo=parent
                ).fetchables
            ],
            [["http://boon.com/monkey.tgz"]],
        )

        parent = self.make_parent(
            _parent_repo=repo,
            mirrors={"mirror1": mirror},
            default_mirrors=fetch.default_mirror(["http://default.com/dist/", "http://default2.com/"], "default"),
        )

        self.assertEqual(
            [
                list(x.uri)
                for x in self.get_pkg(
                    {"EAPI": "2", "SRC_URI": "mirror://mirror1/monkey.tgz -> foon.tar.gz"}, repo=parent
                ).fetchables
            ],
            [["http://default.com/dist/foon.tar.gz", "http://default2.com/foon.tar.gz", "http://boon.com/monkey.tgz"]],
        )

        parent = self.make_parent(_parent_repo=repo, default_mirrors=mirror)
        f = self.get_pkg({"SRC_URI": "http://foo.com/monkey.tgz"}, repo=parent).fetchables
        self.assertEqual(list(f[0].uri), ["http://boon.com/monkey.tgz", "http://foo.com/monkey.tgz"])

        # test primaryuri...
        mirror2 = fetch.mirror(["http://boon2.com/"], "default")
        parent = self.make_parent(_parent_repo=repo, default_mirrors=mirror, mirrors={"mirror1": mirror2})
        f = self.get_pkg(
            {"SRC_URI": "http://foo.com/monkey.tgz " "mirror://mirror1/boon.tgz", "RESTRICT": "primaryuri"}, repo=parent
        ).fetchables
        self.assertEqual(list(f[0].uri), ["http://foo.com/monkey.tgz", "http://boon.com/monkey.tgz"])
        self.assertEqual(list(f[1].uri), ["http://boon2.com/boon.tgz", "http://boon.com/boon.tgz"])
        self.assertEqual(len(f), 2)

        # restrict=mirror..
        f = self.get_pkg({"SRC_URI": "http://foo.com/monkey.tgz", "RESTRICT": "mirror"}, repo=parent).fetchables
        self.assertEqual(list(f[0].uri), ["http://foo.com/monkey.tgz"])
        self.assertEqual(len(f), 1)

        # test uri for when there *is* no uri
        f = self.get_pkg({"SRC_URI": "monkey.tgz"}, repo=parent).fetchables
        self.assertEqual(list(f[0].uri), [])
示例#8
0
    def test_fetchables(self):
        l = []
        def f(self, cpv, allow_missing=False):
            l.append(cpv)
            return allow_missing, {'monkey.tgz': {}, 'boon.tgz': {}, 'foon.tar.gz': {}}
        repo = self.make_parent(_get_digests=f)
        parent = self.make_parent(_parent_repo=repo)
        # verify it does digest lookups...
        o = self.get_pkg({'SRC_URI':'http://foo.com/bar.tgz'}, repo=parent)
        self.assertRaises(errors.MetadataException, getattr, o, 'fetchables')
        self.assertEqual(l, [o])

        # basic tests;
        for x in xrange(0,3):
            f = self.get_pkg({'SRC_URI':'http://foo.com/monkey.tgz',
                'EAPI':str(x)},
                 repo=parent).fetchables
            self.assertEqual(list(f[0].uri), ['http://foo.com/monkey.tgz'])
            self.assertEqual(f[0].filename, 'monkey.tgz')

        f = self.get_pkg({'SRC_URI':'http://foo.com/monkey.tgz '
            'http://dar/boon.tgz', 'EAPI':'2'},
             repo=parent).fetchables
        self.assertEqual([list(x.uri) for x in f],
            [['http://foo.com/monkey.tgz'], ['http://dar/boon.tgz']])
        self.assertEqual([x.filename for x in f],
            ['monkey.tgz', 'boon.tgz'])

        f = self.get_pkg({'SRC_URI':'http://foo.com/monkey.tgz -> foon.tar.gz',
            'EAPI':'2'},
             repo=parent).fetchables
        self.assertEqual(list(f[0].uri), ['http://foo.com/monkey.tgz'])
        self.assertEqual(f[0].filename, 'foon.tar.gz')

        o = self.get_pkg({'SRC_URI':'http://foo.com/monkey.tgz -> ',
            'EAPI':'2'}, repo=parent)
        self.assertRaises(errors.MetadataException, getattr, o, 'fetchables')

        # verify it collapses multiple basenames down to the same.
        f = self.get_pkg({'SRC_URI':'http://foo.com/monkey.tgz '
            'http://foo.com2/monkey.tgz'}, repo=parent).fetchables
        self.assertEqual(list(f[0].uri), ['http://foo.com/monkey.tgz',
            'http://foo.com2/monkey.tgz'])

        mirror = fetch.mirror(['http://boon.com/'], 'mirror1')
        parent = self.make_parent(_parent_repo=repo, mirrors={
            'mirror1': mirror})

        f = self.get_pkg({'SRC_URI': 'mirror://mirror1/foon/monkey.tgz'},
            repo=parent).fetchables
        self.assertEqual(list(f[0].uri), ['http://boon.com/foon/monkey.tgz'])

        # assert it bails if mirror doesn't exist.
        self.assertRaises(errors.MetadataException, getattr, self.get_pkg(
                {'SRC_URI':'mirror://mirror2/foon/monkey.tgz'},
                repo=parent), 'fetchables')

        self.assertEqual([list(x.uri) for x in self.get_pkg({'EAPI':'2',
            'SRC_URI': 'mirror://mirror1/monkey.tgz -> foon.tar.gz'},
            repo=parent).fetchables],
            [['http://boon.com/monkey.tgz']])

        parent = self.make_parent(_parent_repo=repo,
            mirrors={'mirror1':mirror}, default_mirrors=fetch.default_mirror(
                ['http://default.com/dist/', 'http://default2.com/'],
                'default'))

        self.assertEqual([list(x.uri) for x in self.get_pkg({'EAPI':'2',
            'SRC_URI': 'mirror://mirror1/monkey.tgz -> foon.tar.gz'},
            repo=parent).fetchables],
            [['http://default.com/dist/foon.tar.gz',
            'http://default2.com/foon.tar.gz',
            'http://boon.com/monkey.tgz']])

        parent = self.make_parent(_parent_repo=repo, default_mirrors=mirror)
        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz'},
            repo=parent).fetchables
        self.assertEqual(list(f[0].uri), ['http://boon.com/monkey.tgz',
            'http://foo.com/monkey.tgz'])

        # test primaryuri...
        mirror2 = fetch.mirror(['http://boon2.com/'], 'default')
        parent = self.make_parent(_parent_repo=repo, default_mirrors=mirror,
            mirrors={'mirror1':mirror2})
        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz '
            'mirror://mirror1/boon.tgz', 'RESTRICT':'primaryuri'},
            repo=parent).fetchables
        self.assertEqual(list(f[0].uri),
            ['http://foo.com/monkey.tgz', 'http://boon.com/monkey.tgz'])
        self.assertEqual(list(f[1].uri),
            ['http://boon2.com/boon.tgz', 'http://boon.com/boon.tgz'])
        self.assertEqual(len(f), 2)

        # restrict=mirror..
        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz',
            'RESTRICT': 'mirror'}, repo=parent).fetchables
        self.assertEqual(list(f[0].uri),
            ['http://foo.com/monkey.tgz'])
        self.assertEqual(len(f), 1)

        # test uri for when there *is* no uri
        f = self.get_pkg({'SRC_URI': 'monkey.tgz'}, repo=parent).fetchables
        self.assertEqual(list(f[0].uri), [])
示例#9
0
    def test_fetchables(self):
        l = []
        def f(self, cpv, allow_missing=False):
            l.append(cpv)
            return allow_missing, {'monkey.tgz': {}, 'boon.tgz': {}, 'foon.tar.gz': {}}
        repo = self.make_parent(_get_digests=f)
        parent = self.make_parent(_parent_repo=repo)
        # verify it does digest lookups...
        o = self.get_pkg({'SRC_URI': 'http://foo.com/bar.tgz'}, repo=parent)
        with pytest.raises(errors.MetadataException):
            getattr(o, 'fetchables')
        assert l == [o]

        # basic tests;
        for x in range(0, 3):
            f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz',
                'EAPI': str(x)},
                 repo=parent).fetchables
            assert list(f[0].uri) == ['http://foo.com/monkey.tgz']
            assert f[0].filename == 'monkey.tgz'

        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz '
            'http://dar/boon.tgz', 'EAPI': '2'},
             repo=parent).fetchables
        assert [list(x.uri) for x in f] == [['http://foo.com/monkey.tgz'], ['http://dar/boon.tgz']]
        assert [x.filename for x in f] == ['monkey.tgz', 'boon.tgz']

        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz -> foon.tar.gz',
            'EAPI': '2'},
             repo=parent).fetchables
        assert list(f[0].uri) == ['http://foo.com/monkey.tgz']
        assert f[0].filename == 'foon.tar.gz'

        o = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz -> ',
            'EAPI': '2'}, repo=parent)
        with pytest.raises(errors.MetadataException):
            getattr(o, 'fetchables')

        # verify it collapses multiple basenames down to the same.
        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz '
            'http://foo.com2/monkey.tgz'}, repo=parent).fetchables
        assert list(f[0].uri) == ['http://foo.com/monkey.tgz', 'http://foo.com2/monkey.tgz']

        mirror = fetch.mirror(['http://boon.com/'], 'mirror1')
        parent = self.make_parent(_parent_repo=repo, mirrors={'mirror1': mirror})

        f = self.get_pkg(
            {'SRC_URI': 'mirror://mirror1/foon/monkey.tgz'}, repo=parent).fetchables
        assert list(f[0].uri) == ['http://boon.com/foon/monkey.tgz']

        # unknown mirrors get ignored (and flagged by pkgcheck)
        pkg = self.get_pkg({'SRC_URI': 'mirror://mirror2/foon/monkey.tgz'}, repo=parent)
        assert pkg.fetchables

        assert (
            [list(x.uri) for x in self.get_pkg(
                {'EAPI': '2', 'SRC_URI': 'mirror://mirror1/monkey.tgz -> foon.tar.gz'},
                repo=parent).fetchables] ==
            [['http://boon.com/monkey.tgz']])

        parent = self.make_parent(_parent_repo=repo,
            mirrors={'mirror1': mirror}, default_mirrors=fetch.default_mirror(
                ['http://default.com/dist/', 'http://default2.com/'],
                'default'))

        assert (
            [list(x.uri) for x in self.get_pkg(
                {'EAPI': '2', 'SRC_URI': 'mirror://mirror1/monkey.tgz -> foon.tar.gz'},
                repo=parent).fetchables] ==
            [[
                'http://default.com/dist/foon.tar.gz',
                'http://default2.com/foon.tar.gz',
                'http://boon.com/monkey.tgz']])

        parent = self.make_parent(_parent_repo=repo, default_mirrors=mirror)
        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz'},
            repo=parent).fetchables
        assert list(f[0].uri) == ['http://boon.com/monkey.tgz', 'http://foo.com/monkey.tgz']

        # skip default mirrors
        pkg = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz'}, repo=parent)
        f = pkg._get_attr['fetchables'](pkg, skip_default_mirrors=True)
        assert list(f[0].uri) == ['http://foo.com/monkey.tgz']

        # test primaryuri...
        mirror2 = fetch.mirror(['http://boon2.com/'], 'default')
        parent = self.make_parent(_parent_repo=repo, default_mirrors=mirror,
            mirrors={'mirror1': mirror2})
        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz '
            'mirror://mirror1/boon.tgz', 'RESTRICT': 'primaryuri'},
            repo=parent).fetchables
        assert list(f[0].uri) == ['http://foo.com/monkey.tgz', 'http://boon.com/monkey.tgz']
        assert list(f[1].uri) == ['http://boon2.com/boon.tgz', 'http://boon.com/boon.tgz']
        assert len(f) == 2

        # restrict=mirror..
        f = self.get_pkg({'SRC_URI': 'http://foo.com/monkey.tgz',
            'RESTRICT': 'mirror'}, repo=parent).fetchables
        assert list(f[0].uri) == ['http://foo.com/monkey.tgz']
        assert len(f) == 1

        # test uri for when there *is* no uri
        f = self.get_pkg({'SRC_URI': 'monkey.tgz'}, repo=parent).fetchables
        assert list(f[0].uri) == []