Skip to content

Commit

Permalink
Fix other unit tests with latest twisted (#17907)
Browse files Browse the repository at this point in the history
There's also #17906
  • Loading branch information
erikjohnston authored Nov 7, 2024
1 parent 2a321ba commit 77eafd4
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 7 deletions.
1 change: 1 addition & 0 deletions changelog.d/17907.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix tests to run with latest Twisted.
4 changes: 2 additions & 2 deletions synapse/logging/_remote.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
)
from twisted.internet.interfaces import (
IPushProducer,
IReactorTCP,
IReactorTime,
IStreamClientEndpoint,
)
from twisted.internet.protocol import Factory, Protocol
Expand Down Expand Up @@ -113,7 +113,7 @@ def __init__(
port: int,
maximum_buffer: int = 1000,
level: int = logging.NOTSET,
_reactor: Optional[IReactorTCP] = None,
_reactor: Optional[IReactorTime] = None,
):
super().__init__(level=level)
self.host = host
Expand Down
57 changes: 52 additions & 5 deletions tests/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
from twisted.enterprise import adbapi
from twisted.internet import address, tcp, threads, udp
from twisted.internet._resolver import SimpleResolverComplexifier
from twisted.internet.address import IPv4Address, IPv6Address
from twisted.internet.defer import Deferred, fail, maybeDeferred, succeed
from twisted.internet.error import DNSLookupError
from twisted.internet.interfaces import (
Expand All @@ -73,6 +74,7 @@
IReactorPluggableNameResolver,
IReactorTime,
IResolverSimple,
ITCPTransport,
ITransport,
)
from twisted.internet.protocol import ClientFactory, DatagramProtocol, Factory
Expand Down Expand Up @@ -780,7 +782,7 @@ def get_clock() -> Tuple[ThreadedMemoryReactorClock, Clock]:
return clock, hs_clock


@implementer(ITransport)
@implementer(ITCPTransport)
@attr.s(cmp=False, auto_attribs=True)
class FakeTransport:
"""
Expand Down Expand Up @@ -809,12 +811,12 @@ class FakeTransport:
will get called back for connectionLost() notifications etc.
"""

_peer_address: IAddress = attr.Factory(
_peer_address: Union[IPv4Address, IPv6Address] = attr.Factory(
lambda: address.IPv4Address("TCP", "127.0.0.1", 5678)
)
"""The value to be returned by getPeer"""

_host_address: IAddress = attr.Factory(
_host_address: Union[IPv4Address, IPv6Address] = attr.Factory(
lambda: address.IPv4Address("TCP", "127.0.0.1", 1234)
)
"""The value to be returned by getHost"""
Expand All @@ -826,10 +828,10 @@ class FakeTransport:
producer: Optional[IPushProducer] = None
autoflush: bool = True

def getPeer(self) -> IAddress:
def getPeer(self) -> Union[IPv4Address, IPv6Address]:
return self._peer_address

def getHost(self) -> IAddress:
def getHost(self) -> Union[IPv4Address, IPv6Address]:
return self._host_address

def loseConnection(self) -> None:
Expand Down Expand Up @@ -939,6 +941,51 @@ def flush(self, maxbytes: Optional[int] = None) -> None:
logger.info("FakeTransport: Buffer now empty, completing disconnect")
self.disconnected = True

## ITCPTransport methods. ##

def loseWriteConnection(self) -> None:
"""
Half-close the write side of a TCP connection.
If the protocol instance this is attached to provides
IHalfCloseableProtocol, it will get notified when the operation is
done. When closing write connection, as with loseConnection this will
only happen when buffer has emptied and there is no registered
producer.
"""
raise NotImplementedError()

def getTcpNoDelay(self) -> bool:
"""
Return if C{TCP_NODELAY} is enabled.
"""
return False

def setTcpNoDelay(self, enabled: bool) -> None:
"""
Enable/disable C{TCP_NODELAY}.
Enabling C{TCP_NODELAY} turns off Nagle's algorithm. Small packets are
sent sooner, possibly at the expense of overall throughput.
"""
# Ignore setting this.

def getTcpKeepAlive(self) -> bool:
"""
Return if C{SO_KEEPALIVE} is enabled.
"""
return False

def setTcpKeepAlive(self, enabled: bool) -> None:
"""
Enable/disable C{SO_KEEPALIVE}.
Enabling C{SO_KEEPALIVE} sends packets periodically when the connection
is otherwise idle, usually once every two hours. They are intended
to allow detection of lost peers in a non-infinite amount of time.
"""
# Ignore setting this.


def connect_client(
reactor: ThreadedMemoryReactorClock, client_id: int
Expand Down

0 comments on commit 77eafd4

Please sign in to comment.