Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2013-05-18 15:20:16 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2013-05-18 15:20:16 (GMT)
commit3a0fb013d65373ab7002093f1782fe580502bc07 (patch)
tree322e29da93cee1f9b7064c4686c416791d2d785e
parent0289250f174ea0a00cecf47a17417732ed2c4acd (diff)
Keep presolved package inforamtion in the same file for all arches
-rw-r--r--.gitignore1
-rwxr-xr-xsugar-network4
-rwxr-xr-xsugar-network-client9
-rwxr-xr-xsugar-network-node3
-rw-r--r--sugar_network/client/commands.py19
-rw-r--r--sugar_network/client/injector.py2
-rw-r--r--sugar_network/client/packagekit.py2
-rw-r--r--sugar_network/client/solver.py27
-rw-r--r--sugar_network/node/commands.py33
-rw-r--r--sugar_network/node/obs.py47
-rwxr-xr-xtests/integration/master_personal.py2
-rwxr-xr-xtests/integration/node_client.py2
-rwxr-xr-xtests/integration/node_packages.py38
-rw-r--r--tests/units/client/__main__.py1
-rwxr-xr-xtests/units/client/injector.py4
-rwxr-xr-xtests/units/client/offline_commands.py2
-rwxr-xr-xtests/units/client/online_commands.py6
-rwxr-xr-xtests/units/client/server_commands.py2
-rwxr-xr-xtests/units/node/master.py4
-rwxr-xr-xtests/units/node/node.py30
-rwxr-xr-xtests/units/node/obs.py32
21 files changed, 137 insertions, 133 deletions
diff --git a/.gitignore b/.gitignore
index 75bf302..209a8d5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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):