From 9af1553353e8fb837e5c4323531dda8e69dc8915 Mon Sep 17 00:00:00 2001 From: Duda Dornelles Date: Fri, 13 Feb 2015 11:56:58 -0200 Subject: Making sure that no private key can be retrieved by the KeysResource --- service/test/unit/resources/__init__.py | 23 +++++++++ service/test/unit/resources/test_keys_resources.py | 59 ++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 service/test/unit/resources/test_keys_resources.py (limited to 'service/test/unit') diff --git a/service/test/unit/resources/__init__.py b/service/test/unit/resources/__init__.py index e69de29b..b8214a8c 100644 --- a/service/test/unit/resources/__init__.py +++ b/service/test/unit/resources/__init__.py @@ -0,0 +1,23 @@ +from twisted.internet.defer import succeed +from twisted.web import server +from twisted.web.server import Site + + +def resolve_result(request, result): + if isinstance(result, str): + request.write(result) + request.finish() + return succeed(request) + elif result is server.NOT_DONE_YET: + if request.finished: + return succeed(request) + else: + return request.notifyFinish().addCallback(lambda _: request) + else: + raise ValueError("Unexpected return value: %r" % (result,)) + + +class DummySite(Site): + def get(self, request): + return resolve_result(request, self.getResourceFor(request).render(request)) + diff --git a/service/test/unit/resources/test_keys_resources.py b/service/test/unit/resources/test_keys_resources.py new file mode 100644 index 00000000..7113889e --- /dev/null +++ b/service/test/unit/resources/test_keys_resources.py @@ -0,0 +1,59 @@ +import json +from mockito import mock, when +from leap.keymanager import OpenPGPKey, KeyNotFound +from pixelated.resources.keys_resource import KeysResource +import twisted.trial.unittest as unittest +from twisted.web.test.requesthelper import DummyRequest +from test.unit.resources import DummySite + + +class TestKeysResource(unittest.TestCase): + + def setUp(self): + self.keymanager = mock() + self.web = DummySite(KeysResource(self.keymanager)) + + def test_returns_404_if_key_not_found(self): + request = DummyRequest(['/keys']) + request.addArg('search', 'some@inexistent.key') + when(self.keymanager).get_key_from_cache('some@inexistent.key', OpenPGPKey).thenRaise(KeyNotFound()) + + d = self.web.get(request) + + def assert_404(_): + self.assertEquals(404, request.code) + + d.addCallback(assert_404) + return d + + def test_returns_the_key_as_json_if_found(self): + request = DummyRequest(['/keys']) + request.addArg('search', 'some@key') + when(self.keymanager).get_key_from_cache('some@key', OpenPGPKey).thenReturn(OpenPGPKey('some@key')) + + d = self.web.get(request) + + def assert_response(_): + self.assertEquals('"{\\"tags\\": [\\"keymanager-key\\"], \\"fingerprint\\": null, ' + '\\"private\\": null, \\"expiry_date\\": null, \\"address\\": ' + '\\"some@key\\", \\"last_audited_at\\": null, \\"key_data\\": null, ' + '\\"length\\": null, \\"key_id\\": null, \\"validation\\": null, ' + '\\"type\\": \\"\\", ' + '\\"first_seen_at\\": null}"', request.written[0]) + + d.addCallback(assert_response) + return d + + def test_returns_unauthorized_if_key_is_private(self): + request = DummyRequest(['/keys']) + request.addArg('search', 'some@key') + when(self.keymanager).get_key_from_cache('some@key', OpenPGPKey).thenReturn(OpenPGPKey('some@key', private=True)) + + d = self.web.get(request) + + def assert_response(_): + self.assertEquals(401, request.code) + + d.addCallback(assert_response) + return d + -- cgit v1.2.3