[tor-commits] [sbws/master] new: resultdump: Add more ResultError types
juga at torproject.org
juga at torproject.org
Thu Mar 21 18:30:42 UTC 2019
commit eb4047e22d3b0c732e5a4de2c425c3710ff2cdf8
Author: juga0 <juga at riseup.net>
Date: Thu Feb 7 20:03:09 2019 +0000
new: resultdump: Add more ResultError types
to store all the possible errors while measuring a relay.
It adds more technical debt, since there should be only
a ResultError class.
Part of #28567.
---
sbws/lib/resultdump.py | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 87 insertions(+)
diff --git a/sbws/lib/resultdump.py b/sbws/lib/resultdump.py
index f904925..2149e8d 100644
--- a/sbws/lib/resultdump.py
+++ b/sbws/lib/resultdump.py
@@ -192,6 +192,12 @@ class _ResultType(_StrEnum):
ErrorCircuit = 'error-circ'
ErrorStream = 'error-stream'
ErrorAuth = 'error-auth'
+ # When it can not be found a second relay suitable to measure a relay.
+ # It is used in ``ResultErrorSecondRelay``.
+ ErrorSecondRelay = 'error-second-relay'
+ # When there is not a working destination Web Server.
+ # It is used in ``ResultErrorDestionation``.
+ ErrorDestination = 'error-destination'
class Result:
@@ -337,6 +343,10 @@ class Result:
return ResultErrorStream.from_dict(d)
elif d['type'] == _ResultType.ErrorAuth.value:
return ResultErrorAuth.from_dict(d)
+ elif d['type'] == _ResultType.ErrorSecondRelay.value:
+ return ResultErrorSecondRelay.from_dict(d)
+ elif d['type'] == _ResultType.ErrorDestination.value:
+ return ResultErrorDestination.from_dict(d)
else:
raise NotImplementedError(
'Unknown result type {}'.format(d['type']))
@@ -460,6 +470,83 @@ class ResultErrorStream(ResultError):
return d
+class ResultErrorSecondRelay(ResultError):
+ """
+ Error when it could not be found a second relay suitable to measure
+ a relay.
+
+ A second suitable relay is a relay that:
+ - Has at least equal bandwidth as the relay to measure.
+ - If the relay to measure is not an exit,
+ the second relay is an exit without `bad` flag and can exit to port 443.
+ - If the relay to measure is an exit, the second relay is not an exit.
+
+ It is instanciated in :func:`~sbws.core.scanner.measure_relay`.
+
+ .. note:: this duplicates code and add more tech-debt,
+ since it's the same as the other
+ :class:`~sbws.lib.resultdump.ResultError` classes except for the
+ ``type``.
+ In a future refactor, there should be only one ``ResultError`` class
+ and assign the type in the ``scanner`` module.
+ """
+ def __init__(self, *a, **kw):
+ super().__init__(*a, **kw)
+
+ @property
+ def type(self):
+ return _ResultType.ErrorSecondRelay
+
+ @staticmethod
+ def from_dict(d):
+ assert isinstance(d, dict)
+ return ResultErrorSecondRelay(
+ Result.Relay(
+ d['fingerprint'], d['nickname'], d['address'],
+ d['master_key_ed25519']),
+ d['circ'], d['dest_url'], d['scanner'],
+ msg=d['msg'], t=d['time'])
+
+ def to_dict(self):
+ d = super().to_dict()
+ return d
+
+
+class ResultErrorDestination(ResultError):
+ """
+ Error when there is not a working destination Web Server.
+
+ It is instanciated in :func:`~sbws.core.scanner.measure_relay`.
+
+ .. note:: this duplicates code and add more tech-debt,
+ since it's the same as the other
+ :class:`~sbws.lib.resultdump.ResultError` classes except for the
+ ``type``.
+ In a future refactor, there should be only one ``ResultError`` class
+ and assign the type in the ``scanner`` module.
+ """
+ def __init__(self, *a, **kw):
+ super().__init__(*a, **kw)
+
+ @property
+ def type(self):
+ return _ResultType.ErrorSecondRelay
+
+ @staticmethod
+ def from_dict(d):
+ assert isinstance(d, dict)
+ return ResultErrorSecondRelay(
+ Result.Relay(
+ d['fingerprint'], d['nickname'], d['address'],
+ d['master_key_ed25519']),
+ d['circ'], d['dest_url'], d['scanner'],
+ msg=d['msg'], t=d['time'])
+
+ def to_dict(self):
+ d = super().to_dict()
+ return d
+
+
class ResultErrorAuth(ResultError):
def __init__(self, *a, **kw):
super().__init__(*a, **kw)
More information about the tor-commits
mailing list