diff --git a/Furious/Service/EndpointInfoService.py b/Furious/Service/EndpointInfoService.py index cfcdb56..4e5c338 100644 --- a/Furious/Service/EndpointInfoService.py +++ b/Furious/Service/EndpointInfoService.py @@ -346,6 +346,7 @@ class EndpointInfoService(QtCore.QObject): generation = self._generation self.state = state + self.stateChanged.emit(state) return self._isCurrentGeneration(generation) @@ -355,6 +356,7 @@ class EndpointInfoService(QtCore.QObject): generation = self._generation self.result = result + self.resultChanged.emit(result) return self._isCurrentGeneration(generation) @@ -368,6 +370,7 @@ class EndpointInfoService(QtCore.QObject): self._cached = False self._requestInFlight = False self._countryHint = '' + self.httpClient.cancelAll() if not self._isCurrentGeneration(generation): diff --git a/tests/fixtures/editor_lifetime_probe.py b/tests/fixtures/editor_lifetime_probe.py index 85e1a5f..94aefbf 100644 --- a/tests/fixtures/editor_lifetime_probe.py +++ b/tests/fixtures/editor_lifetime_probe.py @@ -162,8 +162,10 @@ def runNotificationAndDnsProbe(iterations=100): assert calls == ['first', 'last'] assert not isValid(victim) + deleteQObject(first) deleteQObject(last) + assert not len(pool) poolNotifications += 1 @@ -171,6 +173,7 @@ def runNotificationAndDnsProbe(iterations=100): class PendingReply(QNetworkReply): def abort(self): self.setFinished(True) + self.finished.emit() def readData(self, _maximumLength): @@ -181,6 +184,7 @@ def runNotificationAndDnsProbe(iterations=100): resolver = SimpleNamespace(_newResultMap=DnsResolver._newResultMap) operation = DnsResolutionOperation(resolver, 'example.test') results = [] + operation.finished.connect(lambda *_args: results.append(True)) def beginResolve(resultMap): @@ -192,6 +196,7 @@ def runNotificationAndDnsProbe(iterations=100): deleteQObject(operation) resolver._beginResolve = beginResolve + operation.start() if boundary == 'cancel-start': @@ -202,8 +207,11 @@ def runNotificationAndDnsProbe(iterations=100): operation._resultMap['reference'].append(reply) reply.finished.connect(lambda: deleteQObject(operation)) operation._timeout = 0 + operation._poll() + assert reply.isFinished() + deleteQObject(reply) assert not results @@ -220,7 +228,9 @@ def runNotificationAndDnsProbe(iterations=100): manager, '_clearUsageOnReconnectEnabled', return_value=True ): manager._consumeResult(manager._generation, TrafficCounters(100, 100), 1.0) + getattr(manager, signalName).connect(lambda *_args: deleteQObject(manager)) + manager._sampleReady.emit(manager._generation, TrafficCounters(10, 10), 2.0) assert not isValid(manager) @@ -290,6 +300,7 @@ def runNotificationAndDnsProbe(iterations=100): if isValid(service): assert service.state is EndpointInfoState.Disabled assert not service._requestInFlight + deleteQObject(service) deleteQObject(client) diff --git a/tests/test_connection_startup_async.py b/tests/test_connection_startup_async.py index f811126..f6566d7 100644 --- a/tests/test_connection_startup_async.py +++ b/tests/test_connection_startup_async.py @@ -623,9 +623,11 @@ class ConnectionStartupAsyncTest(TestCase): for _ in range(20): resolver = mock.Mock() resolver._newResultMap = DnsResolver._newResultMap + operation = DnsResolutionOperation(resolver, 'example.test') results = [] destroyed = [] + operation.finished.connect(lambda *_args: results.append(True)) operation.destroyed.connect(lambda *_args: destroyed.append(True)) @@ -665,6 +667,7 @@ class ConnectionStartupAsyncTest(TestCase): class PendingReply(QtNetwork.QNetworkReply): def abort(self): self.setFinished(True) + self.finished.emit() def readData(self, _maximumLength): @@ -673,10 +676,12 @@ class ConnectionStartupAsyncTest(TestCase): for _ in range(20): resolver = mock.Mock() resolver._newResultMap = DnsResolver._newResultMap + operation = DnsResolutionOperation(resolver, 'example.test', timeout=1) reply = PendingReply() results = [] destroyed = [] + operation.finished.connect(lambda *_args: results.append(True)) operation.destroyed.connect(lambda *_args: destroyed.append(True)) operation._resultMap['depth'] = 1 diff --git a/tests/test_endpoint_info.py b/tests/test_endpoint_info.py index 0a9cb40..e51a326 100644 --- a/tests/test_endpoint_info.py +++ b/tests/test_endpoint_info.py @@ -342,6 +342,7 @@ class EndpointInfoServiceTest(unittest.TestCase): service.refresh() processQtEvents() + qtErrors.assert_not_called() self.assertEqual(triggered, [True]) @@ -365,7 +366,9 @@ class EndpointInfoServiceTest(unittest.TestCase): """The latest preference wins even when a listener reverses the transition.""" service, controller, client = self._service() service.setPageVisible(True) + generation = service._generation + service.enabledChanged.connect( lambda enabled: service.setEnabled(True) if not enabled else None ) diff --git a/tests/test_frozenlib.py b/tests/test_frozenlib.py index 50f78c3..102253a 100644 --- a/tests/test_frozenlib.py +++ b/tests/test_frozenlib.py @@ -217,6 +217,7 @@ class MixinNotificationLifetimeTest(unittest.TestCase): victim = Participant('victim') last = Participant('last') first.victim = victim + victim.destroyed.connect(lambda *_args: destroyed.append(True)) try: diff --git a/tests/test_service_runtime.py b/tests/test_service_runtime.py index 3d3f0cb..fa34e8e 100644 --- a/tests/test_service_runtime.py +++ b/tests/test_service_runtime.py @@ -652,6 +652,7 @@ class TrafficStatsManagerTest(unittest.TestCase): ): manager.connectedCallback() processQtEvents() + qtErrors.assert_not_called() if boundary == 'reset': @@ -721,6 +722,7 @@ class TrafficStatsManagerTest(unittest.TestCase): expected = signalNames[ : signalNames.index(signalName) + 1 ] + self.assertEqual(delivered, list(expected)) if action == 'destroy':