def testDistro(self):
        with output_suppressed():
            native_url = 'http://example.com:8000/Native.xml'

            # Initially, we don't have the feed at all...
            master_feed = self.config.iface_cache.get_feed(native_url)
            assert master_feed is None, master_feed

            trust.trust_db.trust_key(
                'DE937DD411906ACF7C263B396FCF121BE2390E0B', 'example.com:8000')
            self.child = server.handle_requests(
                'Native.xml', '6FCF121BE2390E0B.gpg',
                '/key-info/key/DE937DD411906ACF7C263B396FCF121BE2390E0B')
            policy = Policy(native_url, config=self.config)
            assert policy.need_download()

            solve = policy.solve_with_downloads()
            self.config.handler.wait_for_blocker(solve)
            tasks.check(solve)

            master_feed = self.config.iface_cache.get_feed(native_url)
            assert master_feed is not None
            assert master_feed.implementations == {}

            distro_feed_url = master_feed.get_distro_feed()
            assert distro_feed_url is not None
            distro_feed = self.config.iface_cache.get_feed(distro_feed_url)
            assert distro_feed is not None
            assert len(
                distro_feed.implementations) == 2, distro_feed.implementations
	def testDistro(self):
		with output_suppressed():
			native_url = 'http://example.com:8000/Native.xml'

			# Initially, we don't have the feed at all...
			master_feed = self.config.iface_cache.get_feed(native_url)
			assert master_feed is None, master_feed

			trust.trust_db.trust_key('DE937DD411906ACF7C263B396FCF121BE2390E0B', 'example.com:8000')
			self.child = server.handle_requests('Native.xml', '6FCF121BE2390E0B.gpg', '/key-info/key/DE937DD411906ACF7C263B396FCF121BE2390E0B')
			policy = Policy(native_url, config = self.config)
			assert policy.need_download()

			solve = policy.solve_with_downloads()
			self.config.handler.wait_for_blocker(solve)
			tasks.check(solve)

			master_feed = self.config.iface_cache.get_feed(native_url)
			assert master_feed is not None
			assert master_feed.implementations == {}

			distro_feed_url = master_feed.get_distro_feed()
			assert distro_feed_url is not None
			distro_feed = self.config.iface_cache.get_feed(distro_feed_url)
			assert distro_feed is not None
			assert len(distro_feed.implementations) == 2, distro_feed.implementations
Example #3
0
	def testSource(self):
		iface_cache = self.config.iface_cache

		foo = iface_cache.get_interface('http://foo/Binary.xml')
		self.import_feed(foo.uri, 'Binary.xml')
		foo_src = iface_cache.get_interface('http://foo/Source.xml')
		self.import_feed(foo_src.uri, 'Source.xml')
		compiler = iface_cache.get_interface('http://foo/Compiler.xml')
		self.import_feed(compiler.uri, 'Compiler.xml')

		self.config.freshness = 0
		self.config.network_use = model.network_full
		p = Policy('http://foo/Binary.xml', config = self.config)
		tasks.wait_for_blocker(p.solve_with_downloads())
		assert p.implementation[foo].id == 'sha1=123'

		# Now ask for source instead
		p.requirements.source = True
		p.requirements.command = 'compile'
		tasks.wait_for_blocker(p.solve_with_downloads())
		assert p.solver.ready, p.solver.get_failure_reason()
		assert p.implementation[foo].id == 'sha1=234'		# The source
		assert p.implementation[compiler].id == 'sha1=345'	# A binary needed to compile it
    def testSource(self):
        iface_cache = self.config.iface_cache

        foo = iface_cache.get_interface('http://foo/Binary.xml')
        self.import_feed(foo.uri, 'Binary.xml')
        foo_src = iface_cache.get_interface('http://foo/Source.xml')
        self.import_feed(foo_src.uri, 'Source.xml')
        compiler = iface_cache.get_interface('http://foo/Compiler.xml')
        self.import_feed(compiler.uri, 'Compiler.xml')

        self.config.freshness = 0
        self.config.network_use = model.network_full
        p = Policy('http://foo/Binary.xml', config=self.config)
        tasks.wait_for_blocker(p.solve_with_downloads())
        assert p.implementation[foo].id == 'sha1=123'

        # Now ask for source instead
        p.requirements.source = True
        p.requirements.command = 'compile'
        tasks.wait_for_blocker(p.solve_with_downloads())
        assert p.solver.ready, p.solver.get_failure_reason()
        assert p.implementation[foo].id == 'sha1=234'  # The source
        assert p.implementation[
            compiler].id == 'sha1=345'  # A binary needed to compile it
	def testMirrors(self):
		old_out = sys.stdout
		try:
			sys.stdout = StringIO()
			getLogger().setLevel(ERROR)
			trust.trust_db.trust_key('DE937DD411906ACF7C263B396FCF121BE2390E0B', 'example.com:8000')
			self.child = server.handle_requests(server.Give404('/Hello.xml'), 'latest.xml', '/0mirror/keys/6FCF121BE2390E0B.gpg')
			policy = Policy('http://example.com:8000/Hello.xml', config = self.config)
			self.config.feed_mirror = 'http://example.com:8000/0mirror'

			refreshed = policy.solve_with_downloads()
			policy.handler.wait_for_blocker(refreshed)
			assert policy.ready
		finally:
			sys.stdout = old_out
    def testMirrors(self):
        old_out = sys.stdout
        try:
            sys.stdout = StringIO()
            getLogger().setLevel(ERROR)
            trust.trust_db.trust_key(
                'DE937DD411906ACF7C263B396FCF121BE2390E0B', 'example.com:8000')
            self.child = server.handle_requests(
                server.Give404('/Hello.xml'), 'latest.xml',
                '/0mirror/keys/6FCF121BE2390E0B.gpg')
            policy = Policy('http://example.com:8000/Hello.xml',
                            config=self.config)
            self.config.feed_mirror = 'http://example.com:8000/0mirror'

            refreshed = policy.solve_with_downloads()
            policy.handler.wait_for_blocker(refreshed)
            assert policy.ready
        finally:
            sys.stdout = old_out
Example #7
0
class _SolveLink(_Link):
    name = 'Solve'

    def __init__(self, feed, seed=None):
        _Link.__init__(self)

        self.force = False

        iface_uri = model.canonical_iface_uri(feed)
        self.policy = Policy(iface_uri)
        self.policy.solver.record_details = True

        if seed is not None:
            self.policy.network_use = seed.policy.network_use
            self.policy.handler = seed.policy.handler
            self.force = seed.force

    def attach(self):
        if self.force or not self.policy.ready:
            msg = _('Download feed for service %s:') % \
                    self.get_name()
            self.emit('verbose', msg)
        else:
            msg = _('Download requirements for service %s:') % \
                    self.get_name()
            self.emit('verbose', msg)

        return self.policy.solve_with_downloads(force=self.force)

    def detach(self, blocker):
        if self.policy.solver.ready:
            for iface, __ in self.policy.implementation.items():
                msg = _('* %s done;') % _name(iface.uri)
                self.emit('verbose', msg)
            if self.policy.need_download():
                return [_DownloadLink(self)]
            else:
                return []

        zcompile = _SolveLink(www.IFACE_COMPILE, self)

        # at the end, we should restart current link
        next_links = [_SolveLink(self.policy.root, self)]
        failed = False
        need_build = False

        for iface, impl in self.policy.implementation.items():
            if impl is not None:
                msg = _('* %s done;') % _name(iface.uri)
                self.emit('verbose', msg)
                continue

            if self._has_source(iface):
                msg = _('* %s needs to be built from sources;') % \
                        _name(iface.uri)
                self.emit('verbose', msg)
                next_links.append(_BuildLink(iface.uri, zcompile))
                next_links.append(_SolveSourceLink(iface.uri, self))
                need_build = True
            else:
                reason = self.policy.solver.details.get(iface) or _('Unknown')
                msg = _('* %s failed to resolve due to "%s";') % \
                        (_name(iface.uri), reason)
                self.emit('verbose', msg)
                failed = True

        if failed and not need_build:
            return None

        # check for 0compile at first
        next_links.append(zcompile)
        msg = _('* add %s;') % zcompile.get_name()
        self.emit('verbose', msg)

        return next_links

    def _has_source(self, iface):
        for feed in iface.feeds:
            if feed.machine == 'src':
                return True

        for impl in iface.implementations.values():
            if impl.machine == 'src':
                return True

        return False