[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