summaryrefslogtreecommitdiff
path: root/service/test/unit/bitmask_libraries/test_smtp_client_certificate.py
diff options
context:
space:
mode:
authorBruno Wagner <bwagner@riseup.net>2016-08-19 21:37:34 -0300
committerBruno Wagner <bwagner@riseup.net>2016-08-19 21:37:34 -0300
commit9cdd52be577fff75830c854bd7738ee1649e7083 (patch)
treeef560dd628bda40832503250e1325283c49ede83 /service/test/unit/bitmask_libraries/test_smtp_client_certificate.py
parent9c5811c6b760415372c6cc67a9d34680c990cdd8 (diff)
Started deferring leap session creation #759
Started adapting get_leap_session to deferreds Soledad and keymanager setup calls will now happen in deferreds and leap session creation itself is a deferred with callbacks This is a start in breaking the big blocking calls we were doing on the main thread, this was done without changing code inside the leap libraries yet so things can be further optimized This breaks the ~4 seconds get_leap_session piece into smaller 1 seconds one, that can be further optimized and deferred to even smaller calls There are requests calls happening on the main thread that should get this number even further down Also moved some pieces from bitmask libraries to our bootstrap, because they are not bitmask libraries anymore and that was causing confusion
Diffstat (limited to 'service/test/unit/bitmask_libraries/test_smtp_client_certificate.py')
-rw-r--r--service/test/unit/bitmask_libraries/test_smtp_client_certificate.py50
1 files changed, 42 insertions, 8 deletions
diff --git a/service/test/unit/bitmask_libraries/test_smtp_client_certificate.py b/service/test/unit/bitmask_libraries/test_smtp_client_certificate.py
index e938d6f5..050f2d94 100644
--- a/service/test/unit/bitmask_libraries/test_smtp_client_certificate.py
+++ b/service/test/unit/bitmask_libraries/test_smtp_client_certificate.py
@@ -16,12 +16,36 @@
import os
import unittest
import tempdir
-from pixelated.bitmask_libraries import session
from leap.srp_session import SRPSession
import leap.common.certs as certs
from mockito import mock, unstub, when, verify, never, any as ANY
-from pixelated.bitmask_libraries.session import SmtpClientCertificate
+from pixelated.config.sessions import SmtpClientCertificate
+
+from tempfile import NamedTemporaryFile
+from httmock import all_requests, HTTMock, urlmatch
+
+CERTIFICATE_DATA = 'some cert data'
+USERNAME = 'some_user_name'
+
+
+@all_requests
+def not_found_mock(url, request):
+ return {'status_code': 404,
+ 'content': 'foobar'}
+
+
+@urlmatch(netloc='api.some-server.test:4430', path='/1/smtp_cert', method='POST')
+def smtp_cert_mock(url, request):
+ if request.body == 'address=%s' % USERNAME:
+ return {
+ "status_code": 200,
+ "content": CERTIFICATE_DATA
+ }
+ else:
+ return {
+ 'status_code': 401
+ }
class TestSmtpClientCertificate(unittest.TestCase):
@@ -29,11 +53,12 @@ class TestSmtpClientCertificate(unittest.TestCase):
def setUp(self):
self.tmp_dir = tempdir.TempDir()
self.provider = mock()
+ self.provider.api_uri = 'https://api.some-server.test:4430'
+ self.provider.api_version = '1'
+ self.provider.server_name = 'some.host.tld'
self.provider.domain = 'some-provider.tld'
- self.auth = SRPSession('username', 'token', 'uuid', 'session_id', {})
+ self.auth = SRPSession(USERNAME, 'token', 'uuid', 'session_id', {})
self.pem_path = os.path.join(self.tmp_dir.name, 'providers', 'some-provider.tld', 'keys', 'client', 'smtp.pem')
- self.downloader = mock()
- when(session).SmtpCertDownloader(self.provider, self.auth).thenReturn(self.downloader)
def tearDown(self):
self.tmp_dir.dissolve()
@@ -41,20 +66,20 @@ class TestSmtpClientCertificate(unittest.TestCase):
def test_download_certificate(self):
cert = SmtpClientCertificate(self.provider, self.auth, self.tmp_dir.name)
+ when(cert).download_to(ANY()).thenReturn(None)
result = cert.cert_path()
self.assertEqual(self.pem_path, result)
- verify(self.downloader).download_to(self.pem_path)
def test_download_certificate_if_redownload_necessary_e_g_certificate_expired(self):
self.pretend_all_paths_exist()
when(certs).should_redownload(self.pem_path).thenReturn(True)
cert = SmtpClientCertificate(self.provider, self.auth, self.tmp_dir.name)
+ when(cert).download_to(ANY()).thenReturn(None)
result = cert.cert_path()
self.assertEqual(self.pem_path, result)
- verify(self.downloader).download_to(self.pem_path)
def pretend_all_paths_exist(self):
when(os.path).exists(ANY()).thenReturn(True)
@@ -66,4 +91,13 @@ class TestSmtpClientCertificate(unittest.TestCase):
result = cert.cert_path()
self.assertEqual(self.pem_path, result)
- verify(self.downloader, never).download_to(ANY())
+
+ def test_download_to(self):
+ cert = SmtpClientCertificate(self.provider, self.auth, self.tmp_dir.name)
+
+ with NamedTemporaryFile() as tmp_file:
+ with HTTMock(smtp_cert_mock, not_found_mock):
+ cert.download_to(tmp_file.name)
+
+ file_content = open(tmp_file.name).read()
+ self.assertEqual(CERTIFICATE_DATA, file_content)