commit 46d39df76cc51132c8e38c4fcbaabd45844e0c1c Author: Damian Johnson atagar@torproject.org Date: Sat Apr 6 16:52:09 2013 -0700
Support for the ADDRMAP event's CACHED flag
Adding support for the new CACHED flag added by Desoxy...
https://trac.torproject.org/8596 https://gitweb.torproject.org/torspec.git/commitdiff/25b0d43a9ebe89541625e9f... --- stem/response/events.py | 11 +++++++++++ test/unit/response/events.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 0 deletions(-)
diff --git a/stem/response/events.py b/stem/response/events.py index 7ae4854..d9e3493 100644 --- a/stem/response/events.py +++ b/stem/response/events.py @@ -166,12 +166,15 @@ class AddrMapEvent(Event): :var datetime expiry: expiration time of the resolution in local time :var str error: error code if the resolution failed :var datetime utc_expiry: expiration time of the resolution in UTC + :var bool cached: **True** if the resolution will be kept until it expires, + **False** otherwise or **None** if undefined """
_POSITIONAL_ARGS = ("hostname", "destination", "expiry") _KEYWORD_ARGS = { "error": "error", "EXPIRES": "utc_expiry", + "CACHED": "cached", } _OPTIONALLY_QUOTED = ("expiry")
@@ -191,6 +194,14 @@ class AddrMapEvent(Event): if self.utc_expiry is not None: self.utc_expiry = datetime.datetime.strptime(self.utc_expiry, "%Y-%m-%d %H:%M:%S")
+ if self.cached is not None: + if self.cached == "YES": + self.cached = True + elif self.cached == "NO": + self.cached = False + else: + raise stem.ProtocolError("An ADDRMAP event's CACHED mapping can only be 'YES' or 'NO': %s" % self) +
class AuthDirNewDescEvent(Event): """ diff --git a/test/unit/response/events.py b/test/unit/response/events.py index 98e7f95..e41c80c 100644 --- a/test/unit/response/events.py +++ b/test/unit/response/events.py @@ -29,6 +29,17 @@ EXPIRES="2012-11-19 08:50:13"' ADDRMAP_BAD_2 = '650 ADDRMAP www.atagar.com 75.119.206.243 "2012-11-19 00:50:13 \ EXPIRES="2012-11-19 08:50:13"'
+ADDRMAP_CACHED = '650 ADDRMAP example.com 192.0.43.10 "2013-04-03 22:31:22" \ +EXPIRES="2013-04-03 20:31:22" \ +CACHED="YES"' + +ADDRMAP_NOT_CACHED = '650 ADDRMAP example.com 192.0.43.10 "2013-04-03 22:29:11" \ +EXPIRES="2013-04-03 20:29:11" \ +CACHED="NO"' + +ADDRMAP_CACHED_MALFORMED = '650 ADDRMAP example.com 192.0.43.10 "2013-04-03 22:29:11" \ +CACHED="KINDA"' + # BUILDTIMEOUT_SET event from tor 0.2.3.16.
BUILD_TIMEOUT_EVENT = "650 BUILDTIMEOUT_SET COMPUTED \ @@ -401,11 +412,29 @@ class TestEvents(unittest.TestCase): self.assertEqual(datetime.datetime(2012, 11, 19, 0, 50, 13), event.expiry) self.assertEqual("yes", event.error) self.assertEqual(datetime.datetime(2012, 11, 19, 8, 50, 13), event.utc_expiry) + self.assertEqual(None, event.cached)
# malformed content where quotes are missing self.assertRaises(ProtocolError, _get_event, ADDRMAP_BAD_1) self.assertRaises(ProtocolError, _get_event, ADDRMAP_BAD_2)
+ # check the CACHED flag + + event = _get_event(ADDRMAP_CACHED) + + self.assertTrue(isinstance(event, stem.response.events.AddrMapEvent)) + self.assertEqual("example.com", event.hostname) + self.assertEqual(True, event.cached) + + event = _get_event(ADDRMAP_NOT_CACHED) + + self.assertTrue(isinstance(event, stem.response.events.AddrMapEvent)) + self.assertEqual("example.com", event.hostname) + self.assertEqual(False, event.cached) + + # the CACHED argument should only allow YES or NO + self.assertRaises(ProtocolError, _get_event, ADDRMAP_CACHED_MALFORMED) + def test_authdir_newdesc_event(self): # TODO: awaiting test data - https://trac.torproject.org/7534
tor-commits@lists.torproject.org