Browse Source

Add unit testing and a single test that tests startup (#226)

Andrew Morgan 4 years ago
parent
commit
2113b493e4

+ 3 - 3
sydent/http/httpclient.py

@@ -18,7 +18,7 @@ import json
 import logging
 
 from StringIO import StringIO
-from twisted.internet import defer, reactor
+from twisted.internet import defer
 from twisted.web.client import FileBodyProducer, Agent, readBody
 from twisted.web.http_headers import Headers
 from sydent.http.matrixfederationagent import MatrixFederationAgent
@@ -104,7 +104,7 @@ class SimpleHttpClient(HTTPClient):
         # BrowserLikePolicyForHTTPS context factory which will do regular cert validation
         # 'like a browser'
         self.agent = Agent(
-            reactor,
+            self.sydent.reactor,
             connectTimeout=15,
         )
 
@@ -115,6 +115,6 @@ class FederationHttpClient(HTTPClient):
     def __init__(self, sydent):
         self.sydent = sydent
         self.agent = MatrixFederationAgent(
-            reactor,
+            self.sydent.reactor,
             ClientTLSOptionsFactory(sydent.cfg),
         )

+ 1 - 2
sydent/http/httpsclient.py

@@ -21,7 +21,6 @@ from StringIO import StringIO
 
 from zope.interface import implementer
 
-import twisted.internet.reactor
 import twisted.internet.defer
 from twisted.internet.ssl import optionsForClientTLS
 from twisted.web.client import Agent, FileBodyProducer
@@ -47,7 +46,7 @@ class ReplicationHttpsClient:
             #self.certOptions = twisted.internet.ssl.CertificateOptions(privateKey=cert.privateKey.original,
             #                                                      certificate=cert.original,
             #                                                      trustRoot=self.sydent.sslComponents.trustRoot)
-            self.agent = Agent(twisted.internet.reactor, SydentPolicyForHTTPS(self.sydent))
+            self.agent = Agent(self.sydent.reactor, SydentPolicyForHTTPS(self.sydent))
 
     def postJson(self, uri, jsonObject):
         logger.debug("POSTing request to %s", uri)

+ 4 - 4
sydent/http/httpserver.py

@@ -20,7 +20,6 @@ from twisted.web.server import Site
 from twisted.web.resource import Resource
 
 import logging
-import twisted.internet.reactor
 import twisted.internet.ssl
 
 from sydent.http.servlets.authenticated_bind_threepid_servlet import (
@@ -126,7 +125,7 @@ class ClientApiHttpServer:
         httpPort = int(self.sydent.cfg.get('http', 'clientapi.http.port'))
         interface = self.sydent.cfg.get('http', 'clientapi.http.bind_address')
         logger.info("Starting Client API HTTP server on %s:%d", interface, httpPort)
-        twisted.internet.reactor.listenTCP(
+        self.sydent.reactor.listenTCP(
             httpPort, self.factory, interface=interface,
         )
 
@@ -153,7 +152,7 @@ class InternalApiHttpServer(object):
 
         factory = Site(root)
         factory.displayTracebacks = False
-        twisted.internet.reactor.listenTCP(port, factory, interface=interface)
+        self.sydent.reactor.listenTCP(port, factory, interface=interface)
 
 
 class ReplicationHttpsServer:
@@ -191,4 +190,5 @@ class ReplicationHttpsServer:
             logger.info("Loaded server private key and certificate!")
             logger.info("Starting Replication HTTPS server on %s:%d", interface, httpPort)
 
-            twisted.internet.reactor.listenSSL(httpPort, self.factory, certOptions, interface=interface)
+            self.sydent.reactor.listenSSL(httpPort, self.factory, certOptions,
+                                          interface=interface)

+ 1 - 1
sydent/replication/pusher.py

@@ -16,7 +16,6 @@
 
 import logging
 
-import twisted.internet.reactor
 import twisted.internet.task
 
 from sydent.util import time_msec
@@ -36,6 +35,7 @@ class Pusher:
 
     def setup(self):
         cb = twisted.internet.task.LoopingCall(Pusher.scheduledPush, self)
+        cb.clock = self.sydent.reactor
         cb.start(10.0)
 
     def getSignedAssociationsAfterId(self, afterId, limit):

+ 1 - 1
sydent/sms/openmarket.py

@@ -17,7 +17,7 @@
 import logging
 from base64 import b64encode
 
-from twisted.internet import defer, reactor
+from twisted.internet import defer
 from sydent.http.httpclient import SimpleHttpClient
 from twisted.web.http_headers import Headers
 

+ 4 - 2
sydent/sydent.py

@@ -127,7 +127,8 @@ CONFIG_DEFAULTS = {
 
 
 class Sydent:
-    def __init__(self):
+    def __init__(self, reactor=twisted.internet.reactor):
+        self.reactor = reactor
         self.config_file = os.environ.get('SYDENT_CONF', "sydent.conf")
         self.cfg = parse_config(self.config_file)
 
@@ -250,6 +251,7 @@ class Sydent:
         # A dedicated validation session store just to clean up old sessions every N minutes
         self.cleanupValSession = ThreePidValSessionStore(self)
         cb = task.LoopingCall(self.cleanupValSession.deleteOldSessions)
+        cb.clock = self.reactor
         cb.start(10 * 60.0)
 
     def save_config(self):
@@ -275,7 +277,7 @@ class Sydent:
             with open(self.pidfile, 'w') as pidfile:
                 pidfile.write(str(os.getpid()) + "\n")
 
-        twisted.internet.reactor.run()
+        self.reactor.run()
 
     def ip_from_request(self, request):
         if (self.cfg.get('http', 'obey_x_forwarded_for') and

+ 2 - 2
sydent/threepid/bind.py

@@ -35,7 +35,7 @@ from sydent.threepid import ThreepidAssociation
 from OpenSSL import SSL
 from OpenSSL.SSL import VERIFY_NONE
 from StringIO import StringIO
-from twisted.internet import reactor, defer, ssl
+from twisted.internet import defer, ssl
 from twisted.names import client, dns
 from twisted.names.error import DNSNameError
 from twisted.web.client import FileBodyProducer, Agent
@@ -160,7 +160,7 @@ class ThreepidBinder:
 
     def _notifyErrback(self, assoc, attempt, error):
         logger.warn("Error notifying on bind for %s: %s - rescheduling", assoc["mxid"], error)
-        reactor.callLater(math.pow(2, attempt), self._notify, assoc, attempt + 1)
+        self.sydent.reactor.callLater(math.pow(2, attempt), self._notify, assoc, attempt + 1)
 
     # The below is lovingly ripped off of synapse/http/endpoint.py
 

+ 0 - 0
tests/__init__.py


+ 12 - 0
tests/test_start.py

@@ -0,0 +1,12 @@
+from twisted.trial import unittest
+from twisted.test.proto_helpers import MemoryReactorClock
+from sydent.sydent import Sydent
+
+
+class StartupTestCase(unittest.TestCase):
+    """Test that sydent started up correctly"""
+    def test_start(self):
+        reactor = MemoryReactorClock()
+        sydent = Sydent(reactor)
+
+        sydent.run()