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
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
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