#!/usr/bin/env python # sugar-lint: disable import json from cStringIO import StringIO from __init__ import tests from sugar_network import node from sugar_network.toolkit import http from sugar_network.node import obs class ObsTest(tests.Test): def setUp(self): tests.Test.setUp(self) obs._repos = {} def test_get_repos(self): self.override(http, 'Connection', Client(self, [ (('GET', ['build', 'base']), {'allowed': (400, 404)}, [ '', ' ', ' ', '', ]), (('GET', ['build', 'base', 'Debian-6.0']), {'allowed': (400, 404)}, [ '', ' ', ' ', '', ]), (('GET', ['build', 'base', 'Fedora-11']), {'allowed': (400, 404)}, [ '', ' ', '', ]), ])) self.assertEqual([ {'lsb_id': 'Debian', 'lsb_release': '6.0', 'name': 'Debian-6.0', 'arches': ['i586', 'x86_64']}, {'lsb_id': 'Fedora', 'lsb_release': '11', 'name': 'Fedora-11', 'arches': ['i586']}, ], obs.get_repos()) def test_resolve(self): self.override(http, 'Connection', Client(self, [ (('GET', ['resolve']), {'allowed': (400, 404), 'params': { 'project': 'base', 'repository': 'repo', 'arch': 'arch', 'package': ['pkg1', 'pkg2'], }}, [ '', ' ', ' ', '', ], ), ])) obs.resolve('repo', 'arch', ['pkg1', 'pkg2']) def test_presolve(self): self.override(http, 'Connection', lambda *args: Client(self, [ (('GET', ['build', 'presolve']), {'allowed': (400, 404)}, [ '', ' ', '', ]), (('GET', ['build', 'presolve', 'OLPC-11.3.1']), {'allowed': (400, 404)}, [ '', ' ', '', ]), (('GET', ['resolve']), {'allowed': (400, 404), 'params': { 'project': 'presolve', 'repository': 'OLPC-11.3.1', 'arch': 'i586', 'package': 'pkg1', 'withdeps': '1', 'exclude': 'sweets-sugar', }}, [ '', ' ', ' ', '', ], ), (('GET', ['resolve']), {'allowed': (400, 404), 'params': { 'project': 'presolve', 'repository': 'OLPC-11.3.1', 'arch': 'i586', 'package': 'pkg2', 'withdeps': '1', 'exclude': 'sweets-sugar', }}, [ '', ' ', ' ', '', ], ), ('http://pkg1-1.prm', ['1']), ('http://pkg1-2.prm', ['2']), ('http://pkg2-1.prm', ['3']), ('http://pkg2-2.prm', ['4']), ])) obs.presolve(None, ['pkg1', 'pkg2'], '.') self.assertEqual({ 'arch': [ {'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({ 'arch': [ {'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): headers = {'Content-Type': 'text/xml'} content = None status_code = 200 class Client(object): def __init__(self, test, calls): self.test = test self.calls = calls[:] def request(self, *args, **kwargs): assert self.calls args_, kwargs_, reply = self.calls.pop(0) self.test.assertEqual((args_, kwargs_), (args, kwargs)) response = Response() response.content = ''.join(reply) return response def download(self, path, dst): assert self.calls path_, reply = self.calls.pop(0) self.test.assertEqual(path_, path) if isinstance(dst, basestring): with file(dst, 'wb') as f: f.write(''.join(reply)) else: dst.write(''.join(reply)) def __call__(self, url): return self if __name__ == '__main__': tests.main()