diff --git a/tests/crypto/test_keyring.py b/tests/crypto/test_keyring.py
index 1b9696748f..d6db5b6423 100644
--- a/tests/crypto/test_keyring.py
+++ b/tests/crypto/test_keyring.py
@@ -130,7 +130,9 @@ class KeyringTestCase(unittest.HomeserverTestCase):
pass
self.assertFalse(res_deferreds[0].called)
- res_deferreds[0].addBoth(self.check_context, None)
+ # type-ignore: Deferred.addBoth returns `self`; it doesn't need to be
+ # awaited as long as we use the await the deferred elsewhere
+ res_deferreds[0].addBoth(self.check_context, None) # type: ignore[unused-awaitable]
await make_deferred_yieldable(res_deferreds[0])
@@ -166,7 +168,7 @@ class KeyringTestCase(unittest.HomeserverTestCase):
)
]
)
- res_deferreds_2[0].addBoth(self.check_context, None)
+ res_deferreds_2[0].addBoth(self.check_context, None) # type: ignore[unused-awaitable]
second_lookup_state[0] = 1
await make_deferred_yieldable(res_deferreds_2[0])
second_lookup_state[0] = 2
diff --git a/tests/handlers/test_oidc.py b/tests/handlers/test_oidc.py
index 951caaa6b3..bb52b3b1af 100644
--- a/tests/handlers/test_oidc.py
+++ b/tests/handlers/test_oidc.py
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import os
-from typing import Any, Awaitable, ContextManager, Dict, Optional, Tuple
+from typing import Any, ContextManager, Dict, Optional, Tuple
from unittest.mock import ANY, Mock, patch
from urllib.parse import parse_qs, urlparse
@@ -287,7 +287,7 @@ class OidcHandlerTestCase(HomeserverTestCase):
"""Provider metadatas are extensively validated."""
h = self.provider
- def force_load_metadata() -> Awaitable[None]:
+ def force_load_metadata() -> "OpenIDProviderMetadata":
async def force_load() -> "OpenIDProviderMetadata":
return await h.load_metadata(force=True)
diff --git a/tests/http/test_matrixfederationclient.py b/tests/http/test_matrixfederationclient.py
index fdd22a8e94..9373523dea 100644
--- a/tests/http/test_matrixfederationclient.py
+++ b/tests/http/test_matrixfederationclient.py
@@ -460,7 +460,7 @@ class FederationClientTests(HomeserverTestCase):
self.failureResultOf(d)
def test_client_sends_body(self) -> None:
- defer.ensureDeferred(
+ defer.ensureDeferred( # type: ignore[unused-awaitable]
self.cl.post_json(
"testserv:8008", "foo/bar", timeout=10000, data={"a": "b"}
)
diff --git a/tests/storage/test_appservice.py b/tests/storage/test_appservice.py
index 5e1324a169..2b09700bfe 100644
--- a/tests/storage/test_appservice.py
+++ b/tests/storage/test_appservice.py
@@ -151,7 +151,9 @@ class ApplicationServiceTransactionStoreTestCase(unittest.HomeserverTestCase):
outfile.write(yaml.dump(as_yaml))
self.as_yaml_files.append(as_token)
- def _set_state(self, id: str, state: ApplicationServiceState) -> defer.Deferred:
+ def _set_state(
+ self, id: str, state: ApplicationServiceState
+ ) -> "defer.Deferred[None]":
return self.db_pool.runOperation(
self.engine.convert_param_style(
"INSERT INTO application_services_state(as_id, state) VALUES(?,?)"
@@ -297,7 +299,9 @@ class ApplicationServiceTransactionStoreTestCase(unittest.HomeserverTestCase):
service = Mock(id=self.as_list[0]["id"])
events = [Mock(event_id="e1"), Mock(event_id="e2")]
txn_id = 5
- self._set_state(self.as_list[0]["id"], ApplicationServiceState.UP)
+ self.get_success(
+ self._set_state(self.as_list[0]["id"], ApplicationServiceState.UP)
+ )
self.get_success(self._insert_txn(service.id, txn_id, events))
self.get_success(
self.store.complete_appservice_txn(txn_id=txn_id, service=service)
diff --git a/tests/test_server.py b/tests/test_server.py
index d67d7722a4..27537758c4 100644
--- a/tests/test_server.py
+++ b/tests/test_server.py
@@ -117,7 +117,7 @@ class JsonResourceTests(unittest.TestCase):
def _callback(request: SynapseRequest, **kwargs: object) -> "Deferred[None]":
d: "Deferred[None]" = Deferred()
- d.addCallback(_throw)
+ d.addCallback(_throw) # type: ignore[unused-awaitable]
self.reactor.callLater(0.5, d.callback, True)
return make_deferred_yieldable(d)
diff --git a/tests/unittest.py b/tests/unittest.py
index f9160faa1d..6625fe1688 100644
--- a/tests/unittest.py
+++ b/tests/unittest.py
@@ -563,7 +563,7 @@ class HomeserverTestCase(TestCase):
deferred: Deferred[TV] = ensureDeferred(d) # type: ignore[arg-type]
results: list = []
- deferred.addBoth(results.append)
+ deferred.addBoth(results.append) # type: ignore[unused-awaitable]
self.pump(by=by)
diff --git a/tests/util/caches/test_deferred_cache.py b/tests/util/caches/test_deferred_cache.py
index f74d82b1dc..f19544d7a8 100644
--- a/tests/util/caches/test_deferred_cache.py
+++ b/tests/util/caches/test_deferred_cache.py
@@ -26,7 +26,7 @@ class DeferredCacheTestCase(TestCase):
def test_empty(self) -> None:
cache: DeferredCache[str, int] = DeferredCache("test")
with self.assertRaises(KeyError):
- cache.get("foo")
+ cache.get("foo") # type: ignore[unused-awaitable]
def test_hit(self) -> None:
cache: DeferredCache[str, int] = DeferredCache("test")
@@ -48,7 +48,7 @@ class DeferredCacheTestCase(TestCase):
self.assertTrue(set_d.called)
return r
- get_d.addCallback(check1)
+ get_d.addCallback(check1) # type: ignore[unused-awaitable]
# now fire off all the deferreds
origin_d.callback(99)
@@ -130,7 +130,7 @@ class DeferredCacheTestCase(TestCase):
def test_get_immediate(self) -> None:
cache: DeferredCache[str, int] = DeferredCache("test")
d1: "defer.Deferred[int]" = defer.Deferred()
- cache.set("key1", d1)
+ cache.set("key1", d1) # type: ignore[unused-awaitable]
# get_immediate should return default
v = cache.get_immediate("key1", 1)
@@ -149,7 +149,7 @@ class DeferredCacheTestCase(TestCase):
cache.invalidate(("foo",))
with self.assertRaises(KeyError):
- cache.get(("foo",))
+ cache.get(("foo",)) # type: ignore[unused-awaitable]
def test_invalidate_all(self) -> None:
cache: DeferredCache[str, str] = DeferredCache("testcache")
@@ -161,10 +161,10 @@ class DeferredCacheTestCase(TestCase):
# add a couple of pending entries
d1: "defer.Deferred[str]" = defer.Deferred()
- cache.set("key1", d1, partial(record_callback, 0))
+ cache.set("key1", d1, partial(record_callback, 0)) # type: ignore[unused-awaitable]
d2: "defer.Deferred[str]" = defer.Deferred()
- cache.set("key2", d2, partial(record_callback, 1))
+ cache.set("key2", d2, partial(record_callback, 1)) # type: ignore[unused-awaitable]
# lookup should return pending deferreds
self.assertFalse(cache.get("key1").called)
@@ -181,9 +181,9 @@ class DeferredCacheTestCase(TestCase):
# lookup should fail
with self.assertRaises(KeyError):
- cache.get("key1")
+ cache.get("key1") # type: ignore[unused-awaitable]
with self.assertRaises(KeyError):
- cache.get("key2")
+ cache.get("key2") # type: ignore[unused-awaitable]
# both callbacks should have been callbacked
self.assertTrue(callback_record[0], "Invalidation callback for key1 not called")
@@ -192,7 +192,7 @@ class DeferredCacheTestCase(TestCase):
# letting the other lookup complete should do nothing
d1.callback("result1")
with self.assertRaises(KeyError):
- cache.get("key1", None)
+ cache.get("key1", None) # type: ignore[unused-awaitable]
def test_eviction(self) -> None:
cache: DeferredCache[int, str] = DeferredCache(
@@ -204,10 +204,10 @@ class DeferredCacheTestCase(TestCase):
cache.prefill(3, "three") # 1 will be evicted
with self.assertRaises(KeyError):
- cache.get(1)
+ cache.get(1) # type: ignore[unused-awaitable]
- cache.get(2)
- cache.get(3)
+ cache.get(2) # type: ignore[unused-awaitable]
+ cache.get(3) # type: ignore[unused-awaitable]
def test_eviction_lru(self) -> None:
cache: DeferredCache[int, str] = DeferredCache(
@@ -218,15 +218,15 @@ class DeferredCacheTestCase(TestCase):
cache.prefill(2, "two")
# Now access 1 again, thus causing 2 to be least-recently used
- cache.get(1)
+ cache.get(1) # type: ignore[unused-awaitable]
cache.prefill(3, "three")
with self.assertRaises(KeyError):
- cache.get(2)
+ cache.get(2) # type: ignore[unused-awaitable]
- cache.get(1)
- cache.get(3)
+ cache.get(1) # type: ignore[unused-awaitable]
+ cache.get(3) # type: ignore[unused-awaitable]
def test_eviction_iterable(self) -> None:
cache: DeferredCache[int, List[str]] = DeferredCache(
@@ -240,40 +240,40 @@ class DeferredCacheTestCase(TestCase):
cache.prefill(2, ["three"])
# Now access 1 again, thus causing 2 to be least-recently used
- cache.get(1)
+ cache.get(1) # type: ignore[unused-awaitable]
# Now add an item to the cache, which evicts 2.
cache.prefill(3, ["four"])
with self.assertRaises(KeyError):
- cache.get(2)
+ cache.get(2) # type: ignore[unused-awaitable]
# Ensure 1 & 3 are in the cache.
- cache.get(1)
- cache.get(3)
+ cache.get(1) # type: ignore[unused-awaitable]
+ cache.get(3) # type: ignore[unused-awaitable]
# Now access 1 again, thus causing 3 to be least-recently used
- cache.get(1)
+ cache.get(1) # type: ignore[unused-awaitable]
# Now add an item with multiple elements to the cache
cache.prefill(4, ["five", "six"])
# Both 1 and 3 are evicted since there's too many elements.
with self.assertRaises(KeyError):
- cache.get(1)
+ cache.get(1) # type: ignore[unused-awaitable]
with self.assertRaises(KeyError):
- cache.get(3)
+ cache.get(3) # type: ignore[unused-awaitable]
# Now add another item to fill the cache again.
cache.prefill(5, ["seven"])
# Now access 4, thus causing 5 to be least-recently used
- cache.get(4)
+ cache.get(4) # type: ignore[unused-awaitable]
# Add an empty item.
cache.prefill(6, [])
# 5 gets evicted and replaced since an empty element counts as an item.
with self.assertRaises(KeyError):
- cache.get(5)
- cache.get(4)
- cache.get(6)
+ cache.get(5) # type: ignore[unused-awaitable]
+ cache.get(4) # type: ignore[unused-awaitable]
+ cache.get(6) # type: ignore[unused-awaitable]
diff --git a/tests/util/caches/test_descriptors.py b/tests/util/caches/test_descriptors.py
index 13f1edd533..1cc009aee5 100644
--- a/tests/util/caches/test_descriptors.py
+++ b/tests/util/caches/test_descriptors.py
@@ -292,12 +292,14 @@ class DescriptorTestCase(unittest.TestCase):
# set off a deferred which will do a cache lookup
d1 = do_lookup()
self.assertEqual(current_context(), SENTINEL_CONTEXT)
- d1.addCallback(check_result)
+ # type-ignore: addCallback returns self, so as long as we await d1 (and d2)
+ # below, this error is a false positive.
+ d1.addCallback(check_result) # type: ignore[unused-awaitable]
# and another
d2 = do_lookup()
self.assertEqual(current_context(), SENTINEL_CONTEXT)
- d2.addCallback(check_result)
+ d2.addCallback(check_result) # type: ignore[unused-awaitable]
# let the lookup complete
complete_lookup.callback(None)
diff --git a/tests/util/test_async_helpers.py b/tests/util/test_async_helpers.py
index 91cac9822a..7730c23e5a 100644
--- a/tests/util/test_async_helpers.py
+++ b/tests/util/test_async_helpers.py
@@ -57,7 +57,7 @@ class ObservableDeferredTest(TestCase):
self.assertFalse(observer2.called)
return res
- observer1.addBoth(check_called_first)
+ observer1.addBoth(check_called_first) # type: ignore[unused-awaitable]
# store the results
results: List[Optional[ObservableDeferred[int]]] = [None, None]
@@ -68,8 +68,8 @@ class ObservableDeferredTest(TestCase):
results[idx] = res
return res
- observer1.addCallback(check_val, 0)
- observer2.addCallback(check_val, 1)
+ observer1.addCallback(check_val, 0) # type: ignore[unused-awaitable]
+ observer2.addCallback(check_val, 1) # type: ignore[unused-awaitable]
origin_d.callback(123)
self.assertEqual(results[0], 123, "observer 1 callback result")
@@ -90,7 +90,7 @@ class ObservableDeferredTest(TestCase):
self.assertFalse(observer2.called)
return res
- observer1.addBoth(check_called_first)
+ observer1.addBoth(check_called_first) # type: ignore[unused-awaitable]
# store the results
results: List[Optional[ObservableDeferred[str]]] = [None, None]
@@ -99,8 +99,8 @@ class ObservableDeferredTest(TestCase):
results[idx] = res
return None
- observer1.addErrback(check_val, 0)
- observer2.addErrback(check_val, 1)
+ observer1.addErrback(check_val, 0) # type: ignore[unused-awaitable]
+ observer2.addErrback(check_val, 1) # type: ignore[unused-awaitable]
try:
raise Exception("gah!")
@@ -208,11 +208,11 @@ class TimeoutDeferredTest(TestCase):
return res
original_deferred = blocking()
- original_deferred.addErrback(errback, "orig")
+ original_deferred.addErrback(errback, "orig") # type: ignore[unused-awaitable]
timing_out_d = timeout_deferred(original_deferred, 1.0, self.clock)
self.assertNoResult(timing_out_d)
self.assertIs(current_context(), SENTINEL_CONTEXT)
- timing_out_d.addErrback(errback, "timingout")
+ timing_out_d.addErrback(errback, "timingout") # type: ignore[unused-awaitable]
self.clock.pump((1.0,))
diff --git a/tests/util/test_linearizer.py b/tests/util/test_linearizer.py
index 47a1cfbdc1..c8f8f6bce4 100644
--- a/tests/util/test_linearizer.py
+++ b/tests/util/test_linearizer.py
@@ -140,7 +140,7 @@ class LinearizerTestCase(unittest.TestCase):
_, _, unblock = self._start_task(linearizer, key)
for i in range(1, 100):
- defer.ensureDeferred(func(i))
+ defer.ensureDeferred(func(i)) # type: ignore[unused-awaitable]
d = defer.ensureDeferred(func(1000))
unblock()
diff --git a/tests/util/test_logcontext.py b/tests/util/test_logcontext.py
index d64c162e1d..39f1ddb900 100644
--- a/tests/util/test_logcontext.py
+++ b/tests/util/test_logcontext.py
@@ -74,7 +74,8 @@ class LoggingContextTestCase(unittest.TestCase):
callback_completed = True
return res
- d2.addCallback(cb)
+ # type-ignore: this doesn't create a new Deferred: allCallback returns self.
+ d2.addCallback(cb) # type: ignore[unused-awaitable]
self._check_test_key("one")
@@ -195,5 +196,5 @@ def _chained_deferred_function() -> defer.Deferred:
reactor.callLater(0, d2.callback, res)
return d2
- d.addCallback(cb)
+ d.addCallback(cb) # type: ignore[unused-awaitable]
return d
diff --git a/tests/util/test_ratelimitutils.py b/tests/util/test_ratelimitutils.py
index fe4961dcf3..045a51c0b0 100644
--- a/tests/util/test_ratelimitutils.py
+++ b/tests/util/test_ratelimitutils.py
@@ -109,7 +109,7 @@ class FederationRateLimiterTestCase(TestCase):
await d
for _ in range(1, 100):
- defer.ensureDeferred(task())
+ defer.ensureDeferred(task()) # type: ignore[unused-awaitable]
last_task = defer.ensureDeferred(task())
|