[tor-commits] [stem/master] Test benchmark_stem example

atagar at torproject.org atagar at torproject.org
Fri Oct 2 23:16:05 UTC 2020


commit 4497148d0be8b267e032d8867c082a3588529581
Author: Damian Johnson <atagar at torproject.org>
Date:   Mon Sep 21 17:26:30 2020 -0700

    Test benchmark_stem example
    
    Caught our first bug in our example code... of sorts. This adds a
    'descriptor_type' argument to benchmark_stem.py because CollecTor
    microdescriptor archives contain a mixture of consensuses and microdescriptors.
---
 docs/_static/example/benchmark_stem.py | 11 +++---
 test/unit/examples.py                  | 62 +++++++++++++++++++++++++++++++---
 2 files changed, 64 insertions(+), 9 deletions(-)

diff --git a/docs/_static/example/benchmark_stem.py b/docs/_static/example/benchmark_stem.py
index 8b71d730..7094c3dd 100644
--- a/docs/_static/example/benchmark_stem.py
+++ b/docs/_static/example/benchmark_stem.py
@@ -60,7 +60,7 @@ def measure_fraction_relays_exit_80_microdescriptors(path):
   start_time = time.time()
   exits, count = 0, 0
 
-  for desc in stem.descriptor.parse_file(path):
+  for desc in stem.descriptor.parse_file(path, descriptor_type = 'microdescriptor 1.0'):
     if desc.exit_policy.can_exit_to(port = 80):
       exits += 1
 
@@ -74,8 +74,9 @@ def measure_fraction_relays_exit_80_microdescriptors(path):
   print('  Time per microdescriptor: %0.5f seconds' % (runtime / count))
   print('')
 
-measure_average_advertised_bandwidth('/home/atagar/Desktop/server-descriptors-2015-11.tar')
-measure_countries_v3_requests('/home/atagar/Desktop/extra-infos-2015-11.tar')
-measure_average_relays_exit('/home/atagar/Desktop/consensuses-2015-11.tar')
-measure_fraction_relays_exit_80_microdescriptors('/home/atagar/Desktop/microdescs-2015-11.tar')
+if __name__ == '__main__':
+  measure_average_advertised_bandwidth('/home/atagar/Desktop/server-descriptors-2015-11.tar')
+  measure_countries_v3_requests('/home/atagar/Desktop/extra-infos-2015-11.tar')
+  measure_average_relays_exit('/home/atagar/Desktop/consensuses-2015-11.tar')
+  measure_fraction_relays_exit_80_microdescriptors('/home/atagar/Desktop/microdescs-2015-11.tar')
 
diff --git a/test/unit/examples.py b/test/unit/examples.py
index 6a00d9b7..124ca3c7 100644
--- a/test/unit/examples.py
+++ b/test/unit/examples.py
@@ -15,6 +15,7 @@ from stem.descriptor.bandwidth_file import BandwidthFile
 from unittest.mock import patch
 
 EXAMPLE_DIR = os.path.join(test.STEM_BASE, 'docs', '_static', 'example')
+DESC_DIR = os.path.join(test.STEM_BASE, 'test', 'unit', 'descriptor', 'data')
 
 EXPECTED_BANDWIDTH_STATS = """\
 Relay FDCF49562E65B1CC219410009BD48A9EED387C77
@@ -33,7 +34,7 @@ Relay BD4172533C3F7271ABCCD9F057E06FD91547C42B
 
 """
 
-EXPECTED_BENCHMARK_SERVER_DESC_PREFIX = """\
+EXPECTED_SERVER_DESC_BENCHMARK_PREFIX = """\
 Finished measure_average_advertised_bandwidth('%s')
   Total time: 0 seconds
   Processed server descriptors: 5
@@ -41,6 +42,30 @@ Finished measure_average_advertised_bandwidth('%s')
   Time per server descriptor:
 """.rstrip()
 
+EXPECTED_EXTRAINFO_BENCHMARK_PREFIX = """\
+Finished measure_countries_v3_requests('%s')
+  Total time: 0 seconds
+  Processed extrainfo descriptors: 7
+  Number of countries: 6
+  Time per extrainfo descriptor:
+""".rstrip()
+
+EXPECTED_CONSENSUS_BENCHMARK_PREFIX = """\
+Finished measure_average_relays_exit('%s')
+  Total time: 0 seconds
+  Processed 2 consensuses with 243 router status entries
+  Total exits: 28 (0.12%%)
+  Time per consensus:
+""".rstrip()
+
+EXPECTED_MICRODESC_BENCHMARK_PREFIX = """\
+Finished measure_fraction_relays_exit_80_microdescriptors('%s')
+  Total time: 0 seconds
+  Processed microdescriptors: 3
+  Total exits to port 80: 1 (0.33%%)
+  Time per microdescriptor:
+""".rstrip()
+
 
 def import_example(module_name):
   """
@@ -89,15 +114,44 @@ class TestExamples(unittest.TestCase):
 
   @patch('sys.stdout', new_callable = io.StringIO)
   def test_benchmark_server_descriptor_stem(self, stdout_mock):
-    path = os.path.join(test.STEM_BASE, 'test', 'unit', 'descriptor', 'data', 'collector', 'server-descriptors-2005-12-cropped.tar')
+    path = os.path.join(DESC_DIR, 'collector', 'server-descriptors-2005-12-cropped.tar')
+    expected_prefix = EXPECTED_SERVER_DESC_BENCHMARK_PREFIX % path
 
     module = import_example('benchmark_server_descriptor_stem')
     module.measure_average_advertised_bandwidth(path)
 
-    self.assertTrue(stdout_mock.getvalue().startswith(EXPECTED_BENCHMARK_SERVER_DESC_PREFIX % path))
+    self.assertTrue(stdout_mock.getvalue().startswith(expected_prefix))
 
   def test_benchmark_stem(self):
-    pass
+    module = import_example('benchmark_stem')
+
+    with patch('sys.stdout', new_callable = io.StringIO) as stdout_mock:
+      path = os.path.join(DESC_DIR, 'collector', 'server-descriptors-2005-12-cropped.tar')
+      expected_prefix = EXPECTED_SERVER_DESC_BENCHMARK_PREFIX % path
+
+      module.measure_average_advertised_bandwidth(path)
+      self.assertTrue(stdout_mock.getvalue().startswith(expected_prefix))
+
+    with patch('sys.stdout', new_callable = io.StringIO) as stdout_mock:
+      path = os.path.join(DESC_DIR, 'collector', 'extra-infos-2019-04-cropped.tar')
+      expected_prefix = EXPECTED_EXTRAINFO_BENCHMARK_PREFIX % path
+
+      module.measure_countries_v3_requests(path)
+      self.assertTrue(stdout_mock.getvalue().startswith(expected_prefix))
+
+    with patch('sys.stdout', new_callable = io.StringIO) as stdout_mock:
+      path = os.path.join(DESC_DIR, 'collector', 'consensuses-2018-06-cropped.tar')
+      expected_prefix = EXPECTED_CONSENSUS_BENCHMARK_PREFIX % path
+
+      module.measure_average_relays_exit(path)
+      self.assertTrue(stdout_mock.getvalue().startswith(expected_prefix))
+
+    with patch('sys.stdout', new_callable = io.StringIO) as stdout_mock:
+      path = os.path.join(DESC_DIR, 'collector', 'microdescs-2019-05-cropped.tar')
+      expected_prefix = EXPECTED_MICRODESC_BENCHMARK_PREFIX % path
+
+      module.measure_fraction_relays_exit_80_microdescriptors(path)
+      self.assertTrue(stdout_mock.getvalue().startswith(expected_prefix))
 
   def test_broken_listener(self):
     pass





More information about the tor-commits mailing list