diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2013-05-18 15:20:16 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2013-05-18 15:20:16 (GMT) |
commit | 3a0fb013d65373ab7002093f1782fe580502bc07 (patch) | |
tree | 322e29da93cee1f9b7064c4686c416791d2d785e | |
parent | 0289250f174ea0a00cecf47a17417732ed2c4acd (diff) |
Keep presolved package inforamtion in the same file for all arches
-rw-r--r-- | .gitignore | 1 | ||||
-rwxr-xr-x | sugar-network | 4 | ||||
-rwxr-xr-x | sugar-network-client | 9 | ||||
-rwxr-xr-x | sugar-network-node | 3 | ||||
-rw-r--r-- | sugar_network/client/commands.py | 19 | ||||
-rw-r--r-- | sugar_network/client/injector.py | 2 | ||||
-rw-r--r-- | sugar_network/client/packagekit.py | 2 | ||||
-rw-r--r-- | sugar_network/client/solver.py | 27 | ||||
-rw-r--r-- | sugar_network/node/commands.py | 33 | ||||
-rw-r--r-- | sugar_network/node/obs.py | 47 | ||||
-rwxr-xr-x | tests/integration/master_personal.py | 2 | ||||
-rwxr-xr-x | tests/integration/node_client.py | 2 | ||||
-rwxr-xr-x | tests/integration/node_packages.py | 38 | ||||
-rw-r--r-- | tests/units/client/__main__.py | 1 | ||||
-rwxr-xr-x | tests/units/client/injector.py | 4 | ||||
-rwxr-xr-x | tests/units/client/offline_commands.py | 2 | ||||
-rwxr-xr-x | tests/units/client/online_commands.py | 6 | ||||
-rwxr-xr-x | tests/units/client/server_commands.py | 2 | ||||
-rwxr-xr-x | tests/units/node/master.py | 4 | ||||
-rwxr-xr-x | tests/units/node/node.py | 30 | ||||
-rwxr-xr-x | tests/units/node/obs.py | 32 |
21 files changed, 137 insertions, 133 deletions
@@ -1,5 +1,6 @@ *~ .* +*.pyc *.tar.* doc/build tmp diff --git a/sugar-network b/sugar-network index b423ca4..a7c4644 100755 --- a/sugar-network +++ b/sugar-network @@ -29,7 +29,7 @@ from sugar_network import db, client, toolkit from sugar_network.resources.volume import Volume from sugar_network.client import IPCRouter from sugar_network.client.commands import ClientCommands -from sugar_network.toolkit import printf, application, coroutine, util +from sugar_network.toolkit import application, coroutine, util from sugar_network.toolkit import Option, BUFFER_SIZE, enforce @@ -233,7 +233,7 @@ locale.setlocale(locale.LC_ALL, '') app = Application( name='sugar-network-client', description='Sugar Network client utility', - epilog='See http://wiki.sugarlabs.org/go/Sugar_Network ' \ + epilog='See http://wiki.sugarlabs.org/go/Sugar_Network ' 'for details.', config_files=[ '/etc/sweets.conf', diff --git a/sugar-network-client b/sugar-network-client index bad15da..d215e76 100755 --- a/sugar-network-client +++ b/sugar-network-client @@ -16,7 +16,6 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. import os -import sys import errno import signal import locale @@ -28,11 +27,11 @@ from gevent import monkey import sugar_network_webui as webui from sugar_network import db, toolkit, client, node from sugar_network.client import IPCRouter, clones -from sugar_network.client.commands import ClientCommands, CachedClientCommands -from sugar_network.node import stats_node, stats_user, slave +from sugar_network.client.commands import CachedClientCommands +from sugar_network.node import stats_node, stats_user from sugar_network.resources.volume import Volume from sugar_network.toolkit import mountpoints, util, printf, application -from sugar_network.toolkit import Option, coroutine, enforce +from sugar_network.toolkit import Option, coroutine class Application(application.Daemon): @@ -205,7 +204,7 @@ Option.seek('user-stats', stats_user) app = Application( name='sugar-network-client', description='Sugar Network client application.', - epilog='See http://wiki.sugarlabs.org/go/Sugar_Network ' \ + epilog='See http://wiki.sugarlabs.org/go/Sugar_Network ' 'for details.', config_files=[ '/etc/sweets.conf', diff --git a/sugar-network-node b/sugar-network-node index 64b0ba6..e46858e 100755 --- a/sugar-network-node +++ b/sugar-network-node @@ -77,7 +77,6 @@ class Application(application.Daemon): if webui.webui.value: # XXX Until implementing regular web users - from sugar_network import client from sugar_network.client.commands import ClientCommands class _ClientCommands(ClientCommands): @@ -147,7 +146,7 @@ Option.seek('db', db) app = Application( name='sugar-network-node', description='Sugar Network node server', - epilog='See http://wiki.sugarlabs.org/go/Sugar_Network ' \ + epilog='See http://wiki.sugarlabs.org/go/Sugar_Network ' 'for details.', config_files=[ '/etc/sugar-network/config', diff --git a/sugar_network/client/commands.py b/sugar_network/client/commands.py index 6dde83d..e4daefe 100644 --- a/sugar_network/client/commands.py +++ b/sugar_network/client/commands.py @@ -103,6 +103,14 @@ class ClientCommands(db.CommandsProcessor, Commands, journal.Commands): return file(path, 'rb') + @db.volume_command(method='GET', cmd='status', + mime_type='application/json') + def status(self): + result = {'route': 'proxy' if self._inline.is_set() else 'offline'} + if self._inline.is_set(): + result['node'] = self._node.api_url + return result + @db.volume_command(method='GET', cmd='inline', mime_type='application/json') def inline(self): @@ -118,7 +126,6 @@ class ClientCommands(db.CommandsProcessor, Commands, journal.Commands): result = self._node_call(request, response) except db.CommandNotFound: result = {'roles': [], 'guid': request.principal} - result['route'] = 'proxy' return result @db.directory_command(method='GET', @@ -383,15 +390,16 @@ class ClientCommands(db.CommandsProcessor, Commands, journal.Commands): node.files_root.value = join(root, _SN_DIRNAME, 'files') volume = Volume(db_path, lazy_open=client.lazy_open.value) - self._node = PersonalCommands(join(db_path, 'node'), volume, + self._node = _PersonalCommands(join(db_path, 'node'), volume, self.broadcast) + self._node.api_url = 'http://localhost:%s' % node.port.value self._jobs.spawn(volume.populate) logging.info('Start %r node on %s port', volume.root, node.port.value) server = coroutine.WSGIServer(('0.0.0.0', node.port.value), db.Router(self._node)) self._node_job.spawn(server.serve_forever) - self._node.volume.connect(self.broadcast) + volume.connect(self.broadcast) self._got_online() def _lost_mount(self, root): @@ -625,3 +633,8 @@ class _VolumeCommands(db.VolumeCommands): def before_create(self, request, props): props['layer'] = tuple(props['layer']) + ('local',) db.VolumeCommands.before_create(self, request, props) + + +class _PersonalCommands(PersonalCommands): + + api_url = None diff --git a/sugar_network/client/injector.py b/sugar_network/client/injector.py index b7bb82f..7155cf9 100644 --- a/sugar_network/client/injector.py +++ b/sugar_network/client/injector.py @@ -189,7 +189,7 @@ def _solve(context): return solution conn = client.IPCClient() - if solution is not None and not conn.get(cmd='inline'): + if solution is not None and conn.get(cmd='status')['route'] == 'offline': pipe.trace('Reuse stale cached solution in offline mode') return solution diff --git a/sugar_network/client/packagekit.py b/sugar_network/client/packagekit.py index 6234b12..8c624c6 100644 --- a/sugar_network/client/packagekit.py +++ b/sugar_network/client/packagekit.py @@ -175,7 +175,7 @@ class _Transaction(object): 'pk_id': str(pk_id), 'version': clean_version, 'name': package_name, - 'arch': solver.canonical_machine(arch), + 'arch': solver.canonicalize_machine(arch), 'installed': (status == 'installed'), } _logger.debug('Resolved PackageKit name: %r', package) diff --git a/sugar_network/client/solver.py b/sugar_network/client/solver.py index 8322b00..9c59650 100644 --- a/sugar_network/client/solver.py +++ b/sugar_network/client/solver.py @@ -22,10 +22,13 @@ from sugar_network.toolkit import util, lsb_release, pipe, exception sys.path.insert(0, join(dirname(__file__), '..', 'lib', 'zeroinstall')) -from zeroinstall.injector import reader, model, distro +from zeroinstall.injector import reader, model from zeroinstall.injector.config import Config from zeroinstall.injector.driver import Driver from zeroinstall.injector.requirements import Requirements +from zeroinstall.injector.arch import canonicalize_machine, machine_ranks +# pylint: disable-msg=W0611 +from zeroinstall.injector.distro import try_cleanup_distro_version def _interface_init(self, url): @@ -36,12 +39,28 @@ def _interface_init(self, url): model.Interface.__init__ = _interface_init reader.check_readable = lambda * args, ** kwargs: True -try_cleanup_distro_version = distro.try_cleanup_distro_version -canonical_machine = distro.canonical_machine - _logger = logging.getLogger('zeroinstall') +def select_architecture(arches): + """Select most appropriate, for the host system, machine architecture + + :param arches: + list of architecture names to select + :returns: + one of passed architecture names, or, `None` if not any + + """ + result_rank = 9999 + result_arch = None + for arch in arches: + rank = machine_ranks.get(canonicalize_machine(arch)) + if rank is not None and rank < result_rank: + result_rank = rank + result_arch = arch + return result_arch + + def solve(conn, context): reader.load_feed_from_cache = lambda url, *args, **kwargs: \ _load_feed(conn, url) diff --git a/sugar_network/node/commands.py b/sugar_network/node/commands.py index 51e921f..13dd126 100644 --- a/sugar_network/node/commands.py +++ b/sugar_network/node/commands.py @@ -14,10 +14,9 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. import os -import json import logging import hashlib -from os.path import join +from os.path import join, isdir from sugar_network import db, node, static from sugar_network.node import auth, stats_node @@ -64,26 +63,15 @@ class NodeCommands(db.VolumeCommands, Commands): def hello(self): return _HELLO_HTML - @db.route('GET', '/presolve') - def route_presolve(self, request, response): - enforce(node.files_root.value, http.BadRequest, 'Disabled') - if len(request.path) <= 3: - path = join(node.files_root.value, *request.path) - result = os.listdir(path) - elif len(request.path) == 4: - with file(join(node.files_root.value, *request.path)) as f: - result = json.load(f) - for info in result: - info['url'] = request.static_prefix + info.pop('path') - else: - raise http.BadRequest('Incorrect path') - response.content_type = 'application/json' - return result - @db.route('GET', '/packages') def route_packages(self, request, response): enforce(node.files_root.value, http.BadRequest, 'Disabled') - return util.iter_file(node.files_root.value, *request.path) + path = join(node.files_root.value, *request.path) + if isdir(path): + response.content_type = 'application/json' + return os.listdir(path) + else: + return util.iter_file(path) @db.volume_command(method='GET', cmd='stat', mime_type='application/json') @@ -167,13 +155,18 @@ class NodeCommands(db.VolumeCommands, Commands): layer = list(set(doc['layer']) - set(request.content)) directory.update(guid, {'layer': layer}) + @db.volume_command(method='GET', cmd='status', + mime_type='application/json') + def status(self): + return {'route': 'direct'} + @db.volume_command(method='GET', cmd='whoami', mime_type='application/json') def whoami(self, request): roles = [] if auth.try_validate(request, 'root'): roles.append('root') - return {'roles': roles, 'guid': request.principal, 'route': 'direct'} + return {'roles': roles, 'guid': request.principal} @db.document_command(method='GET', cmd='clone', arguments={'requires': db.to_list}) diff --git a/sugar_network/node/obs.py b/sugar_network/node/obs.py index 1b76a02..31f04b3 100644 --- a/sugar_network/node/obs.py +++ b/sugar_network/node/obs.py @@ -17,7 +17,7 @@ import os import json import logging from xml.etree import cElementTree as ElementTree -from os.path import join, exists, basename, relpath +from os.path import join, exists, basename from sugar_network.toolkit import Option, http, util, exception, enforce @@ -79,36 +79,39 @@ def presolve(aliases, dst_path): 'withdeps': '1', 'exclude': 'sugar', }) - packages = [] + binaries = [] for pkg in response.findall('binary'): - packages.append(dict(pkg.items())) - presolves.append((package, arch, packages)) + binaries.append(dict(pkg.items())) + presolves.append((package, arch, binaries)) except Exception: exception(_logger, 'Failed to presolve %r on %s', names, repo['name']) continue _logger.debug('Presolve %r on %s', names, repo['name']) - dep_graphs = {} - - for package, arch, packages in presolves: - packages_dir = join(dst_path, 'packages', repo['name'], arch) - if not exists(packages_dir): - os.makedirs(packages_dir) - for info in packages: - url = info.pop('url') - path = join(packages_dir, basename(url)) + + dst_dir = join(dst_path, 'packages', + '%s:%s' % (obs_presolve_project.value, repo['name'])) + if not exists(dst_dir): + os.makedirs(dst_dir) + result = {} + + for package, arch, binaries in presolves: + info = result.setdefault(package, {}) + files = info[arch] = [] + for binary in binaries: + url = binary.pop('url') + filename = binary['path'] = basename(url) + path = join(dst_dir, filename) if not exists(path): _client.download(url, path) - info['path'] = os.sep + relpath(path, dst_path) - presolve_dir = join(dst_path, 'presolve', repo['name'], arch) - if not exists(presolve_dir): - os.makedirs(presolve_dir) - with util.new_file(join(presolve_dir, package)) as f: - json.dump(packages, f) - dep_graphs[package] = packages - - return {'repo': repo['name'], 'packages': dep_graphs} + files.append(binary) + + for package, info in result.items(): + with util.new_file(join(dst_dir, package)) as f: + json.dump(info, f) + + return {'repo': repo['name'], 'packages': result} def _request(*args, **kwargs): diff --git a/tests/integration/master_personal.py b/tests/integration/master_personal.py index 5ebbe37..be2c509 100755 --- a/tests/integration/master_personal.py +++ b/tests/integration/master_personal.py @@ -50,7 +50,7 @@ class MasterPersonalTest(tests.Test): coroutine.sleep(2) ipc = Client('http://localhost:8102') - if not ipc.get(cmd='inline'): + if ipc.get(cmd='status')['route'] == 'offline': self.wait_for_events(ipc, event='inline', state='online').wait() Client('http://localhost:8100').get(cmd='whoami') Client('http://localhost:8101').get(cmd='whoami') diff --git a/tests/integration/node_client.py b/tests/integration/node_client.py index a072ace..a4993d7 100755 --- a/tests/integration/node_client.py +++ b/tests/integration/node_client.py @@ -119,7 +119,7 @@ class NodeClientTest(tests.Test): ]) coroutine.sleep(2) ipc = Client('http://localhost:5101') - if not ipc.get(cmd='inline'): + if ipc.get(cmd='status')['route'] == 'offline': self.wait_for_events(ipc, event='inline', state='online').wait() result = util.assert_call(cmd, stdin=json.dumps(stdin)) diff --git a/tests/integration/node_packages.py b/tests/integration/node_packages.py index 38bc035..9120564 100755 --- a/tests/integration/node_packages.py +++ b/tests/integration/node_packages.py @@ -93,11 +93,11 @@ class NodePackagesSlaveTest(tests.Test): coroutine.sleep(2) self.assertEqual( - [{'url': 'http://localhost:8100/packages/OLPC-11.3.1/i586/rpm', 'name': 'rpm'}], - conn.get(['presolve', 'OLPC-11.3.1', 'i586', 'package'])) + '{"i586": [{"path": "rpm", "name": "rpm"}]}', + conn.get(['packages', 'presolve:OLPC-11.3.1', 'package'])) self.assertEqual( 'package_content', - urllib2.urlopen('http://localhost:8100/packages/OLPC-11.3.1/i586/rpm').read()) + urllib2.urlopen('http://localhost:8100/packages/presolve:OLPC-11.3.1/rpm').read()) pid = self.popen(['sugar-network-client', '-F', 'start', '--api-url=http://localhost:8100', '--cachedir=master.client/tmp', @@ -108,11 +108,11 @@ class NodePackagesSlaveTest(tests.Test): client.ipc_port.value = 8200 ipc = IPCClient() coroutine.sleep(2) - if not ipc.get(cmd='inline'): + if ipc.get(cmd='status')['route'] == 'offline': self.wait_for_events(ipc, event='inline', state='online').wait() self.assertEqual( - [{'url': 'http://localhost:8100/packages/OLPC-11.3.1/i586/rpm', 'name': 'rpm'}], - ipc.get(['presolve', 'OLPC-11.3.1', 'i586', 'package'])) + {"i586": [{"path": "rpm", "name": "rpm"}]}, + ipc.get(['packages', 'presolve:OLPC-11.3.1', 'package'])) self.waitpid(pid, signal.SIGINT) # From slave @@ -131,11 +131,11 @@ class NodePackagesSlaveTest(tests.Test): conn.post(cmd='online-sync') self.assertEqual( - [{'url': 'http://localhost:8101/packages/OLPC-11.3.1/i586/rpm', 'name': 'rpm'}], - conn.get(['presolve', 'OLPC-11.3.1', 'i586', 'package'])) + '{"i586": [{"path": "rpm", "name": "rpm"}]}', + conn.get(['packages', 'presolve:OLPC-11.3.1', 'package'])) self.assertEqual( 'package_content', - urllib2.urlopen('http://localhost:8101/packages/OLPC-11.3.1/i586/rpm').read()) + urllib2.urlopen('http://localhost:8101/packages/presolve:OLPC-11.3.1/rpm').read()) pid = self.popen(['sugar-network-client', '-F', 'start', '--api-url=http://localhost:8101', '--cachedir=master.client/tmp', @@ -146,11 +146,11 @@ class NodePackagesSlaveTest(tests.Test): client.ipc_port.value = 8200 ipc = IPCClient() coroutine.sleep(2) - if not ipc.get(cmd='inline'): + if ipc.get(cmd='status')['route'] == 'offline': self.wait_for_events(ipc, event='inline', state='online').wait() self.assertEqual( - [{'url': 'http://localhost:8101/packages/OLPC-11.3.1/i586/rpm', 'name': 'rpm'}], - ipc.get(['presolve', 'OLPC-11.3.1', 'i586', 'package'])) + {"i586": [{"path": "rpm", "name": "rpm"}]}, + ipc.get(['packages', 'presolve:OLPC-11.3.1', 'package'])) self.waitpid(pid, signal.SIGINT) # From personal slave @@ -167,7 +167,7 @@ class NodePackagesSlaveTest(tests.Test): conn = Client('http://localhost:8102') client.ipc_port.value = 8202 ipc = IPCClient() - if not ipc.get(cmd='inline'): + if ipc.get(cmd='status')['route'] == 'offline': self.wait_for_events(ipc, event='inline', state='online').wait() pid = self.popen('V=1 sugar-network-sync sync/sugar-network-sync http://localhost:8100', shell=True) @@ -179,18 +179,18 @@ class NodePackagesSlaveTest(tests.Test): self.waitpid(pid, 0) self.assertEqual( - [{'url': 'http://localhost:8102/packages/OLPC-11.3.1/i586/rpm', 'name': 'rpm'}], - conn.get(['presolve', 'OLPC-11.3.1', 'i586', 'package'])) + '{"i586": [{"path": "rpm", "name": "rpm"}]}', + conn.get(['packages', 'presolve:OLPC-11.3.1', 'package'])) self.assertEqual( 'package_content', - urllib2.urlopen('http://localhost:8102/packages/OLPC-11.3.1/i586/rpm').read()) + urllib2.urlopen('http://localhost:8102/packages/presolve:OLPC-11.3.1/rpm').read()) self.assertEqual( - [{'url': 'http://localhost:8202/packages/OLPC-11.3.1/i586/rpm', 'name': 'rpm'}], - ipc.get(['presolve', 'OLPC-11.3.1', 'i586', 'package'])) + {"i586": [{"path": "rpm", "name": "rpm"}]}, + ipc.get(['packages', 'presolve:OLPC-11.3.1', 'package'])) self.assertEqual( 'package_content', - urllib2.urlopen('http://localhost:8202/packages/OLPC-11.3.1/i586/rpm').read()) + urllib2.urlopen('http://localhost:8202/packages/presolve:OLPC-11.3.1/rpm').read()) if __name__ == '__main__': diff --git a/tests/units/client/__main__.py b/tests/units/client/__main__.py index 64b37b7..ff0e495 100644 --- a/tests/units/client/__main__.py +++ b/tests/units/client/__main__.py @@ -10,6 +10,7 @@ from offline_commands import * from online_commands import * from server_commands import * from spec import * +from solver import * if __name__ == '__main__': tests.main() diff --git a/tests/units/client/injector.py b/tests/units/client/injector.py index 964f334..758622a 100755 --- a/tests/units/client/injector.py +++ b/tests/units/client/injector.py @@ -912,8 +912,8 @@ class _FakeConnection(object): self.inline = inline def get(self, cmd=None, *args, **kwargs): - if cmd == 'inline': - return self.inline + if cmd == 'status': + return {'route': 'proxy' if self.inline else 'offline'} if __name__ == '__main__': diff --git a/tests/units/client/offline_commands.py b/tests/units/client/offline_commands.py index 94fb2bd..9f19f3a 100755 --- a/tests/units/client/offline_commands.py +++ b/tests/units/client/offline_commands.py @@ -57,7 +57,7 @@ class OfflineCommandsTest(tests.Test): ipc = IPCClient() self.assertEqual( - {'guid': tests.UID, 'roles': [], 'route': 'proxy'}, + {'guid': tests.UID, 'roles': []}, ipc.get(cmd='whoami')) def test_clone(self): diff --git a/tests/units/client/online_commands.py b/tests/units/client/online_commands.py index f5fb506..3d44fda 100755 --- a/tests/units/client/online_commands.py +++ b/tests/units/client/online_commands.py @@ -49,7 +49,7 @@ class OnlineCommandsTest(tests.Test): ipc = IPCClient() self.assertEqual( - {'guid': tests.UID, 'roles': [], 'route': 'proxy'}, + {'guid': tests.UID, 'roles': []}, ipc.get(cmd='whoami')) def test_clone_Activities(self): @@ -148,7 +148,7 @@ class OnlineCommandsTest(tests.Test): trigger = self.wait_for_events(ipc, event='inline', state='offline') self.node.stop() trigger.wait() - assert not ipc.get(cmd='inline') + assert ipc.get(cmd='status')['route'] == 'offline' self.assertEqual( {'clone': 2}, @@ -414,7 +414,7 @@ class OnlineCommandsTest(tests.Test): trigger = self.wait_for_events(ipc, event='inline', state='offline') self.node.stop() trigger.wait() - assert not ipc.get(cmd='inline') + assert ipc.get(cmd='status')['route'] == 'offline' self.assertEqual( {'favorite': True}, diff --git a/tests/units/client/server_commands.py b/tests/units/client/server_commands.py index c262c7c..7e3e577 100755 --- a/tests/units/client/server_commands.py +++ b/tests/units/client/server_commands.py @@ -68,7 +68,7 @@ class ServerCommandsTest(tests.Test): ipc = IPCClient() self.assertEqual( - {'guid': tests.UID, 'roles': [], 'route': 'proxy'}, + {'guid': tests.UID, 'roles': []}, ipc.get(cmd='whoami')) def test_subscribe(self): diff --git a/tests/units/node/master.py b/tests/units/node/master.py index 68a63e9..532305e 100755 --- a/tests/units/node/master.py +++ b/tests/units/node/master.py @@ -17,7 +17,6 @@ class MasterTest(tests.Test): {'distributor_id': 'Debian', 'name': 'Debian-7.0', 'arches': ['x86_64']}, ]) self.override(obs, 'resolve', lambda repo, arch, names: ['fake']) - self.override(obs, 'presolve', lambda *args: None) self.start_online_client() ipc = IPCClient() @@ -54,7 +53,6 @@ class MasterTest(tests.Test): {'distributor_id': 'Debian', 'name': 'Debian-7.0', 'arches': ['x86_64']}, ]) self.override(obs, 'resolve', lambda repo, arch, names: enforce(False, 'resolve failed')) - self.override(obs, 'presolve', lambda *args: None) self.start_online_client() ipc = IPCClient() @@ -94,7 +92,6 @@ class MasterTest(tests.Test): {'distributor_id': 'Gentoo', 'name': 'Gentoo-2.1', 'arches': ['x86', 'x86_64']}, ]) self.override(obs, 'resolve', resolve) - self.override(obs, 'presolve', lambda *args: None) self.start_online_client() ipc = IPCClient() @@ -147,7 +144,6 @@ class MasterTest(tests.Test): {'distributor_id': 'Gentoo', 'name': 'Gentoo-2.1', 'arches': ['x86_64']}, ]) self.override(obs, 'resolve', lambda repo, arch, names: ['fake']) - self.override(obs, 'presolve', lambda *args: None) self.start_online_client() ipc = IPCClient() diff --git a/tests/units/node/node.py b/tests/units/node/node.py index c7366f6..dd4587d 100755 --- a/tests/units/node/node.py +++ b/tests/units/node/node.py @@ -335,39 +335,15 @@ class NodeTest(tests.Test): 'description': 'description', }) - def test_PresolveRoute(self): - node.files_root.value = '.' - self.touch(('presolve/repo/arch/package', json.dumps([ - {'path': '/1', 'foo': 1}, - {'path': '/2/3', 'bar': 2}, - ]))) - volume = self.start_master() - client = Client() - - self.assertEqual( - ['repo'], - client.get(['presolve'])) - self.assertEqual( - ['arch'], - client.get(['presolve', 'repo'])) - self.assertEqual( - ['package'], - client.get(['presolve', 'repo', 'arch'])) - self.assertEqual([ - {'url': 'http://localhost:8888/1', 'foo': 1}, - {'url': 'http://localhost:8888/2/3', 'bar': 2}, - ], - client.get(['presolve', 'repo', 'arch', 'package'])) - def test_PackagesRoute(self): node.files_root.value = '.' self.touch(('packages/repo/arch/package', 'file')) volume = self.start_master() client = Client() - self.assertRaises(RuntimeError, client.get, ['packages']) - self.assertRaises(RuntimeError, client.get, ['packages', 'repo']) - self.assertRaises(RuntimeError, client.get, ['packages', 'repo', 'arch']) + self.assertEqual(['repo'], client.get(['packages'])) + self.assertEqual(['arch'], client.get(['packages', 'repo'])) + self.assertEqual(['package'], client.get(['packages', 'repo', 'arch'])) self.assertEqual('file', client.get(['packages', 'repo', 'arch', 'package'])) def test_Clone(self): diff --git a/tests/units/node/obs.py b/tests/units/node/obs.py index c34762b..6c7788d 100755 --- a/tests/units/node/obs.py +++ b/tests/units/node/obs.py @@ -127,20 +127,24 @@ class ObsTest(tests.Test): 'Fedora': {'binary': [['pkg1', 'pkg2']], 'devel': [['pkg3']]}, }, '.') - self.assertEqual([ - {'path': '/packages/OLPC-11.3.1/i586/pkg1-1.prm', 'name': 'pkg1-1'}, - {'path': '/packages/OLPC-11.3.1/i586/pkg1-2.prm', 'name': 'pkg1-2'}, - ], - json.load(file('presolve/OLPC-11.3.1/i586/pkg1'))) - self.assertEqual([ - {'path': '/packages/OLPC-11.3.1/i586/pkg2-1.prm', 'name': 'pkg2-1'}, - {'path': '/packages/OLPC-11.3.1/i586/pkg2-2.prm', 'name': 'pkg2-2'}, - ], - json.load(file('presolve/OLPC-11.3.1/i586/pkg2'))) - self.assertEqual('1', file('packages/OLPC-11.3.1/i586/pkg1-1.prm').read()) - self.assertEqual('2', file('packages/OLPC-11.3.1/i586/pkg1-2.prm').read()) - self.assertEqual('3', file('packages/OLPC-11.3.1/i586/pkg2-1.prm').read()) - self.assertEqual('4', file('packages/OLPC-11.3.1/i586/pkg2-2.prm').read()) + self.assertEqual({ + 'i586': [ + {'path': 'pkg1-1.prm', 'name': 'pkg1-1'}, + {'path': 'pkg1-2.prm', 'name': 'pkg1-2'}, + ], + }, + json.load(file('packages/presolve:OLPC-11.3.1/pkg1'))) + self.assertEqual({ + 'i586': [ + {'path': 'pkg2-1.prm', 'name': 'pkg2-1'}, + {'path': 'pkg2-2.prm', 'name': 'pkg2-2'}, + ], + }, + json.load(file('packages/presolve:OLPC-11.3.1/pkg2'))) + self.assertEqual('1', file('packages/presolve:OLPC-11.3.1/pkg1-1.prm').read()) + self.assertEqual('2', file('packages/presolve:OLPC-11.3.1/pkg1-2.prm').read()) + self.assertEqual('3', file('packages/presolve:OLPC-11.3.1/pkg2-1.prm').read()) + self.assertEqual('4', file('packages/presolve:OLPC-11.3.1/pkg2-2.prm').read()) class Response(object): |