summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/unit/core/test_web_api.py142
1 files changed, 105 insertions, 37 deletions
diff --git a/tests/unit/core/test_web_api.py b/tests/unit/core/test_web_api.py
index ae10ec41..02708f61 100644
--- a/tests/unit/core/test_web_api.py
+++ b/tests/unit/core/test_web_api.py
@@ -1,16 +1,22 @@
+import json
import base64
from twisted.application import service
from twisted.cred import portal
+from twisted.internet import defer, reactor
+from twisted.python.compat import networkString
from twisted.trial import unittest
-from twisted.web.test.test_web import DummyRequest
+from twisted.web import client
from twisted.web import resource
from twisted.web.server import Site
+from twisted.web.test.test_web import DummyRequest
from leap.bitmask.core import dispatcher
from leap.bitmask.core import web
from leap.bitmask.core.dummy import mail_services
from leap.bitmask.core.dummy import BonafideService
+from leap.bitmask.core.dummy import BackendCommands
+from leap.bitmask.core.dummy import CannedData
def b64encode(s):
@@ -102,47 +108,106 @@ class WhitelistedResourceTests(SimpleAPIMixin, unittest.TestCase):
pass
-class RESTApiMixin:
- def setUp(self):
- self.request = self.makeRequest()
+class AuthTestResource(resource.Resource):
- dispatcher = dummyDispatcherFactory()
- api = web.api.Api(dispatcher)
- self.site = Site(api)
+ isLeaf = True
- def makeRequest(self, method=b'GET', clientAddress=None):
- """
- Create a request object to be passed to
- TokenCredentialFactory.decode along with a response value.
- Override this in a subclass.
- """
- raise NotImplementedError("%r did not implement makeRequest" % (
- self.__class__,))
+ def render_GET(self, request):
+ return "dummyGET"
+
+ def render_POST(self, request):
+ return "dummyPOST"
-class RESTApiTests(RESTApiMixin, unittest.TestCase):
+class RESTApiTests(unittest.TestCase):
"""
Tests that involve checking the routing between the REST api and the
command dispatcher.
- """
- def test_simple_api_request(self):
- # FIXME -- check the requests to the API
- assert 1 == 1
+ This is just really testing the canned responses in the Dummy backend.
+ To make sure that those responses match the live data, e2e tests should be
+ run.
+ """
- def makeRequest(self, method='GET', clientAddress=None):
- pass
+ def setUp(self):
+ dispatcher = dummyDispatcherFactory()
+ api = web.api.Api(dispatcher)
+ plainSite = Site(api)
+ self.plainPort = reactor.listenTCP(0, plainSite, interface="127.0.0.1")
+ self.plainPortno = self.plainPort.getHost().port
+ self.canned = CannedData
+
+ def tearDown(self):
+ return self.plainPort.stopListening()
+
+ # core commands
+
+ @defer.inlineCallbacks
+ def test_core_version(self):
+ call = yield self.makeAPICall('core/version')
+ self.assertCall(call, self.canned.backend.version)
+
+ @defer.inlineCallbacks
+ def test_core_stop(self):
+ call = yield self.makeAPICall('core/stop')
+ self.assertCall(call, self.canned.backend.stop)
+
+ # bonafide commands
+
+ @defer.inlineCallbacks
+ def test_bonafide_user_list(self):
+ call = yield self.makeAPICall('bonafide/user/list')
+ self.assertCall(call, self.canned.bonafide.list_users)
+
+ @defer.inlineCallbacks
+ def test_bonafide_user_create(self):
+ call = yield self.makeAPICall('bonafide/user/create')
+ self.assertCall(call, self.canned.bonafide.auth)
+
+ @defer.inlineCallbacks
+ def test_bonafide_user_update(self):
+ call = yield self.makeAPICall('bonafide/user/update')
+ self.assertCall(call, self.canned.bonafide.update)
+
+ @defer.inlineCallbacks
+ def test_bonafide_user_authenticate(self):
+ call = yield self.makeAPICall('bonafide/user/authenticate')
+ self.assertCall(call, self.canned.bonafide.auth)
+
+ @defer.inlineCallbacks
+ def test_bonafide_user_active(self):
+ call = yield self.makeAPICall('bonafide/user/active')
+ self.assertCall(call, self.canned.bonafide.get_active_user)
+
+ @defer.inlineCallbacks
+ def test_bonafide_user_logout(self):
+ call = yield self.makeAPICall('bonafide/user/logout')
+ self.assertCall(call, self.canned.bonafide.logout)
+
+ def makeAPICall(self, path, method="POST"):
+ uri = networkString("http://127.0.0.1:%d/%s" % (
+ self.plainPortno, path))
+ return client.getPage(uri, method=method, timeout=1)
+
+ def assertCall(self, returned, expected):
+ data = json.loads(returned)
+ error = data['error']
+ assert error is None
+ result = data['result']
+ assert result == expected
class DummyCore(service.MultiService):
+
"""
A minimal core that uses the dummy backend modules.
"""
def __init__(self):
service.MultiService.__init__(self)
- mail = mail_services.StandardMailService
- self.init('mail', mail)
+
+ bf = BonafideService
+ self.init('bonafide', bf, '/tmp/')
km = mail_services.KeymanagerService
self.init('keymanager', km)
@@ -150,14 +215,28 @@ class DummyCore(service.MultiService):
sol = mail_services.SoledadService
self.init('soledad', sol)
- bf = BonafideService
- self.init('bonafide', bf, '/tmp/')
+ mail = mail_services.StandardMailService
+ self.init('mail', mail)
+
+ self.core_cmds = BackendCommands(self)
def init(self, label, service, *args, **kw):
s = service(*args, **kw)
s.setName(label)
s.setServiceParent(self)
+ def do_stats(self):
+ return self.core_cmds.do_stats()
+
+ def do_version(self):
+ return self.core_cmds.do_version()
+
+ def do_status(self):
+ return self.core_cmds.do_status()
+
+ def do_stop(self):
+ return self.core_cmds.do_stop()
+
def dummyDispatcherFactory():
"""
@@ -165,14 +244,3 @@ def dummyDispatcherFactory():
"""
dummy_core = DummyCore()
return dispatcher.CommandDispatcher(dummy_core)
-
-
-class AuthTestResource(resource.Resource):
-
- isLeaf = True
-
- def render_GET(self, request):
- return "dummyGET"
-
- def render_POST(self, request):
- return "dummyPOST"