[tor-commits] [sbws/maint-1.1] fix: v3bwfile: Add tor_version KeyValue

juga at torproject.org juga at torproject.org
Mon Mar 9 14:38:02 UTC 2020


commit 6843145a2887fb2496a2b5cef30ffabae2402cda
Author: juga0 <juga at riseup.net>
Date:   Sun Feb 9 17:03:13 2020 +0000

    fix: v3bwfile: Add tor_version KeyValue
    
    - Create new KeyValues constants for the new v1.5.0 KeyValues
    - Instanciate State in Header.from_results so that there is no need
      to create new methods for all the header KeyValues that are read
      from the state file
    - Add tor_version to the kwargs to initialize the Header
    - Write tor_version in the state file when the scanner is started
    
    Closes: #30196.
---
 sbws/core/scanner.py            |  7 ++++++-
 sbws/lib/v3bwfile.py            | 19 +++++++++++++++++++
 tests/unit/lib/test_v3bwfile.py | 15 +++++++++++----
 3 files changed, 36 insertions(+), 5 deletions(-)

diff --git a/sbws/core/scanner.py b/sbws/core/scanner.py
index d3ed5b1..3178594 100644
--- a/sbws/core/scanner.py
+++ b/sbws/core/scanner.py
@@ -679,9 +679,14 @@ def run_speedtest(args, conf):
     # When there will be a refactor where conf is global, this can be removed
     # from here.
     state = State(conf.getpath('paths', 'state_fname'))
+    # XXX: tech-debt: create new function to obtain the controller and to
+    # write the state, so that a unit test to check the state tor version can
+    # be created
+    # Store tor version whenever the scanner starts.
+    state['tor_version'] = str(controller.get_version())
     # Call only once to initialize http_headers
     settings.init_http_headers(conf.get('scanner', 'nickname'), state['uuid'],
-                               str(controller.get_version()))
+                               state['tor_version'])
     # To do not have to pass args and conf to RelayList, pass an extra
     # argument with the data_period
     measurements_period = conf.getint('general', 'data_period')
diff --git a/sbws/lib/v3bwfile.py b/sbws/lib/v3bwfile.py
index 49015c0..2f34376 100644
--- a/sbws/lib/v3bwfile.py
+++ b/sbws/lib/v3bwfile.py
@@ -121,12 +121,21 @@ HEADER_KEYS_V1_4 = [
     'time_to_report_half_network',
 ] + HEADER_RECENT_MEASUREMENTS_EXCLUDED_KEYS
 
+# KeyValues added in the Bandwidth File v1.5.0
+# XXX: Change SPEC_VERSION when all the v1.5.0 keys are added, before a new
+# sbws release.
+# Tor version will be obtained from the state file, so it won't be pass as an
+# argument, but will be self-initialized.
+HEADER_KEYS_V1_5_TO_INIT = ['tor_version']
+HEADER_KEYS_V1_5 = HEADER_KEYS_V1_5_TO_INIT
+
 # KeyValues that are initialized from arguments, not self-initialized.
 HEADER_INIT_KEYS = (
     HEADER_KEYS_V1_1_TO_INIT
     + HEADER_KEYS_V1_3
     + HEADER_KEYS_V1_2
     + HEADER_KEYS_V1_4
+    + HEADER_KEYS_V1_5_TO_INIT
 )
 
 HEADER_INT_KEYS = HEADER_KEYS_V1_2 + HEADER_KEYS_V1_4
@@ -137,6 +146,7 @@ HEADER_UNORDERED_KEYS = (
     + HEADER_KEYS_V1_3
     + HEADER_KEYS_V1_2
     + HEADER_KEYS_V1_4
+    + HEADER_KEYS_V1_5
 )
 # List of all the KeyValues currently being used to generate the file
 HEADER_ALL_KEYS = HEADER_KEYS_V1_1_ORDERED + HEADER_UNORDERED_KEYS
@@ -331,6 +341,15 @@ class V3BWHeader(object):
         generator_started = cls.generator_started_from_file(state_fpath)
         recent_consensus_count = cls.consensus_count_from_file(state_fpath)
         timestamp = str(latest_bandwidth)
+
+        # XXX: tech-debt: obtain the other values from the state file using
+        # this state variable.
+        # Store the state as an attribute of the object?
+        state = State(state_fpath)
+        tor_version = state.get('tor_version', None)
+        if tor_version:
+            kwargs['tor_version'] = tor_version
+
         kwargs['latest_bandwidth'] = unixts_to_isodt_str(latest_bandwidth)
         kwargs['earliest_bandwidth'] = unixts_to_isodt_str(earliest_bandwidth)
         if generator_started is not None:
diff --git a/tests/unit/lib/test_v3bwfile.py b/tests/unit/lib/test_v3bwfile.py
index 40ffe16..566cc8d 100644
--- a/tests/unit/lib/test_v3bwfile.py
+++ b/tests/unit/lib/test_v3bwfile.py
@@ -50,10 +50,14 @@ earliest_bandwidth_l = KEYVALUE_SEP_V1.join(['earliest_bandwidth',
 generator_started = '2018-04-16T14:09:05'
 generator_started_l = KEYVALUE_SEP_V1.join(['generator_started',
                                            generator_started])
+tor_version = '0.4.2.5'
+tor_version_l = KEYVALUE_SEP_V1.join(['tor_version', tor_version])
+
 header_extra_ls = [timestamp_l, version_l,
                    earliest_bandwidth_l, file_created_l, generator_started_l,
                    latest_bandwidth_l,
-                   software_l, software_version_l, TERMINATOR]
+                   software_l, software_version_l, tor_version_l,
+                   TERMINATOR]
 header_extra_str = LINE_SEP.join(header_extra_ls) + LINE_SEP
 
 # Line produced without any scaling.
@@ -90,7 +94,8 @@ def test_v3bwheader_extra_str():
     header = V3BWHeader(timestamp_l,
                         file_created=file_created,
                         generator_started=generator_started,
-                        earliest_bandwidth=earliest_bandwidth)
+                        earliest_bandwidth=earliest_bandwidth,
+                        tor_version=tor_version)
     assert header_extra_str == str(header)
 
 
@@ -98,7 +103,8 @@ def test_v3bwheader_from_lines():
     header_obj = V3BWHeader(timestamp_l,
                             file_created=file_created,
                             generator_started=generator_started,
-                            earliest_bandwidth=earliest_bandwidth)
+                            earliest_bandwidth=earliest_bandwidth,
+                            tor_version=tor_version)
     header, _ = V3BWHeader.from_lines_v1(header_extra_ls)
     assert str(header_obj) == str(header)
 
@@ -107,7 +113,8 @@ def test_v3bwheader_from_text():
     header_obj = V3BWHeader(timestamp_l,
                             file_created=file_created,
                             generator_started=generator_started,
-                            earliest_bandwidth=earliest_bandwidth)
+                            earliest_bandwidth=earliest_bandwidth,
+                            tor_version=tor_version)
     header, _ = V3BWHeader.from_text_v1(header_extra_str)
     assert str(header_obj) == str(header)
 





More information about the tor-commits mailing list