tor-commits
Threads by month
- ----- 2025 -----
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
January 2015
- 20 participants
- 934 discussions
commit 8b332edcf81ae3e2b688ed0890633a0a5fa1b1b4
Author: Damian Johnson <atagar(a)torproject.org>
Date: Sat Jan 3 18:23:57 2015 -0800
Noting this change in the changelog
We don't really have a section this fits under so making it a general note for
the next release.
---
docs/change_log.rst | 3 +++
1 file changed, 3 insertions(+)
diff --git a/docs/change_log.rst b/docs/change_log.rst
index 3f8a4bc..432ca66 100644
--- a/docs/change_log.rst
+++ b/docs/change_log.rst
@@ -41,6 +41,9 @@ Unreleased
The following are only available within Stem's `git repository
<download.html>`_.
+With this next release the codebase runs directly under both python2 and
+python3 without a 2to3 conversion (:trac:`14075`).
+
* **Utilities**
* :func:`stem.util.connection.port_usage` always returned None (:trac:`14046`)
1
0
commit cc5d28ed0872f0af7f5ca1882bd39bc9f1ae78b5
Author: Damian Johnson <atagar(a)torproject.org>
Date: Sat Jan 3 17:52:25 2015 -0800
Dropping minor tweaks
Just a couple non-impactful tweaks that seem to have slipped in. First is an
unused 'oldstdout' (probably there while debugging) and the second is replacing
io.StringIO with a 'from' import (I liked it a bit better before for uniformity
with the other imports).
I'm also spotting a tweak where Foxboron replaces OrderedDict in the example
test with a normal dict (reverting an earlier change of his). There's another
ticket though that concerns ordering.
---
stem/socket.py | 1 -
stem/util/enum.py | 2 +-
test/unit/descriptor/reader.py | 14 +++++++-------
test/unit/tutorial_examples.py | 3 ---
4 files changed, 8 insertions(+), 12 deletions(-)
diff --git a/stem/socket.py b/stem/socket.py
index e308c8a..7991899 100644
--- a/stem/socket.py
+++ b/stem/socket.py
@@ -69,7 +69,6 @@ Tor...
from __future__ import absolute_import
-
import re
import socket
import threading
diff --git a/stem/util/enum.py b/stem/util/enum.py
index bcf66ee..069041d 100644
--- a/stem/util/enum.py
+++ b/stem/util/enum.py
@@ -160,7 +160,7 @@ class Enum(object):
if item in vars(self):
return getattr(self, item)
else:
- keys = ', '.join(list(self.keys()))
+ keys = ', '.join(self.keys())
raise ValueError("'%s' isn't among our enumeration keys, which includes: %s" % (item, keys))
def __iter__(self):
diff --git a/test/unit/descriptor/reader.py b/test/unit/descriptor/reader.py
index d220557..a699af2 100644
--- a/test/unit/descriptor/reader.py
+++ b/test/unit/descriptor/reader.py
@@ -3,6 +3,7 @@ Unit tests for stem.descriptor.reader.
"""
import getpass
+import io
import os
import shutil
import signal
@@ -11,7 +12,6 @@ import tarfile
import tempfile
import time
import unittest
-from io import StringIO
import stem.descriptor.reader
import test.runner
@@ -108,7 +108,7 @@ class TestDescriptorReader(unittest.TestCase):
'/dir/after empty line': 12345,
}
- open_mock.return_value = StringIO(str_type('\n'.join(test_lines)))
+ open_mock.return_value = io.StringIO(str_type('\n'.join(test_lines)))
self.assertEqual(expected_value, stem.descriptor.reader.load_processed_files(''))
@patch('stem.descriptor.reader.open', create = True)
@@ -117,7 +117,7 @@ class TestDescriptorReader(unittest.TestCase):
Tests the load_processed_files() function with an empty file.
"""
- open_mock.return_value = StringIO(str_type(''))
+ open_mock.return_value = io.StringIO(str_type(''))
self.assertEqual({}, stem.descriptor.reader.load_processed_files(''))
@patch('stem.descriptor.reader.open', create = True)
@@ -127,7 +127,7 @@ class TestDescriptorReader(unittest.TestCase):
it is missing the file path.
"""
- open_mock.return_value = StringIO(str_type(' 12345'))
+ open_mock.return_value = io.StringIO(str_type(' 12345'))
self.assertRaises(TypeError, stem.descriptor.reader.load_processed_files, '')
@patch('stem.descriptor.reader.open', create = True)
@@ -137,7 +137,7 @@ class TestDescriptorReader(unittest.TestCase):
it is missing the timestamp.
"""
- open_mock.return_value = StringIO(str_type('/dir/file '))
+ open_mock.return_value = io.StringIO(str_type('/dir/file '))
self.assertRaises(TypeError, stem.descriptor.reader.load_processed_files, '')
@patch('stem.descriptor.reader.open', create = True)
@@ -147,7 +147,7 @@ class TestDescriptorReader(unittest.TestCase):
it has an invalid file path.
"""
- open_mock.return_value = StringIO(str_type('not_an_absolute_file 12345'))
+ open_mock.return_value = io.StringIO(str_type('not_an_absolute_file 12345'))
self.assertRaises(TypeError, stem.descriptor.reader.load_processed_files, '')
@patch('stem.descriptor.reader.open', create = True)
@@ -157,7 +157,7 @@ class TestDescriptorReader(unittest.TestCase):
it has a non-numeric timestamp.
"""
- open_mock.return_value = StringIO(str_type('/dir/file 123a'))
+ open_mock.return_value = io.StringIO(str_type('/dir/file 123a'))
self.assertRaises(TypeError, stem.descriptor.reader.load_processed_files, '')
def test_load_processed_files_from_data(self):
diff --git a/test/unit/tutorial_examples.py b/test/unit/tutorial_examples.py
index fac6fbb..5ad5189 100644
--- a/test/unit/tutorial_examples.py
+++ b/test/unit/tutorial_examples.py
@@ -31,9 +31,6 @@ try:
except ImportError:
from mock import Mock, patch
-import sys
-oldstdout = sys.stdout
-
CIRC_CONTENT = '650 CIRC %d %s \
%s \
PURPOSE=%s'
1
0
commit 28d417a328dcdbbc2db3965816ddc7e28fb18621
Author: Damian Johnson <atagar(a)torproject.org>
Date: Sat Jan 3 18:18:35 2015 -0800
tor-prompt printed oddball '()'
That's interesting. In python2 having "print()" is the same as "print('()')".
Weird, but ok - giving it an empty string to fix it.
---
stem/interpreter/__init__.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/stem/interpreter/__init__.py b/stem/interpreter/__init__.py
index c96e11c..d9828f7 100644
--- a/stem/interpreter/__init__.py
+++ b/stem/interpreter/__init__.py
@@ -121,7 +121,7 @@ def main():
line_format = HEADER_BOLD_OUTPUT if line.startswith(' ') else HEADER_OUTPUT
print(format(line, *line_format))
- print()
+ print('')
while True:
try:
@@ -137,5 +137,5 @@ def main():
if response is not None:
print(response)
except (KeyboardInterrupt, EOFError, stem.SocketClosed) as exc:
- print() # move cursor to the following line
+ print('') # move cursor to the following line
break
1
0

04 Jan '15
commit 670b77e1a4a5cbde400547bd0ed0f47450845bac
Author: Damian Johnson <atagar(a)torproject.org>
Date: Sat Jan 3 18:12:43 2015 -0800
Don't do a 2to3 conversion when running setup.py
Now that we have a unified codebase there's no longer any need to do a 2to3
conversion. Tested this by running...
% python setup.py build
... and....
% python3 setup.py build
Then checking with either both python2 and python3 can import some modules.
---
docs/faq.rst | 4 +---
setup.py | 6 ------
2 files changed, 1 insertion(+), 9 deletions(-)
diff --git a/docs/faq.rst b/docs/faq.rst
index 1c0dd70..eb7f06f 100644
--- a/docs/faq.rst
+++ b/docs/faq.rst
@@ -55,9 +55,7 @@ functionality.
What Python versions is Stem compatible with?
---------------------------------------------
-Stem works with **Python 2.6 and greater**. This includes the Python 3.x series
-by installing Stem via python3 (see our `installation instructions
-<https://pypi.python.org/pypi/stem/>`_ for more information).
+Stem works with **Python 2.6 and greater**, including the Python 3.x series.
.. _can_i_interact_with_tors_controller_interface_directly:
diff --git a/setup.py b/setup.py
index 1c02494..f6abc90 100644
--- a/setup.py
+++ b/setup.py
@@ -33,11 +33,6 @@ def get_module_info():
return result
-try:
- from distutils.command.build_py import build_py_2to3 as build_py
-except ImportError:
- from distutils.command.build_py import build_py
-
module_info = get_module_info()
setup(
@@ -50,7 +45,6 @@ setup(
url = module_info['url'],
packages = ['stem', 'stem.descriptor', 'stem.interpreter', 'stem.response', 'stem.util'],
provides = ['stem'],
- cmdclass = {'build_py': build_py},
keywords = 'tor onion controller',
scripts = ['tor-prompt'],
package_data = {'stem.interpreter': ['settings.cfg'], 'stem.util': ['ports.cfg']},
1
0

04 Jan '15
commit e8ce90be6b3aa0dcf2c7b960561ac185d49db3bb
Author: Damian Johnson <atagar(a)torproject.org>
Date: Sat Jan 3 18:07:41 2015 -0800
Removing run_tests.py's '--python3' argument
Now that we have a unified codebase running tests with python3 is as simple
as...
% python3 run_tests.py --all
No reason to keep our '--python3' argument, which did a 2to3 conversion.
---
docs/faq.rst | 8 -------
run_tests.py | 59 +++++++++++++++++---------------------------------
test/util.py | 68 ----------------------------------------------------------
3 files changed, 20 insertions(+), 115 deletions(-)
diff --git a/docs/faq.rst b/docs/faq.rst
index 2f5df4a..1c0dd70 100644
--- a/docs/faq.rst
+++ b/docs/faq.rst
@@ -503,14 +503,6 @@ error checking and `pep8 <http://pep8.readthedocs.org/en/latest/>`_ for style
checking. If you have them installed then they automatically take place as part
of all test runs.
-If you have **Python 3** installed then you can test our Python 3 compatibility
-with the following. *Note that need to still initially execute run_tests.py
-with a 2.x version of Python.*
-
-::
-
- ~/stem$ ./run_tests.py --all --python3
-
See ``run_tests.py --help`` for more usage information.
.. _how_do_i_build_the_site:
diff --git a/run_tests.py b/run_tests.py
index 2bf2744..dc846e7 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -48,8 +48,6 @@ from test.util import STEM_BASE, Target, Task
ARGS = {
'run_unit': False,
'run_integ': False,
- 'run_python3': False,
- 'run_python3_clean': False,
'specific_test': None,
'logging_runlevel': None,
'tor_path': 'tor',
@@ -59,12 +57,12 @@ ARGS = {
'print_help': False,
}
-OPT = "auit:l:vh"
-OPT_EXPANDED = ["all", "unit", "integ", "python3", "clean", "targets=", "test=", "log=", "tor=", "verbose", "help"]
+OPT = 'auit:l:vh'
+OPT_EXPANDED = ['all', 'unit', 'integ', 'targets=', 'test=', 'log=', 'tor=', 'verbose', 'help']
-CONFIG = stem.util.conf.config_dict("test", {
- "target.torrc": {},
- "integ.test_directory": "./test/data",
+CONFIG = stem.util.conf.config_dict('test', {
+ 'target.torrc': {},
+ 'integ.test_directory': './test/data',
})
SRC_PATHS = [os.path.join(STEM_BASE, path) for path in (
@@ -158,7 +156,7 @@ def main():
pyflakes_task, pep8_task = None, None
- if not stem.prereq.is_python_3() and not args.specific_test:
+ if not args.specific_test:
if stem.util.test_tools.is_pyflakes_available():
pyflakes_task = PYFLAKES_TASK
@@ -179,18 +177,6 @@ def main():
pep8_task,
)
- if args.run_python3 and sys.version_info[0] != 3:
- test.util.run_tasks(
- "EXPORTING TO PYTHON 3",
- Task("checking requirements", test.util.python3_prereq),
- Task("cleaning prior export", test.util.python3_clean, (not args.run_python3_clean,)),
- Task("exporting python 3 copy", test.util.python3_copy_stem),
- Task("running tests", test.util.python3_run_tests),
- )
-
- println("BUG: python3_run_tests() should have terminated our process", ERROR)
- sys.exit(1)
-
# buffer that we log messages into so they can be printed after a test has finished
logging_buffer = stem.util.log.LogBuffer(args.logging_runlevel)
@@ -296,24 +282,23 @@ def main():
println()
- if not stem.prereq.is_python_3():
- static_check_issues = {}
+ static_check_issues = {}
- if pyflakes_task and pyflakes_task.is_successful:
- for path, issues in pyflakes_task.result.items():
- for issue in issues:
- static_check_issues.setdefault(path, []).append(issue)
- elif not stem.util.test_tools.is_pyflakes_available():
- println("Static error checking requires pyflakes version 0.7.3 or later. Please install it from ...\n http://pypi.python.org/pypi/pyflakes\n", ERROR)
+ if pyflakes_task and pyflakes_task.is_successful:
+ for path, issues in pyflakes_task.result.items():
+ for issue in issues:
+ static_check_issues.setdefault(path, []).append(issue)
+ elif not stem.util.test_tools.is_pyflakes_available():
+ println("Static error checking requires pyflakes version 0.7.3 or later. Please install it from ...\n http://pypi.python.org/pypi/pyflakes\n", ERROR)
- if pep8_task and pep8_task.is_successful:
- for path, issues in pep8_task.result.items():
- for issue in issues:
- static_check_issues.setdefault(path, []).append(issue)
- elif not stem.util.test_tools.is_pep8_available():
- println("Style checks require pep8 version 1.4.2 or later. Please install it from...\n http://pypi.python.org/pypi/pep8\n", ERROR)
+ if pep8_task and pep8_task.is_successful:
+ for path, issues in pep8_task.result.items():
+ for issue in issues:
+ static_check_issues.setdefault(path, []).append(issue)
+ elif not stem.util.test_tools.is_pep8_available():
+ println("Style checks require pep8 version 1.4.2 or later. Please install it from...\n http://pypi.python.org/pypi/pep8\n", ERROR)
- _print_static_issues(static_check_issues)
+ _print_static_issues(static_check_issues)
runtime_label = "(%i seconds)" % (time.time() - start_time)
@@ -354,10 +339,6 @@ def _get_args(argv):
args['run_unit'] = True
elif opt in ("-i", "--integ"):
args['run_integ'] = True
- elif opt == "--python3":
- args['run_python3'] = True
- elif opt == "--clean":
- args['run_python3_clean'] = True
elif opt in ("-t", "--targets"):
run_targets, attribute_targets = [], []
diff --git a/test/util.py b/test/util.py
index 714d949..9ccb364 100644
--- a/test/util.py
+++ b/test/util.py
@@ -12,7 +12,6 @@ Helper functions for our test framework.
get_prereq - provides the tor version required to run the given target
get_torrc_entries - provides the torrc entries for a given target
get_help_message - provides usage information for running our tests
- get_python3_destination - location where a python3 copy of stem is exported to
Sets of :class:`~test.util.Task` instances can be ran with
:func:`~test.util.run_tasks`. Functions that are intended for easy use with
@@ -28,17 +27,10 @@ Tasks are...
|- check_pep8_version - checks our version of pep8
|- clean_orphaned_pyc - removes any *.pyc without a corresponding *.py
+- check_for_unused_tests - checks to see if any tests are missing from our settings
-
- Testing Python 3
- |- python3_prereq - checks that we have python3 and 2to3
- |- python3_clean - deletes our prior python3 export
- |- python3_copy_stem - copies our codebase and converts with 2to3
- +- python3_run_tests - runs python 3 tests
"""
import re
import os
-import shutil
import sys
import stem
@@ -200,17 +192,6 @@ def get_torrc_entries(target):
return torrc_opts
-def get_python3_destination():
- """
- Provides the location where a python 3 copy of stem is exported to for
- testing.
-
- :returns: **str** with the relative path to our python 3 location
- """
-
- return os.path.join(CONFIG['integ.test_directory'], 'python3')
-
-
def check_stem_version():
return stem.__version__
@@ -301,55 +282,6 @@ def check_for_unused_tests(paths):
raise ValueError('Test modules are missing from our test/settings.cfg:\n%s' % '\n'.join(unused_tests))
-def python3_prereq():
- for required_cmd in ('2to3', 'python3'):
- if not stem.util.system.is_available(required_cmd):
- raise ValueError("Unable to test python 3 because %s isn't in your path" % required_cmd)
-
-
-def python3_clean(skip = False):
- location = get_python3_destination()
-
- if not os.path.exists(location):
- return 'skipped'
- elif skip:
- return ["Reusing '%s'. Run again with '--clean' if you want a fresh copy." % location]
- else:
- shutil.rmtree(location, ignore_errors = True)
- return 'done'
-
-
-def python3_copy_stem():
- destination = get_python3_destination()
-
- if os.path.exists(destination):
- return 'skipped'
-
- # skips the python3 destination (to avoid an infinite loop)
- def _ignore(src, names):
- if src == os.path.normpath(destination):
- return names
- else:
- return []
-
- os.makedirs(destination)
- shutil.copytree('stem', os.path.join(destination, 'stem'))
- shutil.copytree('test', os.path.join(destination, 'test'), ignore = _ignore)
- shutil.copy('run_tests.py', os.path.join(destination, 'run_tests.py'))
- stem.util.system.call('2to3 --write --nobackups --no-diffs %s' % get_python3_destination())
-
- return 'done'
-
-
-def python3_run_tests():
- println()
- println()
-
- python3_runner = os.path.join(get_python3_destination(), 'run_tests.py')
- exit_status = os.system('python3 %s %s' % (python3_runner, ' '.join(sys.argv[1:])))
- sys.exit(exit_status)
-
-
def _is_test_data(path):
return os.path.normpath(CONFIG['integ.test_directory']) in path
1
0

04 Jan '15
commit 5312483bb175bbee821c302565b77b56371ba82b
Merge: 539b635 8b332ed
Author: Damian Johnson <atagar(a)torproject.org>
Date: Sat Jan 3 18:24:43 2015 -0800
Unified codebase for python2 and python3
Feature branch from Foxboron that allows our codebase to run directly under
both python2 and python3. With this we no longer need to run 2to3 to install
or test with python3...
https://trac.torproject.org/projects/tor/ticket/14075
This overhaul was done by doing a 2to3 conversion, then making changes so we
remain compatible with python 2.6 and 2.7. As such, it's a pretty long diff.
Tip for anyone else that wants to review this...
% git diff [commit range] --word-diff=color --word-diff-regex=.
Makes this much more manageable. ;)
docs/change_log.rst | 3 +
docs/conf.py | 10 +-
docs/faq.rst | 12 +-
docs/republish.py | 6 +-
run_tests.py | 67 ++--
setup.py | 6 -
stem/__init__.py | 9 +
stem/connection.py | 20 +-
stem/control.py | 61 ++--
stem/descriptor/__init__.py | 6 +-
stem/descriptor/export.py | 8 +-
stem/descriptor/extrainfo_descriptor.py | 10 +-
stem/descriptor/microdescriptor.py | 6 +-
stem/descriptor/networkstatus.py | 28 +-
stem/descriptor/reader.py | 22 +-
stem/descriptor/remote.py | 8 +-
stem/descriptor/router_status_entry.py | 10 +-
stem/descriptor/server_descriptor.py | 15 +-
stem/descriptor/tordnsel.py | 2 +-
stem/exit_policy.py | 17 +-
stem/interpreter/__init__.py | 24 +-
stem/interpreter/commands.py | 6 +-
stem/process.py | 2 +-
stem/response/__init__.py | 8 +-
stem/response/events.py | 19 +-
stem/util/conf.py | 4 +-
stem/util/connection.py | 11 +-
stem/util/enum.py | 4 +-
stem/util/log.py | 2 +-
stem/util/str_tools.py | 12 +-
stem/util/system.py | 16 +-
test/integ/connection/connect.py | 12 +-
test/integ/control/base_controller.py | 36 +-
test/integ/control/controller.py | 6 +-
test/integ/descriptor/server_descriptor.py | 8 +-
test/integ/process.py | 6 +-
test/integ/socket/control_message.py | 42 +--
test/integ/socket/control_socket.py | 4 +-
test/integ/util/conf.py | 20 +-
test/integ/util/proc.py | 6 +-
test/integ/util/system.py | 52 +--
test/integ/version.py | 2 +-
test/mocking.py | 4 +-
test/output.py | 4 +-
test/runner.py | 6 +-
test/unit/connection/connect.py | 17 +-
test/unit/descriptor/export.py | 15 +-
test/unit/descriptor/extrainfo_descriptor.py | 228 ++++++------
test/unit/descriptor/microdescriptor.py | 75 ++--
.../descriptor/networkstatus/bridge_document.py | 36 +-
.../networkstatus/directory_authority.py | 2 +-
test/unit/descriptor/networkstatus/document_v2.py | 118 +++---
test/unit/descriptor/networkstatus/document_v3.py | 374 ++++++++++----------
.../descriptor/networkstatus/key_certificate.py | 12 +-
test/unit/descriptor/reader.py | 63 ++--
test/unit/descriptor/router_status_entry.py | 30 +-
test/unit/descriptor/server_descriptor.py | 333 ++++++++---------
test/unit/descriptor/tordnsel.py | 2 +-
test/unit/exit_policy/policy.py | 34 +-
test/unit/exit_policy/rule.py | 52 +--
test/unit/response/authchallenge.py | 2 +-
test/unit/response/control_line.py | 78 ++--
test/unit/response/control_message.py | 52 +--
test/unit/response/events.py | 2 +-
test/unit/response/protocolinfo.py | 40 +--
test/unit/tutorial.py | 47 +--
test/unit/tutorial_examples.py | 81 +++--
test/unit/util/conf.py | 60 ++--
test/unit/util/connection.py | 26 +-
test/unit/util/enum.py | 20 +-
test/unit/util/proc.py | 31 +-
test/unit/util/str_tools.py | 80 ++---
test/unit/util/system.py | 96 ++---
test/unit/version.py | 4 +-
test/util.py | 68 ----
75 files changed, 1351 insertions(+), 1369 deletions(-)
1
0
commit 9e0b460fc45f57f5c689cf3c8edbc68f92c18f9b
Author: Foxboron <mcfoxax(a)gmail.com>
Date: Tue Dec 23 13:57:50 2014 +0100
Unified the python2 and 3 codebase
No longer needed to run a tool like 2to3.
Added a file called _compat.py who is used to keep
track of changes depending on versions.
alias `unicode` to `str` on Py3
alias `long` to `int` on Py3
---
docs/conf.py | 10 +-
docs/republish.py | 6 +-
run_tests.py | 14 +-
stem/__init__.py | 2 +-
stem/_compat.py | 16 +
stem/connection.py | 20 +-
stem/control.py | 68 ++--
stem/descriptor/__init__.py | 1 +
stem/descriptor/export.py | 8 +-
stem/descriptor/extrainfo_descriptor.py | 10 +-
stem/descriptor/microdescriptor.py | 6 +-
stem/descriptor/networkstatus.py | 38 +--
stem/descriptor/reader.py | 19 +-
stem/descriptor/remote.py | 16 +-
stem/descriptor/router_status_entry.py | 10 +-
stem/descriptor/server_descriptor.py | 12 +-
stem/descriptor/tordnsel.py | 2 +-
stem/exit_policy.py | 11 +-
stem/interpreter/__init__.py | 18 +-
stem/interpreter/arguments.py | 2 +-
stem/interpreter/autocomplete.py | 2 +-
stem/interpreter/commands.py | 6 +-
stem/interpreter/help.py | 2 +-
stem/process.py | 2 +-
stem/response/__init__.py | 10 +-
stem/response/events.py | 3 +-
stem/socket.py | 1 +
stem/util/conf.py | 6 +-
stem/util/connection.py | 11 +-
stem/util/enum.py | 4 +-
stem/util/log.py | 2 +-
stem/util/ordereddict.py | 8 +-
stem/util/str_tools.py | 3 +-
stem/util/system.py | 15 +-
stem/util/test_tools.py | 2 +-
test/integ/connection/connect.py | 12 +-
test/integ/control/base_controller.py | 36 +-
test/integ/control/controller.py | 8 +-
test/integ/descriptor/remote.py | 2 +-
test/integ/descriptor/server_descriptor.py | 8 +-
test/integ/process.py | 6 +-
test/integ/socket/control_message.py | 42 +--
test/integ/socket/control_socket.py | 4 +-
test/integ/util/conf.py | 20 +-
test/integ/util/proc.py | 6 +-
test/integ/util/system.py | 52 +--
test/integ/version.py | 2 +-
test/mocking.py | 8 +-
test/output.py | 4 +-
test/runner.py | 6 +-
test/unit/connection/connect.py | 12 +-
test/unit/control/controller.py | 2 +-
test/unit/descriptor/export.py | 15 +-
test/unit/descriptor/extrainfo_descriptor.py | 228 ++++++-------
test/unit/descriptor/microdescriptor.py | 74 ++--
.../descriptor/networkstatus/bridge_document.py | 38 +--
.../networkstatus/directory_authority.py | 2 +-
test/unit/descriptor/networkstatus/document_v2.py | 118 +++----
test/unit/descriptor/networkstatus/document_v3.py | 360 ++++++++++----------
.../descriptor/networkstatus/key_certificate.py | 12 +-
test/unit/descriptor/reader.py | 50 +--
test/unit/descriptor/router_status_entry.py | 46 +--
test/unit/descriptor/server_descriptor.py | 326 +++++++++---------
test/unit/descriptor/tordnsel.py | 2 +-
test/unit/exit_policy/policy.py | 44 +--
test/unit/exit_policy/rule.py | 78 ++---
test/unit/response/authchallenge.py | 2 +-
test/unit/response/control_line.py | 78 ++---
test/unit/response/control_message.py | 52 +--
test/unit/response/events.py | 2 +-
test/unit/response/protocolinfo.py | 40 +--
test/unit/tutorial.py | 45 +--
test/unit/tutorial_examples.py | 86 ++---
test/unit/util/conf.py | 60 ++--
test/unit/util/connection.py | 30 +-
test/unit/util/enum.py | 20 +-
test/unit/util/proc.py | 28 +-
test/unit/util/str_tools.py | 82 ++---
test/unit/util/system.py | 92 ++---
test/unit/version.py | 4 +-
test/util.py | 4 +-
81 files changed, 1341 insertions(+), 1273 deletions(-)
diff --git a/docs/conf.py b/docs/conf.py
index e778923..a12bfcf 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -51,8 +51,8 @@ if __version__.endswith('-dev'):
__version__ = __version__[:-4]
# General information about the project.
-project = u'Stem'
-copyright = u'2012, %s' % __author__
+project = 'Stem'
+copyright = '2012, %s' % __author__
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
@@ -192,8 +192,8 @@ htmlhelp_basename = 'Stemdoc'
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass [howto/manual]).
latex_documents = [
- ('index', 'Stem.tex', u'Stem Documentation',
- u'Damian Johnson', 'manual'),
+ ('index', 'Stem.tex', 'Stem Documentation',
+ 'Damian Johnson', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
@@ -225,7 +225,7 @@ latex_documents = [
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
- ('index', 'stem', u'Stem Documentation',
+ ('index', 'stem', 'Stem Documentation',
['%s (%s)' % (__author__, __contact__)], 1)
]
diff --git a/docs/republish.py b/docs/republish.py
index ccb6234..8e168b6 100644
--- a/docs/republish.py
+++ b/docs/republish.py
@@ -56,7 +56,7 @@ if __name__ == '__main__':
try:
opts = getopt.getopt(sys.argv[1:], OPT, OPT_EXPANDED)[0]
except getopt.GetoptError as exc:
- print "%s (for usage provide --help)" % exc
+ print("%s (for usage provide --help)" % exc)
sys.exit(1)
repeat_rate = None
@@ -66,10 +66,10 @@ if __name__ == '__main__':
if arg.isdigit():
repeat_rate = int(arg)
else:
- print "The --repeat argument must be an integer, got '%s'" % arg
+ print("The --repeat argument must be an integer, got '%s'" % arg)
sys.exit(1)
elif opt in ("-h", "--help"):
- print HELP_MSG
+ print(HELP_MSG)
sys.exit()
if repeat_rate:
diff --git a/run_tests.py b/run_tests.py
index 2a541cf..c881f66 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -9,12 +9,16 @@ Runs unit and integration tests. For usage information run this with '--help'.
import collections
import getopt
import os
-import StringIO
import sys
import threading
import time
import unittest
+try:
+ from StringIO import StringIO
+except ImportError:
+ from io import StringIO
+
import stem.prereq
import stem.util.conf
import stem.util.enum
@@ -296,14 +300,14 @@ def main():
static_check_issues = {}
if pyflakes_task and pyflakes_task.is_successful:
- for path, issues in pyflakes_task.result.items():
+ for path, issues in list(pyflakes_task.result.items()):
for issue in issues:
static_check_issues.setdefault(path, []).append(issue)
elif not stem.util.test_tools.is_pyflakes_available():
println("Static error checking requires pyflakes version 0.7.3 or later. Please install it from ...\n http://pypi.python.org/pypi/pyflakes\n", ERROR)
if pep8_task and pep8_task.is_successful:
- for path, issues in pep8_task.result.items():
+ for path, issues in list(pep8_task.result.items()):
for issue in issues:
static_check_issues.setdefault(path, []).append(issue)
elif not stem.util.test_tools.is_pep8_available():
@@ -399,7 +403,7 @@ def _get_args(argv):
# translates our args dict into a named tuple
- Args = collections.namedtuple('Args', args.keys())
+ Args = collections.namedtuple('Args', list(args.keys()))
return Args(**args)
@@ -446,7 +450,7 @@ def _run_test(args, test_class, output_filters, logging_buffer):
suite = unittest.TestLoader().loadTestsFromTestCase(test_class)
- test_results = StringIO.StringIO()
+ test_results = StringIO()
run_result = unittest.TextTestRunner(test_results, verbosity=2).run(suite)
if args.verbose:
diff --git a/stem/__init__.py b/stem/__init__.py
index baa2ef8..3ac4565 100644
--- a/stem/__init__.py
+++ b/stem/__init__.py
@@ -712,7 +712,7 @@ StreamStatus = stem.util.enum.UppercaseEnum(
)
# StreamClosureReason is a superset of RelayEndReason
-StreamClosureReason = stem.util.enum.UppercaseEnum(*(RelayEndReason.keys() + [
+StreamClosureReason = stem.util.enum.UppercaseEnum(*(list(RelayEndReason.keys()) + [
'END',
'PRIVATE_ADDR',
]))
diff --git a/stem/_compat.py b/stem/_compat.py
new file mode 100644
index 0000000..0fb3bfc
--- /dev/null
+++ b/stem/_compat.py
@@ -0,0 +1,16 @@
+import sys
+
+PY27 = sys.version_info >= (2, 7)
+PY3 = sys.version_info[0] >= 3
+PY33 = sys.version_info >= (3, 3)
+PY34 = sys.version_info >= (3, 4)
+
+if PY3:
+ unicode = str
+else:
+ unicode = unicode # NOQA
+
+if PY3:
+ long = int
+else:
+ long = long # NOQA
diff --git a/stem/connection.py b/stem/connection.py
index a38422b..609f683 100644
--- a/stem/connection.py
+++ b/stem/connection.py
@@ -271,7 +271,7 @@ def connect(control_port = ('127.0.0.1', 9051), control_socket = '/var/run/tor/c
is_tor_running = stem.util.system.is_running('tor') or stem.util.system.is_running('tor.real')
error_msg = CONNECT_MESSAGES['no_control_port'] if is_tor_running else CONNECT_MESSAGES['tor_isnt_running']
- print error_msg
+ print(error_msg)
return None
return _connect_auth(control_connection, password, password_prompt, chroot_path, controller)
@@ -300,7 +300,7 @@ def connect_port(address = '127.0.0.1', port = 9051, password = None, chroot_pat
try:
control_port = stem.socket.ControlPort(address, port)
except stem.SocketError as exc:
- print exc
+ print(exc)
return None
return _connect_auth(control_port, password, True, chroot_path, controller)
@@ -330,7 +330,7 @@ def connect_socket_file(path = '/var/run/tor/control', password = None, chroot_p
try:
control_socket = stem.socket.ControlSocketFile(path)
except stem.SocketError as exc:
- print exc
+ print(exc)
return None
return _connect_auth(control_socket, password, True, chroot_path, controller)
@@ -361,18 +361,18 @@ def _connect_auth(control_socket, password, password_prompt, chroot_path, contro
return controller(control_socket, is_authenticated = True)
except IncorrectSocketType:
if isinstance(control_socket, stem.socket.ControlPort):
- print CONNECT_MESSAGES['wrong_port_type'].format(port = control_socket.get_port())
+ print(CONNECT_MESSAGES['wrong_port_type'].format(port = control_socket.get_port()))
else:
- print CONNECT_MESSAGES['wrong_socket_type']
+ print(CONNECT_MESSAGES['wrong_socket_type'])
control_socket.close()
return None
except UnrecognizedAuthMethods as exc:
- print CONNECT_MESSAGES['uncrcognized_auth_type'].format(auth_methods = ', '.join(exc.unknown_auth_methods))
+ print(CONNECT_MESSAGES['uncrcognized_auth_type'].format(auth_methods = ', '.join(exc.unknown_auth_methods)))
control_socket.close()
return None
except IncorrectPassword:
- print CONNECT_MESSAGES['incorrect_password']
+ print(CONNECT_MESSAGES['incorrect_password'])
control_socket.close()
return None
except MissingPassword:
@@ -389,15 +389,15 @@ def _connect_auth(control_socket, password, password_prompt, chroot_path, contro
return _connect_auth(control_socket, password, password_prompt, chroot_path, controller)
else:
- print CONNECT_MESSAGES['needs_password']
+ print(CONNECT_MESSAGES['needs_password'])
control_socket.close()
return None
except UnreadableCookieFile as exc:
- print CONNECT_MESSAGES['unreadable_cookie_file'].format(path = exc.cookie_path, issue = str(exc))
+ print(CONNECT_MESSAGES['unreadable_cookie_file'].format(path = exc.cookie_path, issue = str(exc)))
control_socket.close()
return None
except AuthenticationFailure as exc:
- print CONNECT_MESSAGES['general_auth_failure'].format(error = exc)
+ print(CONNECT_MESSAGES['general_auth_failure'].format(error = exc))
control_socket.close()
return None
diff --git a/stem/control.py b/stem/control.py
index 4d45b8d..8986c21 100644
--- a/stem/control.py
+++ b/stem/control.py
@@ -225,8 +225,6 @@ import functools
import inspect
import io
import os
-import Queue
-import StringIO
import threading
import time
@@ -236,6 +234,13 @@ try:
except ImportError:
from stem.util.ordereddict import OrderedDict
+try:
+ import queue
+ from io import StringIO
+except ImportError:
+ import Queue as queue
+ from StringIO import StringIO
+
import stem.descriptor.microdescriptor
import stem.descriptor.reader
import stem.descriptor.router_status_entry
@@ -253,6 +258,7 @@ import stem.version
from stem import UNDEFINED, CircStatus, Signal
from stem.util import log
+from stem._compat import unicode
# state changes a control socket can have
@@ -437,8 +443,8 @@ class BaseController(object):
self._status_listeners_lock = threading.RLock()
# queues where incoming messages are directed
- self._reply_queue = Queue.Queue()
- self._event_queue = Queue.Queue()
+ self._reply_queue = queue.Queue()
+ self._event_queue = queue.Queue()
# thread to continually pull from the control socket
self._reader_thread = None
@@ -522,7 +528,7 @@ class BaseController(object):
log.info('Socket experienced a problem (%s)' % response)
elif isinstance(response, stem.response.ControlMessage):
log.info('Failed to deliver a response: %s' % response)
- except Queue.Empty:
+ except queue.Empty:
# the empty() method is documented to not be fully reliable so this
# isn't entirely surprising
@@ -840,7 +846,7 @@ class BaseController(object):
try:
event_message = self._event_queue.get_nowait()
self._handle_event(event_message)
- except Queue.Empty:
+ except queue.Empty:
if not self.is_alive():
break
@@ -920,7 +926,7 @@ class Controller(BaseController):
if self.is_caching_enabled():
self._set_cache(dict((k, None) for k in event.config), 'getconf')
- if 'exitpolicy' in event.config.keys():
+ if 'exitpolicy' in list(event.config.keys()):
self._set_cache({'exitpolicy': None})
self.add_event_listener(_confchanged_listener, EventType.CONF_CHANGED)
@@ -1014,12 +1020,12 @@ class Controller(BaseController):
# if everything was cached then short circuit making the query
if not params:
- log.trace('GETINFO %s (cache fetch)' % ' '.join(reply.keys()))
+ log.trace('GETINFO %s (cache fetch)' % ' '.join(list(reply.keys())))
if is_multiple:
return reply
else:
- return reply.values()[0]
+ return list(reply.values())[0]
try:
response = self.msg('GETINFO %s' % ' '.join(params))
@@ -1029,14 +1035,14 @@ class Controller(BaseController):
# usually we want unicode values under python 3.x
if stem.prereq.is_python_3() and not get_bytes:
- response.entries = dict((k, stem.util.str_tools._to_unicode(v)) for (k, v) in response.entries.items())
+ response.entries = dict((k, stem.util.str_tools._to_unicode(v)) for (k, v) in list(response.entries.items()))
reply.update(response.entries)
if self.is_caching_enabled():
to_cache = {}
- for key, value in response.entries.items():
+ for key, value in list(response.entries.items()):
key = key.lower() # make case insensitive
if key in CACHEABLE_GETINFO_PARAMS:
@@ -1053,7 +1059,7 @@ class Controller(BaseController):
if is_multiple:
return reply
else:
- return reply.values()[0]
+ return list(reply.values())[0]
except stem.ControllerError as exc:
# bump geoip failure count if...
# * we're caching results
@@ -1885,7 +1891,7 @@ class Controller(BaseController):
params = [params]
# remove strings which contain only whitespace
- params = filter(lambda entry: entry.strip(), params)
+ params = [entry for entry in params if entry.strip()]
if params == []:
return {}
@@ -1905,7 +1911,7 @@ class Controller(BaseController):
# if everything was cached then short circuit making the query
if not lookup_params:
- log.trace('GETCONF %s (cache fetch)' % ' '.join(reply.keys()))
+ log.trace('GETCONF %s (cache fetch)' % ' '.join(list(reply.keys())))
return self._get_conf_dict_to_response(reply, default, multiple)
try:
@@ -1914,7 +1920,7 @@ class Controller(BaseController):
reply.update(response.entries)
if self.is_caching_enabled():
- to_cache = dict((k.lower(), v) for k, v in response.entries.items())
+ to_cache = dict((k.lower(), v) for k, v in list(response.entries.items()))
for key in UNCACHEABLE_GETCONF_PARAMS:
if key in to_cache:
@@ -1933,7 +1939,7 @@ class Controller(BaseController):
# be sure what they wanted.
for key in reply:
- if not key.lower() in MAPPED_CONFIG_KEYS.values():
+ if not key.lower() in list(MAPPED_CONFIG_KEYS.values()):
user_expected_key = _case_insensitive_lookup(params, key, key)
if key != user_expected_key:
@@ -1959,7 +1965,7 @@ class Controller(BaseController):
return_dict = {}
- for key, values in config_dict.items():
+ for key, values in list(config_dict.items()):
if values == []:
# config option was unset
if default != UNDEFINED:
@@ -2048,7 +2054,7 @@ class Controller(BaseController):
query_comp = ['RESETCONF' if reset else 'SETCONF']
if isinstance(params, dict):
- params = params.items()
+ params = list(params.items())
for param, value in params:
if isinstance(value, str):
@@ -2228,7 +2234,7 @@ class Controller(BaseController):
for directory in conf:
hidden_service_options.append(('HiddenServiceDir', directory))
- for k, v in conf[directory].items():
+ for k, v in list(conf[directory].items()):
if k == 'HiddenServicePort':
for entry in v:
if isinstance(entry, int):
@@ -2432,7 +2438,7 @@ class Controller(BaseController):
with self._event_listeners_lock:
event_types_changed = False
- for event_type, event_listeners in self._event_listeners.items():
+ for event_type, event_listeners in list(self._event_listeners.items()):
if listener in event_listeners:
event_listeners.remove(listener)
@@ -2441,7 +2447,7 @@ class Controller(BaseController):
del self._event_listeners[event_type]
if event_types_changed:
- response = self.msg('SETEVENTS %s' % ' '.join(self._event_listeners.keys()))
+ response = self.msg('SETEVENTS %s' % ' '.join(list(self._event_listeners.keys())))
if not response.is_ok():
raise stem.ProtocolError('SETEVENTS received unexpected response\n%s' % response)
@@ -2496,7 +2502,7 @@ class Controller(BaseController):
if not self.is_caching_enabled():
return
- for key, value in params.items():
+ for key, value in list(params.items()):
if namespace:
cache_key = '%s.%s' % (namespace, key)
else:
@@ -2691,7 +2697,7 @@ class Controller(BaseController):
response = self.get_info('circuit-status')
for circ in response.splitlines():
- circ_message = stem.socket.recv_message(StringIO.StringIO('650 CIRC ' + circ + '\r\n'))
+ circ_message = stem.socket.recv_message(StringIO('650 CIRC ' + circ + '\r\n'))
stem.response.convert('EVENT', circ_message, arrived_at = 0)
circuits.append(circ_message)
@@ -2755,7 +2761,7 @@ class Controller(BaseController):
circ_queue, circ_listener = None, None
if await_build:
- circ_queue = Queue.Queue()
+ circ_queue = queue.Queue()
def circ_listener(event):
circ_queue.put(event)
@@ -2876,7 +2882,7 @@ class Controller(BaseController):
response = self.get_info('stream-status')
for stream in response.splitlines():
- message = stem.socket.recv_message(StringIO.StringIO('650 STREAM ' + stream + '\r\n'))
+ message = stem.socket.recv_message(StringIO('650 STREAM ' + stream + '\r\n'))
stem.response.convert('EVENT', message, arrived_at = 0)
streams.append(message)
@@ -3070,7 +3076,7 @@ class Controller(BaseController):
:returns: **dict** with 'original -> replacement' address mappings
"""
- mapaddress_arg = ' '.join(['%s=%s' % (k, v) for (k, v) in mapping.items()])
+ mapaddress_arg = ' '.join(['%s=%s' % (k, v) for (k, v) in list(mapping.items())])
response = self.msg('MAPADDRESS %s' % mapaddress_arg)
stem.response.convert('MAPADDRESS', response)
@@ -3132,7 +3138,7 @@ class Controller(BaseController):
stem.response.convert('EVENT', event_message, arrived_at = time.time())
with self._event_listeners_lock:
- for event_type, event_listeners in self._event_listeners.items():
+ for event_type, event_listeners in list(self._event_listeners.items()):
if event_type == event_message.type:
for listener in event_listeners:
listener(event_message)
@@ -3152,10 +3158,10 @@ class Controller(BaseController):
with self._event_listeners_lock:
if self.is_authenticated():
# try to set them all
- response = self.msg('SETEVENTS %s' % ' '.join(self._event_listeners.keys()))
+ response = self.msg('SETEVENTS %s' % ' '.join(list(self._event_listeners.keys())))
if response.is_ok():
- set_events = self._event_listeners.keys()
+ set_events = list(self._event_listeners.keys())
else:
# One of the following likely happened...
#
@@ -3170,7 +3176,7 @@ class Controller(BaseController):
#
# See if we can set some subset of our events.
- for event in self._event_listeners.keys():
+ for event in list(self._event_listeners.keys()):
response = self.msg('SETEVENTS %s' % ' '.join(set_events + [event]))
if response.is_ok():
@@ -3278,7 +3284,7 @@ def _case_insensitive_lookup(entries, key, default = UNDEFINED):
if entries is not None:
if isinstance(entries, dict):
- for k, v in entries.items():
+ for k, v in list(entries.items()):
if k.lower() == key.lower():
return v
else:
diff --git a/stem/descriptor/__init__.py b/stem/descriptor/__init__.py
index 1527338..25a880e 100644
--- a/stem/descriptor/__init__.py
+++ b/stem/descriptor/__init__.py
@@ -58,6 +58,7 @@ import stem.prereq
import stem.util.enum
import stem.util.str_tools
import stem.util.system
+from stem._compat import unicode
try:
# added in python 2.7
diff --git a/stem/descriptor/export.py b/stem/descriptor/export.py
index fce6eb0..07ef467 100644
--- a/stem/descriptor/export.py
+++ b/stem/descriptor/export.py
@@ -12,9 +12,13 @@ Toolkit for exporting descriptors to other formats.
export_csv_file - Writes exported CSV output to a file
"""
-import cStringIO
import csv
+try:
+ from cStringIO import StringIO
+except ImportError:
+ from io import StringIO
+
import stem.descriptor
import stem.prereq
@@ -41,7 +45,7 @@ def export_csv(descriptors, included_fields = (), excluded_fields = (), header =
:raises: **ValueError** if descriptors contain more than one descriptor type
"""
- output_buffer = cStringIO.StringIO()
+ output_buffer = StringIO()
export_csv_file(output_buffer, descriptors, included_fields, excluded_fields, header)
return output_buffer.getvalue()
diff --git a/stem/descriptor/extrainfo_descriptor.py b/stem/descriptor/extrainfo_descriptor.py
index b260888..d6e6102 100644
--- a/stem/descriptor/extrainfo_descriptor.py
+++ b/stem/descriptor/extrainfo_descriptor.py
@@ -437,11 +437,11 @@ class ExtraInfoDescriptor(Descriptor):
raise ValueError("The '%s' entry can only appear once in an extra-info descriptor" % keyword)
expected_first_keyword = self._first_keyword()
- if expected_first_keyword and expected_first_keyword != entries.keys()[0]:
+ if expected_first_keyword and expected_first_keyword != list(entries.keys())[0]:
raise ValueError("Extra-info descriptor must start with a '%s' entry" % expected_first_keyword)
expected_last_keyword = self._last_keyword()
- if expected_last_keyword and expected_last_keyword != entries.keys()[-1]:
+ if expected_last_keyword and expected_last_keyword != list(entries.keys())[-1]:
raise ValueError("Descriptor must end with a '%s' entry" % expected_last_keyword)
self._parse(entries, validate)
@@ -460,7 +460,7 @@ class ExtraInfoDescriptor(Descriptor):
:raises: **ValueError** if an error occurs in validation
"""
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
# most just work with the first (and only) value
value, _, _ = values[0]
line = '%s %s' % (keyword, value) # original line
@@ -884,7 +884,7 @@ class RelayExtraInfoDescriptor(ExtraInfoDescriptor):
entries = dict(entries) # shallow copy since we're destructive
# handles fields only in server descriptors
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
value, block_type, block_contents = values[0]
line = '%s %s' % (keyword, value) # original line
@@ -920,7 +920,7 @@ class BridgeExtraInfoDescriptor(ExtraInfoDescriptor):
entries = dict(entries) # shallow copy since we're destructive
# handles fields only in server descriptors
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
value, _, _ = values[0]
line = '%s %s' % (keyword, value) # original line
diff --git a/stem/descriptor/microdescriptor.py b/stem/descriptor/microdescriptor.py
index 4702b84..e5d690f 100644
--- a/stem/descriptor/microdescriptor.py
+++ b/stem/descriptor/microdescriptor.py
@@ -142,7 +142,7 @@ def _parse_file(descriptor_file, validate = True, **kwargs):
descriptor_lines = descriptor_lines[1:]
# strip newlines from annotations
- annotations = map(bytes.strip, annotations)
+ annotations = list(map(bytes.strip, annotations))
descriptor_text = bytes.join(b'', descriptor_lines)
@@ -248,7 +248,7 @@ class Microdescriptor(Descriptor):
:raises: **ValueError** if an error occurs in validation
"""
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
# most just work with the first (and only) value
value, block_type, block_contents = values[0]
@@ -302,7 +302,7 @@ class Microdescriptor(Descriptor):
if keyword in entries and len(entries[keyword]) > 1:
raise ValueError("The '%s' entry can only appear once in a microdescriptor" % keyword)
- if "onion-key" != entries.keys()[0]:
+ if "onion-key" != list(entries.keys())[0]:
raise ValueError("Microdescriptor must start with a 'onion-key' entry")
def _name(self, is_plural = False):
diff --git a/stem/descriptor/networkstatus.py b/stem/descriptor/networkstatus.py
index 6a15caf..65bf5cc 100644
--- a/stem/descriptor/networkstatus.py
+++ b/stem/descriptor/networkstatus.py
@@ -351,7 +351,7 @@ class NetworkStatusDocumentV2(NetworkStatusDocument):
self._parse(entries, validate)
def _parse(self, entries, validate):
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
value, block_type, block_contents = values[0]
line = '%s %s' % (keyword, value) # original line
@@ -450,7 +450,7 @@ class NetworkStatusDocumentV2(NetworkStatusDocument):
if keyword in entries and len(entries[keyword]) > 1:
raise ValueError("Network status document (v2) can only have a single '%s' line, got %i:\n%s" % (keyword, len(entries[keyword]), str(self)))
- if 'network-status-version' != entries.keys()[0]:
+ if 'network-status-version' != list(entries.keys())[0]:
raise ValueError("Network status document (v2) are expected to start with a 'network-status-version' line:\n%s" % str(self))
@@ -516,7 +516,7 @@ class NetworkStatusDocumentV3(NetworkStatusDocument):
self._header = _DocumentHeader(document_file, validate, default_params)
# merge header attributes into us
- for attr, value in vars(self._header).items():
+ for attr, value in list(vars(self._header).items()):
if attr != '_unrecognized_lines':
setattr(self, attr, value)
else:
@@ -553,7 +553,7 @@ class NetworkStatusDocumentV3(NetworkStatusDocument):
self._footer = _DocumentFooter(document_file, validate, self._header)
# merge header attributes into us
- for attr, value in vars(self._footer).items():
+ for attr, value in list(vars(self._footer).items()):
if attr != '_unrecognized_lines':
setattr(self, attr, value)
else:
@@ -630,12 +630,12 @@ class _DocumentHeader(object):
if self.consensus_method is not None:
return self.consensus_method >= method
elif self.consensus_methods is not None:
- return bool(filter(lambda x: x >= method, self.consensus_methods))
+ return bool([x for x in self.consensus_methods if x >= method])
else:
return False # malformed document
def _parse(self, entries, validate):
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
value, _, _ = values[0]
line = '%s %s' % (keyword, value)
@@ -795,7 +795,7 @@ class _DocumentHeader(object):
Checks that the params we know about are within their documented ranges.
"""
- for key, value in self.params.items():
+ for key, value in list(self.params.items()):
# all parameters are constrained to int32 range
minimum, maximum = -2147483648, 2147483647
@@ -874,17 +874,17 @@ class _DocumentFooter(object):
# 'directory-footer'.
if header.meets_consensus_method(9):
- if entries.keys()[0] != 'directory-footer':
+ if list(entries.keys())[0] != 'directory-footer':
raise ValueError("Network status document's footer should start with a 'directory-footer' line in consensus-method 9 or later")
else:
- if entries.keys()[0] != 'directory-signature':
+ if list(entries.keys())[0] != 'directory-signature':
raise ValueError("Network status document's footer should start with a 'directory-signature' line prior to consensus-method 9")
_check_for_missing_and_disallowed_fields(header, entries, FOOTER_STATUS_DOCUMENT_FIELDS)
_check_for_misordered_fields(entries, FOOTER_FIELDS)
def _parse(self, entries, validate, header):
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
value, block_type, block_contents = values[0]
line = '%s %s' % (keyword, value)
@@ -941,11 +941,11 @@ def _check_for_missing_and_disallowed_fields(header, entries, fields):
for field, in_votes, in_consensus, mandatory in fields:
if mandatory and ((header.is_consensus and in_consensus) or (header.is_vote and in_votes)):
# mandatory field, check that we have it
- if field not in entries.keys():
+ if field not in list(entries.keys()):
missing_fields.append(field)
elif (header.is_consensus and not in_consensus) or (header.is_vote and not in_votes):
# field we shouldn't have, check that we don't
- if field in entries.keys():
+ if field in list(entries.keys()):
disallowed_fields.append(field)
if missing_fields:
@@ -972,12 +972,12 @@ def _check_for_misordered_fields(entries, expected):
# document type or are unknown. Remove the unknown fields since they
# reflect a spec change and can appear anywhere in the document.
- actual = filter(lambda field: field in expected, entries.keys())
+ actual = [field for field in list(entries.keys()) if field in expected]
# Narrow the expected to just what we have. If the lists then match then the
# order's valid.
- expected = filter(lambda field: field in actual, expected)
+ expected = [field for field in expected if field in actual]
if actual != expected:
actual_label = ', '.join(actual)
@@ -1112,7 +1112,7 @@ class DirectoryAuthority(Descriptor):
entries = _get_descriptor_components(content, validate)
- if validate and 'dir-source' != entries.keys()[0]:
+ if validate and 'dir-source' != list(entries.keys())[0]:
raise ValueError("Authority entries are expected to start with a 'dir-source' line:\n%s" % (content))
# check that we have mandatory fields
@@ -1151,7 +1151,7 @@ class DirectoryAuthority(Descriptor):
type_label = 'votes' if is_vote else 'consensus entries'
raise ValueError("Authority %s shouldn't have a '%s' line:\n%s" % (type_label, keyword, content))
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
value, _, _ = values[0]
line = '%s %s' % (keyword, value)
@@ -1295,9 +1295,9 @@ class KeyCertificate(Descriptor):
entries = _get_descriptor_components(content, validate)
if validate:
- if 'dir-key-certificate-version' != entries.keys()[0]:
+ if 'dir-key-certificate-version' != list(entries.keys())[0]:
raise ValueError("Key certificates must start with a 'dir-key-certificate-version' line:\n%s" % (content))
- elif 'dir-key-certification' != entries.keys()[-1]:
+ elif 'dir-key-certification' != list(entries.keys())[-1]:
raise ValueError("Key certificates must end with a 'dir-key-certification' line:\n%s" % (content))
# check that we have mandatory fields and that our known fields only
@@ -1311,7 +1311,7 @@ class KeyCertificate(Descriptor):
if entry_count > 1:
raise ValueError("Key certificates can only have a single '%s' line, got %i:\n%s" % (keyword, entry_count, content))
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
value, block_type, block_contents = values[0]
line = '%s %s' % (keyword, value)
diff --git a/stem/descriptor/reader.py b/stem/descriptor/reader.py
index 1eecbee..bbd6c6c 100644
--- a/stem/descriptor/reader.py
+++ b/stem/descriptor/reader.py
@@ -79,13 +79,18 @@ and picks up where it left off if run again...
import mimetypes
import os
-import Queue
import tarfile
import threading
+try:
+ import queue
+except ImportError:
+ import Queue as queue
+
import stem.descriptor
import stem.prereq
import stem.util.system
+from stem._compat import unicode
# flag to indicate when the reader thread is out of descriptor files to read
FINISHED = 'DONE'
@@ -221,7 +226,7 @@ def save_processed_files(path, processed_files):
raise IOError(exc)
with open(path, 'w') as output_file:
- for path, timestamp in processed_files.items():
+ for path, timestamp in list(processed_files.items()):
if not os.path.isabs(path):
raise TypeError('Only absolute paths are acceptable: %s' % path)
@@ -265,7 +270,7 @@ class DescriptorReader(object):
# expand any relative paths we got
- target = map(os.path.abspath, target)
+ target = list(map(os.path.abspath, target))
self._validate = validate
self._follow_links = follow_links
@@ -288,7 +293,7 @@ class DescriptorReader(object):
# Descriptors that we have read but not yet provided to the caller. A
# FINISHED entry is used by the reading thread to indicate the end.
- self._unreturned_descriptors = Queue.Queue(buffer_size)
+ self._unreturned_descriptors = queue.Queue(buffer_size)
if self._persistence_path:
try:
@@ -316,7 +321,7 @@ class DescriptorReader(object):
"""
# make sure that we only provide back absolute paths
- return dict((os.path.abspath(k), v) for (k, v) in self._processed_files.items())
+ return dict((os.path.abspath(k), v) for (k, v) in list(self._processed_files.items()))
def set_processed_files(self, processed_files):
"""
@@ -400,7 +405,7 @@ class DescriptorReader(object):
try:
while True:
self._unreturned_descriptors.get_nowait()
- except Queue.Empty:
+ except queue.Empty:
pass
self._reader_thread.join()
@@ -447,7 +452,7 @@ class DescriptorReader(object):
break
else:
yield descriptor
- except Queue.Empty:
+ except queue.Empty:
self._iter_notice.wait()
self._iter_notice.clear()
diff --git a/stem/descriptor/remote.py b/stem/descriptor/remote.py
index d70c059..fa0a672 100644
--- a/stem/descriptor/remote.py
+++ b/stem/descriptor/remote.py
@@ -77,9 +77,13 @@ import random
import sys
import threading
import time
-import urllib2
import zlib
+try:
+ import urllib.request as urllib
+except ImportError:
+ import urllib2 as urllib
+
import stem.descriptor
from stem import Flag
@@ -340,7 +344,7 @@ class Query(object):
"""
if use_authority or not self.endpoints:
- authority = random.choice(filter(HAS_V3IDENT, get_authorities().values()))
+ authority = random.choice(list(filter(HAS_V3IDENT, list(get_authorities().values()))))
address, dirport = authority.address, authority.dir_port
else:
address, dirport = random.choice(self.endpoints)
@@ -353,7 +357,7 @@ class Query(object):
self.download_url = self._pick_url(use_authority)
self.start_time = time.time()
- response = urllib2.urlopen(self.download_url, timeout = self.timeout).read()
+ response = urllib.urlopen(self.download_url, timeout = self.timeout).read()
if self.download_url.endswith('.z'):
response = zlib.decompress(response)
@@ -390,7 +394,7 @@ class DescriptorDownloader(object):
def __init__(self, use_mirrors = False, **default_args):
self._default_args = default_args
- authorities = filter(HAS_V3IDENT, get_authorities().values())
+ authorities = list(filter(HAS_V3IDENT, list(get_authorities().values())))
self._endpoints = [(auth.address, auth.dir_port) for auth in authorities]
if use_mirrors:
@@ -412,12 +416,12 @@ class DescriptorDownloader(object):
:raises: **Exception** if unable to determine the directory mirrors
"""
- authorities = filter(HAS_V3IDENT, get_authorities().values())
+ authorities = list(filter(HAS_V3IDENT, list(get_authorities().values())))
new_endpoints = set([(auth.address, auth.dir_port) for auth in authorities])
consensus = list(self.get_consensus(document_handler = stem.descriptor.DocumentHandler.DOCUMENT).run())[0]
- for desc in consensus.routers.values():
+ for desc in list(consensus.routers.values()):
if Flag.V2DIR in desc.flags:
new_endpoints.add((desc.address, desc.dir_port))
diff --git a/stem/descriptor/router_status_entry.py b/stem/descriptor/router_status_entry.py
index 90d704c..ab93ada 100644
--- a/stem/descriptor/router_status_entry.py
+++ b/stem/descriptor/router_status_entry.py
@@ -170,7 +170,7 @@ class RouterStatusEntry(Descriptor):
:raises: **ValueError** if a validity check fails
"""
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
value, _, _ = values[0]
if keyword == 's':
@@ -198,7 +198,7 @@ class RouterStatusEntry(Descriptor):
if keyword in entries and len(entries[keyword]) > 1:
raise ValueError("%s can only have a single '%s' line, got %i:\n%s" % (self._name(True), keyword, len(entries[keyword]), str(self)))
- if 'r' != entries.keys()[0]:
+ if 'r' != list(entries.keys())[0]:
raise ValueError("%s are expected to start with a 'r' line:\n%s" % (self._name(True), str(self)))
def _name(self, is_plural = False):
@@ -266,7 +266,7 @@ class RouterStatusEntryV2(RouterStatusEntry):
super(RouterStatusEntryV2, self).__init__(content, validate, document)
def _parse(self, entries, validate):
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
value, _, _ = values[0]
if keyword == 'r':
@@ -346,7 +346,7 @@ class RouterStatusEntryV3(RouterStatusEntry):
super(RouterStatusEntryV3, self).__init__(content, validate, document)
def _parse(self, entries, validate):
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
value, _, _ = values[0]
if keyword == 'r':
@@ -428,7 +428,7 @@ class RouterStatusEntryMicroV3(RouterStatusEntry):
super(RouterStatusEntryMicroV3, self).__init__(content, validate, document)
def _parse(self, entries, validate):
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
value, _, _ = values[0]
if keyword == 'r':
diff --git a/stem/descriptor/server_descriptor.py b/stem/descriptor/server_descriptor.py
index 40c6a27..11820e3 100644
--- a/stem/descriptor/server_descriptor.py
+++ b/stem/descriptor/server_descriptor.py
@@ -150,7 +150,7 @@ def _parse_file(descriptor_file, is_bridge = False, validate = True, **kwargs):
descriptor_content = descriptor_content[1:]
# strip newlines from annotations
- annotations = map(bytes.strip, annotations)
+ annotations = list(map(bytes.strip, annotations))
descriptor_text = bytes.join(b'', descriptor_content)
@@ -368,7 +368,7 @@ class ServerDescriptor(Descriptor):
:raises: **ValueError** if an error occurs in validation
"""
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
# most just work with the first (and only) value
value, block_type, block_contents = values[0]
@@ -620,11 +620,11 @@ class ServerDescriptor(Descriptor):
raise ValueError("The '%s' entry can only appear once in a descriptor" % keyword)
expected_first_keyword = self._first_keyword()
- if expected_first_keyword and expected_first_keyword != entries.keys()[0]:
+ if expected_first_keyword and expected_first_keyword != list(entries.keys())[0]:
raise ValueError("Descriptor must start with a '%s' entry" % expected_first_keyword)
expected_last_keyword = self._last_keyword()
- if expected_last_keyword and expected_last_keyword != entries.keys()[-1]:
+ if expected_last_keyword and expected_last_keyword != list(entries.keys())[-1]:
raise ValueError("Descriptor must end with a '%s' entry" % expected_last_keyword)
if not self.exit_policy:
@@ -793,7 +793,7 @@ class RelayDescriptor(ServerDescriptor):
# handles fields only in server descriptors
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
value, block_type, block_contents = values[0]
line = '%s %s' % (keyword, value)
@@ -872,7 +872,7 @@ class BridgeDescriptor(ServerDescriptor):
entries = dict(entries)
# handles fields only in bridge descriptors
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
value, block_type, block_contents = values[0]
line = '%s %s' % (keyword, value)
diff --git a/stem/descriptor/tordnsel.py b/stem/descriptor/tordnsel.py
index 951b72f..0a68580 100644
--- a/stem/descriptor/tordnsel.py
+++ b/stem/descriptor/tordnsel.py
@@ -74,7 +74,7 @@ class TorDNSEL(Descriptor):
def _parse(self, entries, validate):
- for keyword, values in entries.items():
+ for keyword, values in list(entries.items()):
value, block_type, block_content = values[0]
if validate and block_content:
diff --git a/stem/exit_policy.py b/stem/exit_policy.py
index 9bc8ccb..7ac3b8b 100644
--- a/stem/exit_policy.py
+++ b/stem/exit_policy.py
@@ -75,6 +75,8 @@ import stem.util.connection
import stem.util.enum
import stem.util.str_tools
+from stem._compat import unicode
+
try:
# added in python 3.2
from functools import lru_cache
@@ -204,7 +206,6 @@ def _flag_private_rules(rules):
if last_rule.is_address_wildcard() or last_rule.min_port != min_port or last_rule.max_port != max_port or last_rule.is_accept != is_accept:
is_match = False
-
if is_match:
for rule in rule_set:
rule._is_private = True
@@ -298,14 +299,14 @@ class ExitPolicy(object):
for rule in self._get_rules():
if rule.is_accept:
- for port in xrange(rule.min_port, rule.max_port + 1):
+ for port in range(rule.min_port, rule.max_port + 1):
if port not in rejected_ports:
return True
elif rule.is_address_wildcard():
if rule.is_port_wildcard():
return False
else:
- rejected_ports.update(range(rule.min_port, rule.max_port + 1))
+ rejected_ports.update(list(range(rule.min_port, rule.max_port + 1)))
return self._is_allowed_default
@@ -351,7 +352,7 @@ class ExitPolicy(object):
elif rule.is_port_wildcard():
break
- for port in xrange(rule.min_port, rule.max_port + 1):
+ for port in range(rule.min_port, rule.max_port + 1):
if port in skip_ports:
continue
@@ -1025,7 +1026,7 @@ def _address_type_to_int(address_type):
def _int_to_address_type(address_type_int):
- return AddressType[AddressType.keys()[address_type_int]]
+ return AddressType[list(AddressType.keys())[address_type_int]]
class MicroExitPolicyRule(ExitPolicyRule):
diff --git a/stem/interpreter/__init__.py b/stem/interpreter/__init__.py
index a296163..f4fac8e 100644
--- a/stem/interpreter/__init__.py
+++ b/stem/interpreter/__init__.py
@@ -52,11 +52,11 @@ def main():
try:
args = stem.interpreter.arguments.parse(sys.argv[1:])
except ValueError as exc:
- print exc
+ print(exc)
sys.exit(1)
if args.print_help:
- print stem.interpreter.arguments.get_help()
+ print(stem.interpreter.arguments.get_help())
sys.exit()
if args.disable_color:
@@ -72,10 +72,10 @@ def main():
if not is_tor_running:
if not stem.util.system.is_available('tor'):
- print format(msg('msg.tor_unavailable'), *ERROR_OUTPUT)
+ print(format(msg('msg.tor_unavailable'), *ERROR_OUTPUT))
sys.exit(1)
else:
- print format(msg('msg.starting_tor'), *HEADER_OUTPUT)
+ print(format(msg('msg.starting_tor'), *HEADER_OUTPUT))
stem.process.launch_tor_with_config(
config = {
@@ -118,18 +118,18 @@ def main():
for line in msg('msg.startup_banner').splitlines():
line_format = HEADER_BOLD_OUTPUT if line.startswith(' ') else HEADER_OUTPUT
- print format(line, *line_format)
+ print(format(line, *line_format))
- print
+ print()
while True:
try:
prompt = '... ' if interpreter.is_multiline_context else PROMPT
- user_input = raw_input(prompt)
+ user_input = input(prompt)
response = interpreter.run_command(user_input)
if response is not None:
- print response
+ print(response)
except (KeyboardInterrupt, EOFError, stem.SocketClosed) as exc:
- print # move cursor to the following line
+ print() # move cursor to the following line
break
diff --git a/stem/interpreter/arguments.py b/stem/interpreter/arguments.py
index d62a386..d36d618 100644
--- a/stem/interpreter/arguments.py
+++ b/stem/interpreter/arguments.py
@@ -77,7 +77,7 @@ def parse(argv):
# translates our args dict into a named tuple
- Args = collections.namedtuple('Args', args.keys())
+ Args = collections.namedtuple('Args', list(args.keys()))
return Args(**args)
diff --git a/stem/interpreter/autocomplete.py b/stem/interpreter/autocomplete.py
index 3a9b40b..c014ef3 100644
--- a/stem/interpreter/autocomplete.py
+++ b/stem/interpreter/autocomplete.py
@@ -70,7 +70,7 @@ def _get_commands(controller, config):
usage_info = config.get('help.usage', {})
- for cmd in usage_info.keys():
+ for cmd in list(usage_info.keys()):
commands.append('/help ' + cmd)
return commands
diff --git a/stem/interpreter/commands.py b/stem/interpreter/commands.py
index 2679e4c..49759fa 100644
--- a/stem/interpreter/commands.py
+++ b/stem/interpreter/commands.py
@@ -69,7 +69,7 @@ def _get_fingerprint(arg, controller):
if len(matches) == 0:
raise ValueError('No relays found at %s' % arg)
elif len(matches) == 1:
- return matches.values()[0]
+ return list(matches.values())[0]
else:
response = "There's multiple relays at %s, include a port to specify which.\n\n" % arg
@@ -118,10 +118,10 @@ class ControlInterpretor(code.InteractiveConsole):
def get_events(self, *event_types):
events = list(self._received_events)
- event_types = map(str.upper, event_types) # make filtering case insensitive
+ event_types = list(map(str.upper, event_types)) # make filtering case insensitive
if event_types:
- events = filter(lambda e: e.type in event_types, events)
+ events = [e for e in events if e.type in event_types]
return events
diff --git a/stem/interpreter/help.py b/stem/interpreter/help.py
index 983da3e..174bc43 100644
--- a/stem/interpreter/help.py
+++ b/stem/interpreter/help.py
@@ -97,7 +97,7 @@ def _response(controller, arg, config):
elif arg == 'SIGNAL':
signal_options = config.get('help.signal.options', {})
- for signal, summary in signal_options.items():
+ for signal, summary in list(signal_options.items()):
output += format('%-15s' % signal, *BOLD_OUTPUT)
output += format(' - %s' % summary, *STANDARD_OUTPUT) + '\n'
elif arg == 'SETEVENTS':
diff --git a/stem/process.py b/stem/process.py
index af66cce..de63952 100644
--- a/stem/process.py
+++ b/stem/process.py
@@ -231,7 +231,7 @@ def launch_tor_with_config(config, tor_cmd = 'tor', completion_percent = 100, in
try:
with open(torrc_path, 'w') as torrc_file:
- for key, values in config.items():
+ for key, values in list(config.items()):
if isinstance(values, str):
torrc_file.write('%s %s\n' % (key, values))
else:
diff --git a/stem/response/__init__.py b/stem/response/__init__.py
index 8585ac4..38d7d8e 100644
--- a/stem/response/__init__.py
+++ b/stem/response/__init__.py
@@ -43,9 +43,13 @@ __all__ = [
]
import re
-import StringIO
import threading
+try:
+ from StringIO import StringIO
+except ImportError:
+ from io import StringIO
+
import stem.socket
KEY_ARG = re.compile('^(\S+)=')
@@ -149,7 +153,7 @@ class ControlMessage(object):
:returns: stem.response.ControlMessage instance
"""
- msg = stem.socket.recv_message(StringIO.StringIO(content))
+ msg = stem.socket.recv_message(StringIO(content))
if msg_type is not None:
convert(msg_type, msg, **kwargs)
@@ -528,7 +532,7 @@ def _unescape(entry):
#
# (unescaped prefix, remaining entry)
- for esc_sequence, replacement in CONTROL_ESCAPES.items():
+ for esc_sequence, replacement in list(CONTROL_ESCAPES.items()):
if entry.startswith(esc_sequence):
return (replacement, entry[len(esc_sequence):])
diff --git a/stem/response/events.py b/stem/response/events.py
index 49a0779..01a7b26 100644
--- a/stem/response/events.py
+++ b/stem/response/events.py
@@ -12,6 +12,7 @@ import stem.response
import stem.version
from stem.util import connection, log, str_tools, tor_tools
+from stem._compat import unicode, long
# Matches keyword=value arguments. This can't be a simple "(.*)=(.*)" pattern
# because some positional arguments, like circuit paths, can have an equal
@@ -122,7 +123,7 @@ class Event(stem.response.ControlMessage):
setattr(self, attr_name, attr_value)
- for controller_attr_name, attr_name in self._KEYWORD_ARGS.items():
+ for controller_attr_name, attr_name in list(self._KEYWORD_ARGS.items()):
setattr(self, attr_name, self.keyword_args.get(controller_attr_name))
# method overwritten by our subclasses for special handling that they do
diff --git a/stem/socket.py b/stem/socket.py
index 7991899..e308c8a 100644
--- a/stem/socket.py
+++ b/stem/socket.py
@@ -69,6 +69,7 @@ Tor...
from __future__ import absolute_import
+
import re
import socket
import threading
diff --git a/stem/util/conf.py b/stem/util/conf.py
index aafb140..c74361c 100644
--- a/stem/util/conf.py
+++ b/stem/util/conf.py
@@ -359,7 +359,7 @@ def parse_enum_csv(key, value, enumeration, count = None):
raise ValueError("The count must be None, an int, or two value tuple. Got '%s' (%s)'" % (count, type(count)))
result = []
- enum_keys = [k.upper() for k in enumeration.keys()]
+ enum_keys = [k.upper() for k in list(enumeration.keys())]
enum_values = list(enumeration)
for val in values:
@@ -576,7 +576,7 @@ class Config(object):
self._listeners.append(listener)
if backfill:
- for key in self.keys():
+ for key in list(self.keys()):
listener(self, key)
def clear_listeners(self):
@@ -593,7 +593,7 @@ class Config(object):
:returns: **list** if strings for the configuration keys we've loaded
"""
- return self._contents.keys()
+ return list(self._contents.keys())
def unused_keys(self):
"""
diff --git a/stem/util/connection.py b/stem/util/connection.py
index 181d148..276f97c 100644
--- a/stem/util/connection.py
+++ b/stem/util/connection.py
@@ -51,6 +51,7 @@ import stem.util.proc
import stem.util.system
from stem.util import conf, enum, log
+from stem._compat import unicode
# Connection resolution is risky to log about since it's highly likely to
# contain sensitive information. That said, it's also difficult to get right in
@@ -271,7 +272,7 @@ def system_resolvers(system = None):
# remove any that aren't in the user's PATH
- resolvers = filter(lambda r: stem.util.system.is_available(RESOLVER_COMMAND[r]), resolvers)
+ resolvers = [r for r in resolvers if stem.util.system.is_available(RESOLVER_COMMAND[r])]
# proc resolution, by far, outperforms the others so defaults to this is able
@@ -303,7 +304,7 @@ def port_usage(port):
config.load(config_path)
port_uses = {}
- for key, value in config.get('port', {}).items():
+ for key, value in list(config.get('port', {}).items()):
if key.isdigit():
port_uses[int(key)] = value
elif '-' in key:
@@ -484,7 +485,7 @@ def expand_ipv6_address(address):
address = address.replace('::', '::' + ':' * missing_groups)
# inserts missing zeros
- for index in xrange(8):
+ for index in range(8):
start = index * 5
end = address.index(':', start) if index != 7 else len(address)
missing_zeros = 4 - (end - start)
@@ -515,7 +516,7 @@ def get_mask_ipv4(bits):
mask_bin = _get_binary(2 ** bits - 1, 32)[::-1]
# breaks it into eight character groupings
- octets = [mask_bin[8 * i:8 * (i + 1)] for i in xrange(4)]
+ octets = [mask_bin[8 * i:8 * (i + 1)] for i in range(4)]
# converts each octet into its integer value
return '.'.join([str(int(octet, 2)) for octet in octets])
@@ -542,7 +543,7 @@ def get_mask_ipv6(bits):
mask_bin = _get_binary(2 ** bits - 1, 128)[::-1]
# breaks it into sixteen character groupings
- groupings = [mask_bin[16 * i:16 * (i + 1)] for i in xrange(8)]
+ groupings = [mask_bin[16 * i:16 * (i + 1)] for i in range(8)]
# converts each group into its hex value
return ':'.join(['%04x' % int(group, 2) for group in groupings]).upper()
diff --git a/stem/util/enum.py b/stem/util/enum.py
index 473f0de..7520bda 100644
--- a/stem/util/enum.py
+++ b/stem/util/enum.py
@@ -40,6 +40,8 @@ constructed as simple type listings...
+- __iter__ - iterator over our enum keys
"""
+from stem._compat import unicode
+
def UppercaseEnum(*args):
"""
@@ -158,7 +160,7 @@ class Enum(object):
if item in vars(self):
return getattr(self, item)
else:
- keys = ', '.join(self.keys())
+ keys = ', '.join(list(self.keys()))
raise ValueError("'%s' isn't among our enumeration keys, which includes: %s" % (item, keys))
def __iter__(self):
diff --git a/stem/util/log.py b/stem/util/log.py
index 60122de..11a0392 100644
--- a/stem/util/log.py
+++ b/stem/util/log.py
@@ -235,7 +235,7 @@ class _StdoutLogger(logging.Handler):
datefmt = '%m/%d/%Y %H:%M:%S')
def emit(self, record):
- print self.formatter.format(record)
+ print(self.formatter.format(record))
def log_to_stdout(runlevel):
diff --git a/stem/util/ordereddict.py b/stem/util/ordereddict.py
index 07c7d4e..f3f278a 100644
--- a/stem/util/ordereddict.py
+++ b/stem/util/ordereddict.py
@@ -76,9 +76,9 @@ class OrderedDict(dict, DictMixin):
if not self:
raise KeyError('dictionary is empty')
if last:
- key = reversed(self).next()
+ key = next(reversed(self))
else:
- key = iter(self).next()
+ key = next(iter(self))
value = self.pop(key)
return key, value
@@ -107,7 +107,7 @@ class OrderedDict(dict, DictMixin):
def __repr__(self):
if not self:
return '%s()' % (self.__class__.__name__,)
- return '%s(%r)' % (self.__class__.__name__, self.items())
+ return '%s(%r)' % (self.__class__.__name__, list(self.items()))
def copy(self):
return self.__class__(self)
@@ -123,7 +123,7 @@ class OrderedDict(dict, DictMixin):
if isinstance(other, OrderedDict):
if len(self) != len(other):
return False
- for p, q in zip(self.items(), other.items()):
+ for p, q in zip(list(self.items()), list(other.items())):
if p != q:
return False
return True
diff --git a/stem/util/str_tools.py b/stem/util/str_tools.py
index 43d12d6..3556a33 100644
--- a/stem/util/str_tools.py
+++ b/stem/util/str_tools.py
@@ -28,6 +28,7 @@ import sys
import stem.prereq
import stem.util.enum
+from stem._compat import unicode
# label conversion tuples of the form...
@@ -213,7 +214,7 @@ def crop(msg, size, min_word_length = 4, min_crop = 0, ending = Ending.ELLIPSE,
min_word_length += 1
if min_word_length is None:
- min_word_length = sys.maxint
+ min_word_length = sys.maxsize
# checks if there isn't the minimum space needed to include anything
diff --git a/stem/util/system.py b/stem/util/system.py
index 5eedfda..ec33c2b 100644
--- a/stem/util/system.py
+++ b/stem/util/system.py
@@ -56,6 +56,7 @@ import stem.util.str_tools
from stem import UNDEFINED
from stem.util import log
+from stem._compat import unicode
# Mapping of commands to if they're available or not.
@@ -242,7 +243,7 @@ def is_running(command):
command_listing = call(secondary_resolver, None)
if command_listing:
- command_listing = map(unicode.strip, command_listing)
+ command_listing = list(map(unicode.strip, command_listing))
return command in command_listing
return None
@@ -327,7 +328,7 @@ def pid_by_name(process_name, multiple = False):
if results:
try:
- pids = map(int, results)
+ pids = list(map(int, results))
if multiple:
return pids
@@ -348,7 +349,7 @@ def pid_by_name(process_name, multiple = False):
if results and len(results) == 1:
try:
- pids = map(int, results[0].split())
+ pids = list(map(int, results[0].split()))
if multiple:
return pids
@@ -380,7 +381,7 @@ def pid_by_name(process_name, multiple = False):
if results:
try:
- pids = map(int, results[1:])
+ pids = list(map(int, results[1:]))
if multiple:
return pids
@@ -398,7 +399,7 @@ def pid_by_name(process_name, multiple = False):
results = [r.split()[0] for r in results if r.endswith(' %s' % process_name)]
try:
- pids = map(int, results)
+ pids = list(map(int, results))
if multiple:
return pids
@@ -426,7 +427,7 @@ def pid_by_name(process_name, multiple = False):
if results:
try:
- pids = map(int, results)
+ pids = list(map(int, results))
if multiple:
return pids
@@ -966,7 +967,7 @@ def get_process_name():
args, argc = [], argc_t()
- for i in xrange(100):
+ for i in range(100):
# The ending index can be either None or raise a ValueError when
# accessed...
#
diff --git a/stem/util/test_tools.py b/stem/util/test_tools.py
index 8209c58..624f445 100644
--- a/stem/util/test_tools.py
+++ b/stem/util/test_tools.py
@@ -262,7 +262,7 @@ def pyflakes_issues(paths):
# Paths in pyflakes_ignore are relative, so we need to check to see if our
# path ends with any of them.
- for ignored_path, ignored_issues in self._ignored_issues.items():
+ for ignored_path, ignored_issues in list(self._ignored_issues.items()):
if path.endswith(ignored_path) and issue in ignored_issues:
return True
diff --git a/test/integ/connection/connect.py b/test/integ/connection/connect.py
index 4361c0f..c1785fd 100644
--- a/test/integ/connection/connect.py
+++ b/test/integ/connection/connect.py
@@ -2,10 +2,14 @@
Integration tests for the connect_* convenience functions.
"""
-import StringIO
import sys
import unittest
+try:
+ from StringIO import StringIO
+except ImportError:
+ from io import StringIO
+
import stem.connection
import test.runner
@@ -14,7 +18,7 @@ class TestConnect(unittest.TestCase):
def setUp(self):
# prevents the function from printing to the real stdout
self.original_stdout = sys.stdout
- sys.stdout = StringIO.StringIO()
+ sys.stdout = StringIO()
def tearDown(self):
sys.stdout = self.original_stdout
@@ -58,7 +62,7 @@ class TestConnect(unittest.TestCase):
test.runner.exercise_controller(self, control_socket)
control_socket.close()
else:
- self.assertEquals(control_socket, None)
+ self.assertEqual(control_socket, None)
def test_connect_socket_file(self):
"""
@@ -80,4 +84,4 @@ class TestConnect(unittest.TestCase):
test.runner.exercise_controller(self, control_socket)
control_socket.close()
else:
- self.assertEquals(control_socket, None)
+ self.assertEqual(control_socket, None)
diff --git a/test/integ/control/base_controller.py b/test/integ/control/base_controller.py
index 96fb75b..9f0e2aa 100644
--- a/test/integ/control/base_controller.py
+++ b/test/integ/control/base_controller.py
@@ -50,7 +50,7 @@ class TestBaseController(unittest.TestCase):
with test.runner.get_runner().get_tor_socket() as control_socket:
controller = stem.control.BaseController(control_socket)
- for _ in xrange(250):
+ for _ in range(250):
controller.connect()
controller.close()
@@ -77,7 +77,7 @@ class TestBaseController(unittest.TestCase):
with test.runner.get_runner().get_tor_socket() as control_socket:
controller = stem.control.BaseController(control_socket)
response = controller.msg('invalid')
- self.assertEquals('Unrecognized command "invalid"', str(response))
+ self.assertEqual('Unrecognized command "invalid"', str(response))
def test_msg_invalid_getinfo(self):
"""
@@ -90,7 +90,7 @@ class TestBaseController(unittest.TestCase):
with test.runner.get_runner().get_tor_socket() as control_socket:
controller = stem.control.BaseController(control_socket)
response = controller.msg('GETINFO blarg')
- self.assertEquals('Unrecognized key "blarg"', str(response))
+ self.assertEqual('Unrecognized key "blarg"', str(response))
def test_msg_repeatedly(self):
"""
@@ -108,7 +108,7 @@ class TestBaseController(unittest.TestCase):
controller = stem.control.BaseController(control_socket)
def run_getinfo():
- for _ in xrange(150):
+ for _ in range(150):
try:
controller.msg('GETINFO version')
controller.msg('GETINFO blarg')
@@ -118,13 +118,13 @@ class TestBaseController(unittest.TestCase):
message_threads = []
- for _ in xrange(5):
+ for _ in range(5):
msg_thread = threading.Thread(target = run_getinfo)
message_threads.append(msg_thread)
msg_thread.setDaemon(True)
msg_thread.start()
- for index in xrange(100):
+ for index in range(100):
controller.connect()
controller.close()
@@ -187,7 +187,7 @@ class TestBaseController(unittest.TestCase):
for bw_event in controller.received_events:
self.assertTrue(re.match('BW [0-9]+ [0-9]+', str(bw_event)))
self.assertTrue(re.match('650 BW [0-9]+ [0-9]+\r\n', bw_event.raw_content()))
- self.assertEquals(('650', ' '), bw_event.content()[0][:2])
+ self.assertEqual(('650', ' '), bw_event.content()[0][:2])
def test_get_latest_heartbeat(self):
"""
@@ -219,15 +219,15 @@ class TestBaseController(unittest.TestCase):
controller.add_status_listener(state_observer.listener, False)
controller.close()
- self.assertEquals(controller, state_observer.controller)
- self.assertEquals(stem.control.State.CLOSED, state_observer.state)
+ self.assertEqual(controller, state_observer.controller)
+ self.assertEqual(stem.control.State.CLOSED, state_observer.state)
self.assertTrue(state_observer.timestamp <= time.time())
self.assertTrue(state_observer.timestamp > time.time() - 1.0)
state_observer.reset()
controller.connect()
- self.assertEquals(controller, state_observer.controller)
- self.assertEquals(stem.control.State.INIT, state_observer.state)
+ self.assertEqual(controller, state_observer.controller)
+ self.assertEqual(stem.control.State.INIT, state_observer.state)
self.assertTrue(state_observer.timestamp <= time.time())
self.assertTrue(state_observer.timestamp > time.time() - 1.0)
state_observer.reset()
@@ -235,8 +235,8 @@ class TestBaseController(unittest.TestCase):
# cause the socket to shut down without calling close()
controller.msg('Blarg!')
self.assertRaises(stem.SocketClosed, controller.msg, 'blarg')
- self.assertEquals(controller, state_observer.controller)
- self.assertEquals(stem.control.State.CLOSED, state_observer.state)
+ self.assertEqual(controller, state_observer.controller)
+ self.assertEqual(stem.control.State.CLOSED, state_observer.state)
self.assertTrue(state_observer.timestamp <= time.time())
self.assertTrue(state_observer.timestamp > time.time() - 1.0)
state_observer.reset()
@@ -244,9 +244,9 @@ class TestBaseController(unittest.TestCase):
# remove listener and make sure we don't get further notices
controller.remove_status_listener(state_observer.listener)
controller.connect()
- self.assertEquals(None, state_observer.controller)
- self.assertEquals(None, state_observer.state)
- self.assertEquals(None, state_observer.timestamp)
+ self.assertEqual(None, state_observer.controller)
+ self.assertEqual(None, state_observer.state)
+ self.assertEqual(None, state_observer.timestamp)
state_observer.reset()
# add with spawn as true, we need a little delay on this since we then
@@ -255,8 +255,8 @@ class TestBaseController(unittest.TestCase):
controller.add_status_listener(state_observer.listener, True)
controller.close()
time.sleep(0.1) # not much work going on so this doesn't need to be much
- self.assertEquals(controller, state_observer.controller)
- self.assertEquals(stem.control.State.CLOSED, state_observer.state)
+ self.assertEqual(controller, state_observer.controller)
+ self.assertEqual(stem.control.State.CLOSED, state_observer.state)
self.assertTrue(state_observer.timestamp <= time.time())
self.assertTrue(state_observer.timestamp > time.time() - 1.0)
state_observer.reset()
diff --git a/test/integ/control/controller.py b/test/integ/control/controller.py
index cd0b578..fbe66e5 100644
--- a/test/integ/control/controller.py
+++ b/test/integ/control/controller.py
@@ -420,7 +420,7 @@ class TestController(unittest.TestCase):
self.assertEqual(expected, controller.get_conf_map([config_key], 'la-di-dah'))
request_params = ['ControlPORT', 'dirport', 'datadirectory']
- reply_params = controller.get_conf_map(request_params, multiple=False).keys()
+ reply_params = list(controller.get_conf_map(request_params, multiple=False).keys())
self.assertEqual(set(request_params), set(reply_params))
# queries an option that is unset
@@ -974,7 +974,7 @@ class TestController(unittest.TestCase):
# try up to 10 times to rule out transient network failures
- for _ in xrange(10):
+ for _ in range(10):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(30)
@@ -1184,7 +1184,7 @@ class TestController(unittest.TestCase):
with test.runner.get_runner().get_tor_controller() as controller:
# try 10 times to build a circuit we can connect through
- for i in xrange(10):
+ for i in range(10):
controller.add_event_listener(handle_streamcreated, stem.control.EventType.STREAM)
controller.set_conf('__LeaveStreamsUnattached', '1')
@@ -1208,7 +1208,7 @@ class TestController(unittest.TestCase):
self.assertTrue(our_stream.circ_id)
self.assertTrue(circuit_id)
- self.assertEquals(our_stream.circ_id, circuit_id)
+ self.assertEqual(our_stream.circ_id, circuit_id)
def test_get_circuits(self):
"""
diff --git a/test/integ/descriptor/remote.py b/test/integ/descriptor/remote.py
index d1a377c..d1700a5 100644
--- a/test/integ/descriptor/remote.py
+++ b/test/integ/descriptor/remote.py
@@ -31,7 +31,7 @@ class TestDescriptorDownloader(unittest.TestCase):
queries = []
- for nickname, authority in stem.descriptor.remote.get_authorities().items():
+ for nickname, authority in list(stem.descriptor.remote.get_authorities().items()):
queries.append((stem.descriptor.remote.Query(
'/tor/server/fp/9695DFC35FFEB861329B9F1AB04C46397020CE31',
'server-descriptor 1.0',
diff --git a/test/integ/descriptor/server_descriptor.py b/test/integ/descriptor/server_descriptor.py
index 6882c58..d291923 100644
--- a/test/integ/descriptor/server_descriptor.py
+++ b/test/integ/descriptor/server_descriptor.py
@@ -32,10 +32,10 @@ class TestServerDescriptor(unittest.TestCase):
with open(descriptor_path, 'rb') as descriptor_file:
for desc in stem.descriptor.parse_file(descriptor_file, 'server-descriptor 1.0'):
# the following attributes should be deprecated, and not appear in the wild
- self.assertEquals(None, desc.read_history_end)
- self.assertEquals(None, desc.write_history_end)
- self.assertEquals(None, desc.eventdns)
- self.assertEquals(None, desc.socks_port)
+ self.assertEqual(None, desc.read_history_end)
+ self.assertEqual(None, desc.write_history_end)
+ self.assertEqual(None, desc.eventdns)
+ self.assertEqual(None, desc.socks_port)
unrecognized_lines = desc.get_unrecognized_lines()
diff --git a/test/integ/process.py b/test/integ/process.py
index b06e500..bd080b6 100644
--- a/test/integ/process.py
+++ b/test/integ/process.py
@@ -59,7 +59,7 @@ class TestProcess(unittest.TestCase):
# exercises the socket
control_socket.send('GETCONF ControlPort')
getconf_response = control_socket.recv()
- self.assertEquals('ControlPort=2778', str(getconf_response))
+ self.assertEqual('ControlPort=2778', str(getconf_response))
finally:
if control_socket:
control_socket.close()
@@ -121,7 +121,7 @@ class TestProcess(unittest.TestCase):
# tor polls for the process every fifteen seconds so this may take a
# while...
- for seconds_waited in xrange(30):
+ for seconds_waited in range(30):
if tor_process.poll() == 0:
return # tor exited
@@ -158,7 +158,7 @@ class TestProcess(unittest.TestCase):
controller.close()
# give tor a few seconds to quit
- for seconds_waited in xrange(5):
+ for seconds_waited in range(5):
if tor_process.poll() == 0:
return # tor exited
diff --git a/test/integ/socket/control_message.py b/test/integ/socket/control_message.py
index bdebb11..a2eb6f2 100644
--- a/test/integ/socket/control_message.py
+++ b/test/integ/socket/control_message.py
@@ -27,10 +27,10 @@ class TestControlMessage(unittest.TestCase):
control_socket.send('GETINFO version')
auth_required_response = control_socket.recv()
- self.assertEquals('Authentication required.', str(auth_required_response))
- self.assertEquals(['Authentication required.'], list(auth_required_response))
- self.assertEquals('514 Authentication required.\r\n', auth_required_response.raw_content())
- self.assertEquals([('514', ' ', 'Authentication required.')], auth_required_response.content())
+ self.assertEqual('Authentication required.', str(auth_required_response))
+ self.assertEqual(['Authentication required.'], list(auth_required_response))
+ self.assertEqual('514 Authentication required.\r\n', auth_required_response.raw_content())
+ self.assertEqual([('514', ' ', 'Authentication required.')], auth_required_response.content())
# The socket's broken but doesn't realize it yet. These use cases are
# checked in more depth by the ControlSocket integ tests.
@@ -65,10 +65,10 @@ class TestControlMessage(unittest.TestCase):
with test.runner.get_runner().get_tor_socket() as control_socket:
control_socket.send('blarg')
unrecognized_command_response = control_socket.recv()
- self.assertEquals('Unrecognized command "blarg"', str(unrecognized_command_response))
- self.assertEquals(['Unrecognized command "blarg"'], list(unrecognized_command_response))
- self.assertEquals('510 Unrecognized command "blarg"\r\n', unrecognized_command_response.raw_content())
- self.assertEquals([('510', ' ', 'Unrecognized command "blarg"')], unrecognized_command_response.content())
+ self.assertEqual('Unrecognized command "blarg"', str(unrecognized_command_response))
+ self.assertEqual(['Unrecognized command "blarg"'], list(unrecognized_command_response))
+ self.assertEqual('510 Unrecognized command "blarg"\r\n', unrecognized_command_response.raw_content())
+ self.assertEqual([('510', ' ', 'Unrecognized command "blarg"')], unrecognized_command_response.content())
def test_invalid_getinfo(self):
"""
@@ -81,10 +81,10 @@ class TestControlMessage(unittest.TestCase):
with test.runner.get_runner().get_tor_socket() as control_socket:
control_socket.send('GETINFO blarg')
unrecognized_key_response = control_socket.recv()
- self.assertEquals('Unrecognized key "blarg"', str(unrecognized_key_response))
- self.assertEquals(['Unrecognized key "blarg"'], list(unrecognized_key_response))
- self.assertEquals('552 Unrecognized key "blarg"\r\n', unrecognized_key_response.raw_content())
- self.assertEquals([('552', ' ', 'Unrecognized key "blarg"')], unrecognized_key_response.content())
+ self.assertEqual('Unrecognized key "blarg"', str(unrecognized_key_response))
+ self.assertEqual(['Unrecognized key "blarg"'], list(unrecognized_key_response))
+ self.assertEqual('552 Unrecognized key "blarg"\r\n', unrecognized_key_response.raw_content())
+ self.assertEqual([('552', ' ', 'Unrecognized key "blarg"')], unrecognized_key_response.content())
def test_getinfo_config_file(self):
"""
@@ -100,10 +100,10 @@ class TestControlMessage(unittest.TestCase):
with runner.get_tor_socket() as control_socket:
control_socket.send('GETINFO config-file')
config_file_response = control_socket.recv()
- self.assertEquals('config-file=%s\nOK' % torrc_dst, str(config_file_response))
- self.assertEquals(['config-file=%s' % torrc_dst, 'OK'], list(config_file_response))
- self.assertEquals('250-config-file=%s\r\n250 OK\r\n' % torrc_dst, config_file_response.raw_content())
- self.assertEquals([('250', '-', 'config-file=%s' % torrc_dst), ('250', ' ', 'OK')], config_file_response.content())
+ self.assertEqual('config-file=%s\nOK' % torrc_dst, str(config_file_response))
+ self.assertEqual(['config-file=%s' % torrc_dst, 'OK'], list(config_file_response))
+ self.assertEqual('250-config-file=%s\r\n250 OK\r\n' % torrc_dst, config_file_response.raw_content())
+ self.assertEqual([('250', '-', 'config-file=%s' % torrc_dst), ('250', ' ', 'OK')], config_file_response.content())
def test_getinfo_config_text(self):
"""
@@ -161,10 +161,10 @@ class TestControlMessage(unittest.TestCase):
with test.runner.get_runner().get_tor_socket() as control_socket:
control_socket.send('SETEVENTS BW')
setevents_response = control_socket.recv()
- self.assertEquals('OK', str(setevents_response))
- self.assertEquals(['OK'], list(setevents_response))
- self.assertEquals('250 OK\r\n', setevents_response.raw_content())
- self.assertEquals([('250', ' ', 'OK')], setevents_response.content())
+ self.assertEqual('OK', str(setevents_response))
+ self.assertEqual(['OK'], list(setevents_response))
+ self.assertEqual('250 OK\r\n', setevents_response.raw_content())
+ self.assertEqual([('250', ' ', 'OK')], setevents_response.content())
# Tor will emit a BW event once per second. Parsing two of them.
@@ -172,4 +172,4 @@ class TestControlMessage(unittest.TestCase):
bw_event = control_socket.recv()
self.assertTrue(re.match('BW [0-9]+ [0-9]+', str(bw_event)))
self.assertTrue(re.match('650 BW [0-9]+ [0-9]+\r\n', bw_event.raw_content()))
- self.assertEquals(('650', ' '), bw_event.content()[0][:2])
+ self.assertEqual(('650', ' '), bw_event.content()[0][:2])
diff --git a/test/integ/socket/control_socket.py b/test/integ/socket/control_socket.py
index f0f2e40..a45c47e 100644
--- a/test/integ/socket/control_socket.py
+++ b/test/integ/socket/control_socket.py
@@ -104,7 +104,7 @@ class TestControlSocket(unittest.TestCase):
with test.runner.get_runner().get_tor_socket() as control_socket:
control_socket.send('QUIT')
- self.assertEquals('closing connection', str(control_socket.recv()))
+ self.assertEqual('closing connection', str(control_socket.recv()))
self.assertTrue(control_socket.is_alive())
# If we send another message to a port based socket then it will seem to
@@ -143,7 +143,7 @@ class TestControlSocket(unittest.TestCase):
with test.runner.get_runner().get_tor_socket() as control_socket:
control_socket.send('QUIT')
- self.assertEquals('closing connection', str(control_socket.recv()))
+ self.assertEqual('closing connection', str(control_socket.recv()))
# Neither a port or file based socket will know that tor has hung up on
# the connection at this point. We should know after calling recv(),
diff --git a/test/integ/util/conf.py b/test/integ/util/conf.py
index 2a50129..daf566d 100644
--- a/test/integ/util/conf.py
+++ b/test/integ/util/conf.py
@@ -95,11 +95,11 @@ class TestConf(unittest.TestCase):
user_config = stem.util.conf.get_config('integ_testing')
user_config.load(test_config_path)
- self.assertEquals('atagar', ssh_config['login.user'])
- self.assertEquals('pepperjack_is_awesome!', ssh_config['login.password'])
- self.assertEquals('1.2.3.4', ssh_config['destination.ip'])
- self.assertEquals(22, ssh_config['destination.port'])
- self.assertEquals(['export PATH=$PATH:~/bin', 'alias l=ls'], ssh_config['startup.run'])
+ self.assertEqual('atagar', ssh_config['login.user'])
+ self.assertEqual('pepperjack_is_awesome!', ssh_config['login.password'])
+ self.assertEqual('1.2.3.4', ssh_config['destination.ip'])
+ self.assertEqual(22, ssh_config['destination.port'])
+ self.assertEqual(['export PATH=$PATH:~/bin', 'alias l=ls'], ssh_config['startup.run'])
def test_load_multiline(self):
"""
@@ -111,9 +111,9 @@ class TestConf(unittest.TestCase):
test_config.load(test_config_path)
for entry in ('simple', 'leading_whitespace', 'squashed_top', 'squashed_bottom'):
- self.assertEquals('la de da\nand a ho hum', test_config.get('multiline.entry.%s' % entry))
+ self.assertEqual('la de da\nand a ho hum', test_config.get('multiline.entry.%s' % entry))
- self.assertEquals('', test_config.get('multiline.entry.empty'))
+ self.assertEqual('', test_config.get('multiline.entry.empty'))
def test_save(self):
"""
@@ -133,6 +133,6 @@ class TestConf(unittest.TestCase):
test_config.clear()
test_config.load()
- self.assertEquals("yup, I'm there", test_config.get_value('single_value'))
- self.assertEquals(['a', 'b', 'c'], test_config.get_value('multiple_values', multiple = True))
- self.assertEquals(HERALD_POEM, test_config.get_value('multiline_value'))
+ self.assertEqual("yup, I'm there", test_config.get_value('single_value'))
+ self.assertEqual(['a', 'b', 'c'], test_config.get_value('multiple_values', multiple = True))
+ self.assertEqual(HERALD_POEM, test_config.get_value('multiline_value'))
diff --git a/test/integ/util/proc.py b/test/integ/util/proc.py
index 1047912..66203dd 100644
--- a/test/integ/util/proc.py
+++ b/test/integ/util/proc.py
@@ -26,7 +26,7 @@ class TestProc(unittest.TestCase):
runner = test.runner.get_runner()
runner_pid, tor_cwd = runner.get_pid(), runner.get_tor_cwd()
- self.assertEquals(tor_cwd, proc.cwd(runner_pid))
+ self.assertEqual(tor_cwd, proc.cwd(runner_pid))
def test_uid(self):
"""
@@ -38,7 +38,7 @@ class TestProc(unittest.TestCase):
return
tor_pid = test.runner.get_runner().get_pid()
- self.assertEquals(os.geteuid(), proc.uid(tor_pid))
+ self.assertEqual(os.geteuid(), proc.uid(tor_pid))
def test_memory_usage(self):
"""
@@ -68,7 +68,7 @@ class TestProc(unittest.TestCase):
tor_pid = test.runner.get_runner().get_pid()
command, utime, stime, start_time = proc.stats(tor_pid, 'command', 'utime', 'stime', 'start time')
- self.assertEquals('tor', command)
+ self.assertEqual('tor', command)
self.assertTrue(float(utime) > 0)
self.assertTrue(float(stime) >= 0)
self.assertTrue(float(start_time) > proc.system_start_time())
diff --git a/test/integ/util/system.py b/test/integ/util/system.py
index e5cb199..d754ddb 100644
--- a/test/integ/util/system.py
+++ b/test/integ/util/system.py
@@ -90,8 +90,8 @@ class TestSystem(unittest.TestCase):
return
tor_pid = test.runner.get_runner().get_pid()
- self.assertEquals(tor_pid, stem.util.system.pid_by_name('tor'))
- self.assertEquals(None, stem.util.system.pid_by_name('blarg_and_stuff'))
+ self.assertEqual(tor_pid, stem.util.system.pid_by_name('tor'))
+ self.assertEqual(None, stem.util.system.pid_by_name('blarg_and_stuff'))
def test_pid_by_name_pgrep(self):
"""
@@ -113,7 +113,7 @@ class TestSystem(unittest.TestCase):
call_mock.side_effect = call_replacement
tor_pid = test.runner.get_runner().get_pid()
- self.assertEquals(tor_pid, stem.util.system.pid_by_name('tor'))
+ self.assertEqual(tor_pid, stem.util.system.pid_by_name('tor'))
def test_pid_by_name_pidof(self):
"""
@@ -135,7 +135,7 @@ class TestSystem(unittest.TestCase):
call_mock.side_effect = call_replacement
tor_pid = test.runner.get_runner().get_pid()
- self.assertEquals(tor_pid, stem.util.system.pid_by_name('tor'))
+ self.assertEqual(tor_pid, stem.util.system.pid_by_name('tor'))
def test_pid_by_name_ps_linux(self):
"""
@@ -160,7 +160,7 @@ class TestSystem(unittest.TestCase):
call_mock.side_effect = call_replacement
tor_pid = test.runner.get_runner().get_pid()
- self.assertEquals(tor_pid, stem.util.system.pid_by_name('tor'))
+ self.assertEqual(tor_pid, stem.util.system.pid_by_name('tor'))
def test_pid_by_name_ps_bsd(self):
"""
@@ -185,7 +185,7 @@ class TestSystem(unittest.TestCase):
call_mock.side_effect = call_replacement
tor_pid = test.runner.get_runner().get_pid()
- self.assertEquals(tor_pid, stem.util.system.pid_by_name('tor'))
+ self.assertEqual(tor_pid, stem.util.system.pid_by_name('tor'))
def test_pid_by_name_lsof(self):
"""
@@ -214,7 +214,7 @@ class TestSystem(unittest.TestCase):
all_tor_pids = stem.util.system.pid_by_name('tor', multiple = True)
if len(all_tor_pids) == 1:
- self.assertEquals(our_tor_pid, all_tor_pids[0])
+ self.assertEqual(our_tor_pid, all_tor_pids[0])
def test_pid_by_port(self):
"""
@@ -241,8 +241,8 @@ class TestSystem(unittest.TestCase):
return
tor_pid, tor_port = runner.get_pid(), test.runner.CONTROL_PORT
- self.assertEquals(tor_pid, stem.util.system.pid_by_port(tor_port))
- self.assertEquals(None, stem.util.system.pid_by_port(99999))
+ self.assertEqual(tor_pid, stem.util.system.pid_by_port(tor_port))
+ self.assertEqual(None, stem.util.system.pid_by_port(99999))
def test_pid_by_port_netstat(self):
"""
@@ -274,7 +274,7 @@ class TestSystem(unittest.TestCase):
call_mock.side_effect = call_replacement
tor_pid = test.runner.get_runner().get_pid()
- self.assertEquals(tor_pid, stem.util.system.pid_by_port(test.runner.CONTROL_PORT))
+ self.assertEqual(tor_pid, stem.util.system.pid_by_port(test.runner.CONTROL_PORT))
def test_pid_by_port_sockstat(self):
"""
@@ -303,7 +303,7 @@ class TestSystem(unittest.TestCase):
call_mock.side_effect = call_replacement
tor_pid = test.runner.get_runner().get_pid()
- self.assertEquals(tor_pid, stem.util.system.pid_by_port(test.runner.CONTROL_PORT))
+ self.assertEqual(tor_pid, stem.util.system.pid_by_port(test.runner.CONTROL_PORT))
def test_pid_by_port_lsof(self):
"""
@@ -332,7 +332,7 @@ class TestSystem(unittest.TestCase):
call_mock.side_effect = call_replacement
tor_pid = test.runner.get_runner().get_pid()
- self.assertEquals(tor_pid, stem.util.system.pid_by_port(test.runner.CONTROL_PORT))
+ self.assertEqual(tor_pid, stem.util.system.pid_by_port(test.runner.CONTROL_PORT))
def test_pid_by_open_file(self):
"""
@@ -341,11 +341,11 @@ class TestSystem(unittest.TestCase):
# check a directory that exists, but isn't claimed by any application
tmpdir = tempfile.mkdtemp()
- self.assertEquals(None, stem.util.system.pid_by_open_file(tmpdir))
+ self.assertEqual(None, stem.util.system.pid_by_open_file(tmpdir))
# check a directory that doesn't exist
os.rmdir(tmpdir)
- self.assertEquals(None, stem.util.system.pid_by_open_file(tmpdir))
+ self.assertEqual(None, stem.util.system.pid_by_open_file(tmpdir))
def test_cwd(self):
"""
@@ -362,8 +362,8 @@ class TestSystem(unittest.TestCase):
return
runner_pid, tor_cwd = runner.get_pid(), runner.get_tor_cwd()
- self.assertEquals(tor_cwd, stem.util.system.cwd(runner_pid))
- self.assertEquals(None, stem.util.system.cwd(99999))
+ self.assertEqual(tor_cwd, stem.util.system.cwd(runner_pid))
+ self.assertEqual(None, stem.util.system.cwd(99999))
def test_cwd_pwdx(self):
"""
@@ -389,7 +389,7 @@ class TestSystem(unittest.TestCase):
call_mock.side_effect = call_replacement
runner_pid, tor_cwd = runner.get_pid(), runner.get_tor_cwd()
- self.assertEquals(tor_cwd, stem.util.system.cwd(runner_pid))
+ self.assertEqual(tor_cwd, stem.util.system.cwd(runner_pid))
def test_cwd_lsof(self):
"""
@@ -415,7 +415,7 @@ class TestSystem(unittest.TestCase):
call_mock.side_effect = call_replacement
runner_pid, tor_cwd = runner.get_pid(), runner.get_tor_cwd()
- self.assertEquals(tor_cwd, stem.util.system.cwd(runner_pid))
+ self.assertEqual(tor_cwd, stem.util.system.cwd(runner_pid))
def test_user_none(self):
"""
@@ -504,7 +504,7 @@ class TestSystem(unittest.TestCase):
properly).
"""
- self.assertEquals(0, stem.util.system.bsd_jail_id(99999))
+ self.assertEqual(0, stem.util.system.bsd_jail_id(99999))
def test_expand_path(self):
"""
@@ -524,15 +524,15 @@ class TestSystem(unittest.TestCase):
test.runner.skip(self, '(running as root)')
return
- self.assertEquals(os.getcwd(), stem.util.system.expand_path('.'))
- self.assertEquals(os.getcwd(), stem.util.system.expand_path('./'))
- self.assertEquals(os.path.join(os.getcwd(), 'foo'), stem.util.system.expand_path('./foo'))
+ self.assertEqual(os.getcwd(), stem.util.system.expand_path('.'))
+ self.assertEqual(os.getcwd(), stem.util.system.expand_path('./'))
+ self.assertEqual(os.path.join(os.getcwd(), 'foo'), stem.util.system.expand_path('./foo'))
home_dir, username = os.path.expanduser('~'), getpass.getuser()
- self.assertEquals(home_dir, stem.util.system.expand_path('~'))
- self.assertEquals(home_dir, stem.util.system.expand_path('~/'))
- self.assertEquals(home_dir, stem.util.system.expand_path('~%s' % username))
- self.assertEquals(os.path.join(home_dir, 'foo'), stem.util.system.expand_path('~%s/foo' % username))
+ self.assertEqual(home_dir, stem.util.system.expand_path('~'))
+ self.assertEqual(home_dir, stem.util.system.expand_path('~/'))
+ self.assertEqual(home_dir, stem.util.system.expand_path('~%s' % username))
+ self.assertEqual(os.path.join(home_dir, 'foo'), stem.util.system.expand_path('~%s/foo' % username))
def test_set_process_name(self):
"""
diff --git a/test/integ/version.py b/test/integ/version.py
index 7269ab1..0cd15eb 100644
--- a/test/integ/version.py
+++ b/test/integ/version.py
@@ -43,7 +43,7 @@ class TestVersion(unittest.TestCase):
runner = test.runner.get_runner()
system_tor_version = stem.version.get_system_tor_version(runner.get_tor_command())
- self.assertEquals(runner.get_tor_version(), system_tor_version)
+ self.assertEqual(runner.get_tor_version(), system_tor_version)
def test_getinfo_version_parsing(self):
"""
diff --git a/test/mocking.py b/test/mocking.py
index e3715c7..3d6ac16 100644
--- a/test/mocking.py
+++ b/test/mocking.py
@@ -204,8 +204,8 @@ def get_all_combinations(attr, include_empty = False):
yield ()
seen = set()
- for index in xrange(1, len(attr) + 1):
- product_arg = [attr for _ in xrange(index)]
+ for index in range(1, len(attr) + 1):
+ product_arg = [attr for _ in range(index)]
for item in itertools.product(*product_arg):
# deduplicate, sort, and only provide if we haven't seen it yet
@@ -323,7 +323,7 @@ def _get_descriptor_content(attr = None, exclude = (), header_template = (), foo
remainder = []
- for k, v in attr.items():
+ for k, v in list(attr.items()):
if v:
remainder.append('%s %s' % (k, v))
else:
@@ -605,7 +605,7 @@ def get_network_status_document_v3(attr = None, exclude = (), authorities = None
'consensus-method': '9',
}
- for k, v in extra_defaults.items():
+ for k, v in list(extra_defaults.items()):
if not (k in attr or (exclude and k in exclude)):
attr[k] = v
diff --git a/test/output.py b/test/output.py
index 1435b2f..8b4648f 100644
--- a/test/output.py
+++ b/test/output.py
@@ -62,7 +62,7 @@ def println(msg = '', *attr):
sys.stdout.write(msg)
sys.stdout.flush()
else:
- print msg
+ print(msg)
def print_divider(msg, is_header = False):
@@ -75,7 +75,7 @@ def print_logging(logging_buffer):
for entry in logging_buffer:
println(entry.replace('\n', '\n '), term.Color.MAGENTA)
- print
+ print()
def apply_filters(testing_output, *filters):
diff --git a/test/runner.py b/test/runner.py
index 1b55da3..ee261b7 100644
--- a/test/runner.py
+++ b/test/runner.py
@@ -199,7 +199,7 @@ def exercise_controller(test_case, controller):
else:
config_file_response = controller.msg('GETINFO config-file')
- test_case.assertEquals('config-file=%s\nOK' % torrc_path, str(config_file_response))
+ test_case.assertEqual('config-file=%s\nOK' % torrc_path, str(config_file_response))
def get_runner():
@@ -638,13 +638,13 @@ class Runner(object):
socket_dir = os.path.dirname(CONTROL_SOCKET_PATH)
println(' making control socket directory (%s)... ' % socket_dir, STATUS, NO_NL)
- if os.path.exists(socket_dir) and stat.S_IMODE(os.stat(socket_dir).st_mode) == 0700:
+ if os.path.exists(socket_dir) and stat.S_IMODE(os.stat(socket_dir).st_mode) == 0o700:
println('skipped', STATUS)
else:
if not os.path.exists(socket_dir):
os.makedirs(socket_dir)
- os.chmod(socket_dir, 0700)
+ os.chmod(socket_dir, 0o700)
println('done', STATUS)
except OSError as exc:
println('failed (%s)' % exc, ERROR)
diff --git a/test/unit/connection/connect.py b/test/unit/connection/connect.py
index 0cc5ee4..b342eb7 100644
--- a/test/unit/connection/connect.py
+++ b/test/unit/connection/connect.py
@@ -2,9 +2,13 @@
Unit tests for the stem.connection.connect function.
"""
-import StringIO
import unittest
+try:
+ from StringIO import StringIO
+except ImportError:
+ from io import StringIO
+
from mock import Mock, patch
import stem
@@ -13,7 +17,7 @@ import stem.socket
class TestConnect(unittest.TestCase):
- @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('sys.stdout', new_callable = StringIO)
@patch('stem.util.system.is_running')
@patch('os.path.exists', Mock(return_value = True))
@patch('stem.socket.ControlSocketFile', Mock(side_effect = stem.SocketError('failed')))
@@ -26,7 +30,7 @@ class TestConnect(unittest.TestCase):
is_running_mock.return_value = True
self._assert_connect_fails_with({}, stdout_mock, "Unable to connect to tor. Maybe it's running without a ControlPort?")
- @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('sys.stdout', new_callable = StringIO)
@patch('os.path.exists')
@patch('stem.util.system.is_running', Mock(return_value = True))
@patch('stem.socket.ControlSocketFile', Mock(side_effect = stem.SocketError('failed')))
@@ -114,7 +118,7 @@ class TestConnect(unittest.TestCase):
authenticate_mock.assert_any_call(control_socket, None, None)
authenticate_mock.assert_any_call(control_socket, 'my_password', None)
- @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('sys.stdout', new_callable = StringIO)
@patch('stem.connection.authenticate')
def test_auth_failure(self, authenticate_mock, stdout_mock):
control_socket = stem.socket.ControlPort(connect = False)
diff --git a/test/unit/control/controller.py b/test/unit/control/controller.py
index 58df2d4..3dd57d3 100644
--- a/test/unit/control/controller.py
+++ b/test/unit/control/controller.py
@@ -585,7 +585,7 @@ class TestControl(unittest.TestCase):
],
}
- for test_input, expected in pydoc_examples.items():
+ for test_input, expected in list(pydoc_examples.items()):
self.assertEqual(expected, _parse_circ_path(test_input))
# exercise with some invalid inputs
diff --git a/test/unit/descriptor/export.py b/test/unit/descriptor/export.py
index eca2200..7e9e01b 100644
--- a/test/unit/descriptor/export.py
+++ b/test/unit/descriptor/export.py
@@ -2,9 +2,13 @@
Unit tests for stem.descriptor.export.
"""
-import StringIO
import unittest
+try:
+ from StringIO import StringIO
+except ImportError:
+ from io import StringIO
+
import stem.prereq
import test.runner
@@ -31,11 +35,11 @@ class TestExport(unittest.TestCase):
desc_csv = export_csv(desc, included_fields = ('nickname', 'address', 'published'), header = False)
expected = 'caerSidi,71.35.133.197,2012-03-01 17:15:27\n'
- self.assertEquals(expected, desc_csv)
+ self.assertEqual(expected, desc_csv)
desc_csv = export_csv(desc, included_fields = ('nickname', 'address', 'published'), header = True)
expected = 'nickname,address,published\n' + expected
- self.assertEquals(expected, desc_csv)
+ self.assertEqual(expected, desc_csv)
def test_multiple_descriptors(self):
"""
@@ -62,7 +66,7 @@ class TestExport(unittest.TestCase):
desc = get_relay_server_descriptor()
desc_csv = export_csv(desc)
- csv_buffer = StringIO.StringIO()
+ csv_buffer = StringIO()
export_csv_file(csv_buffer, desc)
self.assertEqual(desc_csv, csv_buffer.getvalue())
@@ -88,8 +92,7 @@ class TestExport(unittest.TestCase):
"""
Exercises when we don't provide any descriptors.
"""
-
- self.assertEquals('', export_csv([]))
+ self.assertEqual('', export_csv([]))
def test_invalid_attributes(self):
"""
diff --git a/test/unit/descriptor/extrainfo_descriptor.py b/test/unit/descriptor/extrainfo_descriptor.py
index a8b0ed7..7e67019 100644
--- a/test/unit/descriptor/extrainfo_descriptor.py
+++ b/test/unit/descriptor/extrainfo_descriptor.py
@@ -29,36 +29,36 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
-----END SIGNATURE-----"""
desc = next(stem.descriptor.parse_file(descriptor_file, 'extra-info 1.0'))
- self.assertEquals('NINJA', desc.nickname)
- self.assertEquals('B2289C3EAB83ECD6EB916A2F481A02E6B76A0A48', desc.fingerprint)
- self.assertEquals(datetime.datetime(2012, 5, 5, 17, 3, 50), desc.published)
- self.assertEquals(datetime.datetime(2012, 5, 5, 17, 2, 45), desc.read_history_end)
- self.assertEquals(900, desc.read_history_interval)
- self.assertEquals(datetime.datetime(2012, 5, 5, 17, 2, 45), desc.write_history_end)
- self.assertEquals(900, desc.write_history_interval)
- self.assertEquals(datetime.datetime(2012, 5, 5, 17, 2, 45), desc.dir_read_history_end)
- self.assertEquals(900, desc.dir_read_history_interval)
- self.assertEquals(datetime.datetime(2012, 5, 5, 17, 2, 45), desc.dir_write_history_end)
- self.assertEquals(900, desc.dir_write_history_interval)
- self.assertEquals(expected_signature, desc.signature)
- self.assertEquals('00A57A9AAB5EA113898E2DD02A755E31AFC27227', desc.digest())
- self.assertEquals([], desc.get_unrecognized_lines())
+ self.assertEqual('NINJA', desc.nickname)
+ self.assertEqual('B2289C3EAB83ECD6EB916A2F481A02E6B76A0A48', desc.fingerprint)
+ self.assertEqual(datetime.datetime(2012, 5, 5, 17, 3, 50), desc.published)
+ self.assertEqual(datetime.datetime(2012, 5, 5, 17, 2, 45), desc.read_history_end)
+ self.assertEqual(900, desc.read_history_interval)
+ self.assertEqual(datetime.datetime(2012, 5, 5, 17, 2, 45), desc.write_history_end)
+ self.assertEqual(900, desc.write_history_interval)
+ self.assertEqual(datetime.datetime(2012, 5, 5, 17, 2, 45), desc.dir_read_history_end)
+ self.assertEqual(900, desc.dir_read_history_interval)
+ self.assertEqual(datetime.datetime(2012, 5, 5, 17, 2, 45), desc.dir_write_history_end)
+ self.assertEqual(900, desc.dir_write_history_interval)
+ self.assertEqual(expected_signature, desc.signature)
+ self.assertEqual('00A57A9AAB5EA113898E2DD02A755E31AFC27227', desc.digest())
+ self.assertEqual([], desc.get_unrecognized_lines())
# The read-history, write-history, dirreq-read-history, and
# dirreq-write-history lines are pretty long so just checking
# the initial contents for the line and parsed values.
read_values_start = [3309568, 9216, 41984, 27648, 123904]
- self.assertEquals(read_values_start, desc.read_history_values[:5])
+ self.assertEqual(read_values_start, desc.read_history_values[:5])
write_values_start = [1082368, 19456, 50176, 272384, 485376]
- self.assertEquals(write_values_start, desc.write_history_values[:5])
+ self.assertEqual(write_values_start, desc.write_history_values[:5])
dir_read_values_start = [0, 0, 0, 0, 33792, 27648, 48128]
- self.assertEquals(dir_read_values_start, desc.dir_read_history_values[:7])
+ self.assertEqual(dir_read_values_start, desc.dir_read_history_values[:7])
dir_write_values_start = [0, 0, 0, 227328, 349184, 382976, 738304]
- self.assertEquals(dir_write_values_start, desc.dir_write_history_values[:7])
+ self.assertEqual(dir_write_values_start, desc.dir_write_history_values[:7])
def test_metrics_bridge_descriptor(self):
"""
@@ -86,40 +86,40 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
}
desc = next(stem.descriptor.parse_file(descriptor_file, 'bridge-extra-info 1.0'))
- self.assertEquals('ec2bridgereaac65a3', desc.nickname)
- self.assertEquals('1EC248422B57D9C0BD751892FE787585407479A4', desc.fingerprint)
- self.assertEquals(datetime.datetime(2012, 6, 8, 2, 21, 27), desc.published)
- self.assertEquals(datetime.datetime(2012, 6, 8, 2, 10, 38), desc.read_history_end)
- self.assertEquals(900, desc.read_history_interval)
- self.assertEquals(datetime.datetime(2012, 6, 8, 2, 10, 38), desc.write_history_end)
- self.assertEquals(900, desc.write_history_interval)
- self.assertEquals(datetime.datetime(2012, 6, 8, 2, 10, 38), desc.dir_read_history_end)
- self.assertEquals(900, desc.dir_read_history_interval)
- self.assertEquals(datetime.datetime(2012, 6, 8, 2, 10, 38), desc.dir_write_history_end)
- self.assertEquals(900, desc.dir_write_history_interval)
- self.assertEquals('00A2AECCEAD3FEE033CFE29893387143146728EC', desc.digest())
- self.assertEquals([], desc.get_unrecognized_lines())
+ self.assertEqual('ec2bridgereaac65a3', desc.nickname)
+ self.assertEqual('1EC248422B57D9C0BD751892FE787585407479A4', desc.fingerprint)
+ self.assertEqual(datetime.datetime(2012, 6, 8, 2, 21, 27), desc.published)
+ self.assertEqual(datetime.datetime(2012, 6, 8, 2, 10, 38), desc.read_history_end)
+ self.assertEqual(900, desc.read_history_interval)
+ self.assertEqual(datetime.datetime(2012, 6, 8, 2, 10, 38), desc.write_history_end)
+ self.assertEqual(900, desc.write_history_interval)
+ self.assertEqual(datetime.datetime(2012, 6, 8, 2, 10, 38), desc.dir_read_history_end)
+ self.assertEqual(900, desc.dir_read_history_interval)
+ self.assertEqual(datetime.datetime(2012, 6, 8, 2, 10, 38), desc.dir_write_history_end)
+ self.assertEqual(900, desc.dir_write_history_interval)
+ self.assertEqual('00A2AECCEAD3FEE033CFE29893387143146728EC', desc.digest())
+ self.assertEqual([], desc.get_unrecognized_lines())
read_values_start = [337920, 437248, 3995648, 48726016]
- self.assertEquals(read_values_start, desc.read_history_values[:4])
+ self.assertEqual(read_values_start, desc.read_history_values[:4])
write_values_start = [343040, 991232, 5649408, 49548288]
- self.assertEquals(write_values_start, desc.write_history_values[:4])
+ self.assertEqual(write_values_start, desc.write_history_values[:4])
dir_read_values_start = [0, 71680, 99328, 25600]
- self.assertEquals(dir_read_values_start, desc.dir_read_history_values[:4])
+ self.assertEqual(dir_read_values_start, desc.dir_read_history_values[:4])
dir_write_values_start = [5120, 664576, 2419712, 578560]
- self.assertEquals(dir_write_values_start, desc.dir_write_history_values[:4])
+ self.assertEqual(dir_write_values_start, desc.dir_write_history_values[:4])
- self.assertEquals({}, desc.dir_v2_requests)
- self.assertEquals({}, desc.dir_v3_requests)
+ self.assertEqual({}, desc.dir_v2_requests)
+ self.assertEqual({}, desc.dir_v3_requests)
- self.assertEquals(expected_dir_v2_responses, desc.dir_v2_responses)
- self.assertEquals(expected_dir_v3_responses, desc.dir_v3_responses)
+ self.assertEqual(expected_dir_v2_responses, desc.dir_v2_responses)
+ self.assertEqual(expected_dir_v3_responses, desc.dir_v3_responses)
- self.assertEquals({}, desc.dir_v2_responses_unknown)
- self.assertEquals({}, desc.dir_v2_responses_unknown)
+ self.assertEqual({}, desc.dir_v2_responses_unknown)
+ self.assertEqual({}, desc.dir_v2_responses_unknown)
def test_minimal_extrainfo_descriptor(self):
"""
@@ -129,8 +129,8 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
desc = get_relay_extrainfo_descriptor()
- self.assertEquals('ninja', desc.nickname)
- self.assertEquals('B2289C3EAB83ECD6EB916A2F481A02E6B76A0A48', desc.fingerprint)
+ self.assertEqual('ninja', desc.nickname)
+ self.assertEqual('B2289C3EAB83ECD6EB916A2F481A02E6B76A0A48', desc.fingerprint)
self.assertTrue(CRYPTO_BLOB in desc.signature)
def test_unrecognized_line(self):
@@ -139,7 +139,7 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
"""
desc = get_relay_extrainfo_descriptor({'pepperjack': 'is oh so tasty!'})
- self.assertEquals(['pepperjack is oh so tasty!'], desc.get_unrecognized_lines())
+ self.assertEqual(['pepperjack is oh so tasty!'], desc.get_unrecognized_lines())
def test_proceeding_line(self):
"""
@@ -174,8 +174,8 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
for entry in test_entries:
desc_text = get_relay_extrainfo_descriptor({'extra-info': entry}, content = True)
desc = self._expect_invalid_attr(desc_text, 'nickname')
- self.assertEquals(None, desc.nickname)
- self.assertEquals(None, desc.fingerprint)
+ self.assertEqual(None, desc.nickname)
+ self.assertEqual(None, desc.fingerprint)
def test_geoip_db_digest(self):
"""
@@ -185,10 +185,10 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
geoip_db_digest = '916A3CA8B7DF61473D5AE5B21711F35F301CE9E8'
desc = get_relay_extrainfo_descriptor({'geoip-db-digest': geoip_db_digest})
- self.assertEquals(geoip_db_digest, desc.geoip_db_digest)
+ self.assertEqual(geoip_db_digest, desc.geoip_db_digest)
desc = get_relay_extrainfo_descriptor({'geoip6-db-digest': geoip_db_digest})
- self.assertEquals(geoip_db_digest, desc.geoip6_db_digest)
+ self.assertEqual(geoip_db_digest, desc.geoip6_db_digest)
test_entries = (
'',
@@ -217,7 +217,7 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
for entry in ('0', '11', '25'):
desc = get_relay_extrainfo_descriptor({'cell-circuits-per-decile': entry})
- self.assertEquals(int(entry), desc.cell_circuits_per_decile)
+ self.assertEqual(int(entry), desc.cell_circuits_per_decile)
test_entries = (
'',
@@ -242,11 +242,11 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
test_value = 'ok=0,unavailable=0,not-found=984,not-modified=0,something-new=7'
desc = get_relay_extrainfo_descriptor({keyword: test_value})
- self.assertEquals(0, getattr(desc, attr)[DirResponse.OK])
- self.assertEquals(0, getattr(desc, attr)[DirResponse.UNAVAILABLE])
- self.assertEquals(984, getattr(desc, attr)[DirResponse.NOT_FOUND])
- self.assertEquals(0, getattr(desc, attr)[DirResponse.NOT_MODIFIED])
- self.assertEquals(7, getattr(desc, unknown_attr)['something-new'])
+ self.assertEqual(0, getattr(desc, attr)[DirResponse.OK])
+ self.assertEqual(0, getattr(desc, attr)[DirResponse.UNAVAILABLE])
+ self.assertEqual(984, getattr(desc, attr)[DirResponse.NOT_FOUND])
+ self.assertEqual(0, getattr(desc, attr)[DirResponse.NOT_MODIFIED])
+ self.assertEqual(7, getattr(desc, unknown_attr)['something-new'])
test_entries = (
'ok=-4',
@@ -272,23 +272,23 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
test_value = 'complete=2712,timeout=32,running=4,min=741,d1=14507,d2=22702,q1=28881,d3=38277,d4=73729,md=111455,d6=168231,d7=257218,q3=319833,d8=390507,d9=616301,something-new=11,max=29917857'
desc = get_relay_extrainfo_descriptor({keyword: test_value})
- self.assertEquals(2712, getattr(desc, attr)[DirStat.COMPLETE])
- self.assertEquals(32, getattr(desc, attr)[DirStat.TIMEOUT])
- self.assertEquals(4, getattr(desc, attr)[DirStat.RUNNING])
- self.assertEquals(741, getattr(desc, attr)[DirStat.MIN])
- self.assertEquals(14507, getattr(desc, attr)[DirStat.D1])
- self.assertEquals(22702, getattr(desc, attr)[DirStat.D2])
- self.assertEquals(28881, getattr(desc, attr)[DirStat.Q1])
- self.assertEquals(38277, getattr(desc, attr)[DirStat.D3])
- self.assertEquals(73729, getattr(desc, attr)[DirStat.D4])
- self.assertEquals(111455, getattr(desc, attr)[DirStat.MD])
- self.assertEquals(168231, getattr(desc, attr)[DirStat.D6])
- self.assertEquals(257218, getattr(desc, attr)[DirStat.D7])
- self.assertEquals(319833, getattr(desc, attr)[DirStat.Q3])
- self.assertEquals(390507, getattr(desc, attr)[DirStat.D8])
- self.assertEquals(616301, getattr(desc, attr)[DirStat.D9])
- self.assertEquals(29917857, getattr(desc, attr)[DirStat.MAX])
- self.assertEquals(11, getattr(desc, unknown_attr)['something-new'])
+ self.assertEqual(2712, getattr(desc, attr)[DirStat.COMPLETE])
+ self.assertEqual(32, getattr(desc, attr)[DirStat.TIMEOUT])
+ self.assertEqual(4, getattr(desc, attr)[DirStat.RUNNING])
+ self.assertEqual(741, getattr(desc, attr)[DirStat.MIN])
+ self.assertEqual(14507, getattr(desc, attr)[DirStat.D1])
+ self.assertEqual(22702, getattr(desc, attr)[DirStat.D2])
+ self.assertEqual(28881, getattr(desc, attr)[DirStat.Q1])
+ self.assertEqual(38277, getattr(desc, attr)[DirStat.D3])
+ self.assertEqual(73729, getattr(desc, attr)[DirStat.D4])
+ self.assertEqual(111455, getattr(desc, attr)[DirStat.MD])
+ self.assertEqual(168231, getattr(desc, attr)[DirStat.D6])
+ self.assertEqual(257218, getattr(desc, attr)[DirStat.D7])
+ self.assertEqual(319833, getattr(desc, attr)[DirStat.Q3])
+ self.assertEqual(390507, getattr(desc, attr)[DirStat.D8])
+ self.assertEqual(616301, getattr(desc, attr)[DirStat.D9])
+ self.assertEqual(29917857, getattr(desc, attr)[DirStat.MAX])
+ self.assertEqual(11, getattr(desc, unknown_attr)['something-new'])
test_entries = (
'complete=-4',
@@ -308,12 +308,12 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
"""
desc = get_relay_extrainfo_descriptor({'conn-bi-direct': '2012-05-03 12:07:50 (500 s) 277431,12089,0,2134'})
- self.assertEquals(datetime.datetime(2012, 5, 3, 12, 7, 50), desc.conn_bi_direct_end)
- self.assertEquals(500, desc.conn_bi_direct_interval)
- self.assertEquals(277431, desc.conn_bi_direct_below)
- self.assertEquals(12089, desc.conn_bi_direct_read)
- self.assertEquals(0, desc.conn_bi_direct_write)
- self.assertEquals(2134, desc.conn_bi_direct_both)
+ self.assertEqual(datetime.datetime(2012, 5, 3, 12, 7, 50), desc.conn_bi_direct_end)
+ self.assertEqual(500, desc.conn_bi_direct_interval)
+ self.assertEqual(277431, desc.conn_bi_direct_below)
+ self.assertEqual(12089, desc.conn_bi_direct_read)
+ self.assertEqual(0, desc.conn_bi_direct_write)
+ self.assertEqual(2134, desc.conn_bi_direct_both)
test_entries = (
'',
@@ -332,12 +332,12 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
for entry in test_entries:
desc_text = get_relay_extrainfo_descriptor({'conn-bi-direct': entry}, content = True)
desc = self._expect_invalid_attr(desc_text)
- self.assertEquals(None, desc.conn_bi_direct_end)
- self.assertEquals(None, desc.conn_bi_direct_interval)
- self.assertEquals(None, desc.conn_bi_direct_below)
- self.assertEquals(None, desc.conn_bi_direct_read)
- self.assertEquals(None, desc.conn_bi_direct_write)
- self.assertEquals(None, desc.conn_bi_direct_both)
+ self.assertEqual(None, desc.conn_bi_direct_end)
+ self.assertEqual(None, desc.conn_bi_direct_interval)
+ self.assertEqual(None, desc.conn_bi_direct_below)
+ self.assertEqual(None, desc.conn_bi_direct_read)
+ self.assertEqual(None, desc.conn_bi_direct_write)
+ self.assertEqual(None, desc.conn_bi_direct_both)
def test_percentage_lines(self):
"""
@@ -357,7 +357,7 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
for test_value, expected_value in test_entries:
desc = get_relay_extrainfo_descriptor({keyword: test_value})
- self.assertEquals(expected_value, getattr(desc, attr))
+ self.assertEqual(expected_value, getattr(desc, attr))
test_entries = (
('', None),
@@ -388,7 +388,7 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
for test_value, expected_value in test_entries:
desc = get_relay_extrainfo_descriptor({keyword: test_value})
- self.assertEquals(expected_value, getattr(desc, attr))
+ self.assertEqual(expected_value, getattr(desc, attr))
test_entries = (
(',,11', [11.0]),
@@ -410,7 +410,7 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
attr = keyword.replace('-', '_')
desc = get_relay_extrainfo_descriptor({keyword: '2012-05-03 12:07:50'})
- self.assertEquals(datetime.datetime(2012, 5, 3, 12, 7, 50), getattr(desc, attr))
+ self.assertEqual(datetime.datetime(2012, 5, 3, 12, 7, 50), getattr(desc, attr))
test_entries = (
'',
@@ -434,8 +434,8 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
interval_attr = end_attr[:-4] + '_interval'
desc = get_relay_extrainfo_descriptor({keyword: '2012-05-03 12:07:50 (500 s)'})
- self.assertEquals(datetime.datetime(2012, 5, 3, 12, 7, 50), getattr(desc, end_attr))
- self.assertEquals(500, getattr(desc, interval_attr))
+ self.assertEqual(datetime.datetime(2012, 5, 3, 12, 7, 50), getattr(desc, end_attr))
+ self.assertEqual(500, getattr(desc, interval_attr))
test_entries = (
'',
@@ -450,8 +450,8 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
for entry in test_entries:
desc_text = get_relay_extrainfo_descriptor({keyword: entry}, content = True)
desc = self._expect_invalid_attr(desc_text)
- self.assertEquals(None, getattr(desc, end_attr))
- self.assertEquals(None, getattr(desc, interval_attr))
+ self.assertEqual(None, getattr(desc, end_attr))
+ self.assertEqual(None, getattr(desc, interval_attr))
def test_timestamp_interval_and_value_lines(self):
"""
@@ -473,9 +473,9 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
for test_values, expected_values in test_entries:
desc = get_relay_extrainfo_descriptor({keyword: '2012-05-03 12:07:50 (500 s)%s' % test_values})
- self.assertEquals(datetime.datetime(2012, 5, 3, 12, 7, 50), getattr(desc, end_attr))
- self.assertEquals(500, getattr(desc, interval_attr))
- self.assertEquals(expected_values, getattr(desc, values_attr))
+ self.assertEqual(datetime.datetime(2012, 5, 3, 12, 7, 50), getattr(desc, end_attr))
+ self.assertEqual(500, getattr(desc, interval_attr))
+ self.assertEqual(expected_values, getattr(desc, values_attr))
test_entries = (
'',
@@ -491,9 +491,9 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
for entry in test_entries:
desc_text = get_relay_extrainfo_descriptor({keyword: entry}, content = True)
desc = self._expect_invalid_attr(desc_text)
- self.assertEquals(None, getattr(desc, end_attr))
- self.assertEquals(None, getattr(desc, interval_attr))
- self.assertEquals(None, getattr(desc, values_attr))
+ self.assertEqual(None, getattr(desc, end_attr))
+ self.assertEqual(None, getattr(desc, interval_attr))
+ self.assertEqual(None, getattr(desc, values_attr))
def test_port_mapping_lines(self):
"""
@@ -512,7 +512,7 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
for test_value, expected_value in test_entries:
desc = get_relay_extrainfo_descriptor({keyword: test_value})
- self.assertEquals(expected_value, getattr(desc, attr))
+ self.assertEqual(expected_value, getattr(desc, attr))
test_entries = (
'8000000=115533759',
@@ -543,7 +543,7 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
for test_value, expected_value in test_entries:
desc = get_relay_extrainfo_descriptor({keyword: test_value})
- self.assertEquals(expected_value, getattr(desc, attr))
+ self.assertEqual(expected_value, getattr(desc, attr))
test_entries = (
'uk=-4',
@@ -563,10 +563,10 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
desc = get_bridge_extrainfo_descriptor()
- self.assertEquals('ec2bridgereaac65a3', desc.nickname)
- self.assertEquals('1EC248422B57D9C0BD751892FE787585407479A4', desc.fingerprint)
- self.assertEquals('006FD96BA35E7785A6A3B8B75FE2E2435A13BDB4', desc.digest())
- self.assertEquals([], desc.get_unrecognized_lines())
+ self.assertEqual('ec2bridgereaac65a3', desc.nickname)
+ self.assertEqual('1EC248422B57D9C0BD751892FE787585407479A4', desc.fingerprint)
+ self.assertEqual('006FD96BA35E7785A6A3B8B75FE2E2435A13BDB4', desc.digest())
+ self.assertEqual([], desc.get_unrecognized_lines())
# check that we don't have crypto fields
self.assertRaises(AttributeError, getattr, desc, 'signature')
@@ -577,10 +577,10 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
"""
desc = get_bridge_extrainfo_descriptor({'bridge-ip-versions': 'v4=16,v6=40'})
- self.assertEquals({'v4': 16, 'v6': 40}, desc.ip_versions)
+ self.assertEqual({'v4': 16, 'v6': 40}, desc.ip_versions)
desc = get_bridge_extrainfo_descriptor({'bridge-ip-versions': ''})
- self.assertEquals({}, desc.ip_versions)
+ self.assertEqual({}, desc.ip_versions)
desc_text = get_bridge_extrainfo_descriptor({'bridge-ip-versions': 'v4=24.5'}, content = True)
self.assertRaises(ValueError, RelayExtraInfoDescriptor, desc_text)
@@ -591,10 +591,10 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
"""
desc = get_bridge_extrainfo_descriptor({'bridge-ip-transports': '<OR>=16,<??>=40'})
- self.assertEquals({'<OR>': 16, '<??>': 40}, desc.ip_transports)
+ self.assertEqual({'<OR>': 16, '<??>': 40}, desc.ip_transports)
desc = get_bridge_extrainfo_descriptor({'bridge-ip-transports': ''})
- self.assertEquals({}, desc.ip_transports)
+ self.assertEqual({}, desc.ip_transports)
desc_text = get_bridge_extrainfo_descriptor({'bridge-ip-transports': '<OR>=24.5'}, content = True)
self.assertRaises(ValueError, RelayExtraInfoDescriptor, desc_text)
@@ -605,17 +605,17 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
"""
desc = get_bridge_extrainfo_descriptor({'transport': 'obfs3'})
- self.assertEquals({'obfs3': (None, None, None)}, desc.transport)
- self.assertEquals([], desc.get_unrecognized_lines())
+ self.assertEqual({'obfs3': (None, None, None)}, desc.transport)
+ self.assertEqual([], desc.get_unrecognized_lines())
desc = get_relay_extrainfo_descriptor({'transport': 'obfs2 83.212.96.201:33570'})
- self.assertEquals({'obfs2': ('83.212.96.201', 33570, [])}, desc.transport)
- self.assertEquals([], desc.get_unrecognized_lines())
+ self.assertEqual({'obfs2': ('83.212.96.201', 33570, [])}, desc.transport)
+ self.assertEqual([], desc.get_unrecognized_lines())
# multiple transport lines
desc = get_bridge_extrainfo_descriptor({'transport': 'obfs3\ntransport obfs4'})
- self.assertEquals({'obfs3': (None, None, None), 'obfs4': (None, None, None)}, desc.transport)
- self.assertEquals([], desc.get_unrecognized_lines())
+ self.assertEqual({'obfs3': (None, None, None), 'obfs4': (None, None, None)}, desc.transport)
+ self.assertEqual([], desc.get_unrecognized_lines())
def _expect_invalid_attr(self, desc_text, attr = None, expected_value = None):
"""
@@ -631,9 +631,9 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
# check that the invalid attribute matches the expected value when
# constructed without validation
- self.assertEquals(expected_value, getattr(desc, attr))
+ self.assertEqual(expected_value, getattr(desc, attr))
else:
# check a default attribute
- self.assertEquals('ninja', desc.nickname)
+ self.assertEqual('ninja', desc.nickname)
return desc
diff --git a/test/unit/descriptor/microdescriptor.py b/test/unit/descriptor/microdescriptor.py
index 267b01a..5635d54 100644
--- a/test/unit/descriptor/microdescriptor.py
+++ b/test/unit/descriptor/microdescriptor.py
@@ -54,31 +54,31 @@ class TestMicrodescriptor(unittest.TestCase):
descriptors = stem.descriptor.parse_file(descriptor_file, 'microdescriptor 1.0')
router = next(descriptors)
- self.assertEquals(FIRST_ONION_KEY, router.onion_key)
- self.assertEquals(None, router.ntor_onion_key)
- self.assertEquals([], router.or_addresses)
- self.assertEquals([], router.family)
- self.assertEquals(stem.exit_policy.MicroExitPolicy('reject 1-65535'), router.exit_policy)
- self.assertEquals({b'@last-listed': b'2013-02-24 00:18:36'}, router.get_annotations())
- self.assertEquals([b'@last-listed 2013-02-24 00:18:36'], router.get_annotation_lines())
+ self.assertEqual(FIRST_ONION_KEY, router.onion_key)
+ self.assertEqual(None, router.ntor_onion_key)
+ self.assertEqual([], router.or_addresses)
+ self.assertEqual([], router.family)
+ self.assertEqual(stem.exit_policy.MicroExitPolicy('reject 1-65535'), router.exit_policy)
+ self.assertEqual({b'@last-listed': b'2013-02-24 00:18:36'}, router.get_annotations())
+ self.assertEqual([b'@last-listed 2013-02-24 00:18:36'], router.get_annotation_lines())
router = next(descriptors)
- self.assertEquals(SECOND_ONION_KEY, router.onion_key)
- self.assertEquals(u'r5572HzD+PMPBbXlZwBhsm6YEbxnYgis8vhZ1jmdI2k=', router.ntor_onion_key)
- self.assertEquals([], router.or_addresses)
- self.assertEquals(['$6141629FA0D15A6AEAEF3A1BEB76E64C767B3174'], router.family)
- self.assertEquals(stem.exit_policy.MicroExitPolicy('reject 1-65535'), router.exit_policy)
- self.assertEquals({b'@last-listed': b'2013-02-24 00:18:37'}, router.get_annotations())
- self.assertEquals([b'@last-listed 2013-02-24 00:18:37'], router.get_annotation_lines())
+ self.assertEqual(SECOND_ONION_KEY, router.onion_key)
+ self.assertEqual(u'r5572HzD+PMPBbXlZwBhsm6YEbxnYgis8vhZ1jmdI2k=', router.ntor_onion_key)
+ self.assertEqual([], router.or_addresses)
+ self.assertEqual(['$6141629FA0D15A6AEAEF3A1BEB76E64C767B3174'], router.family)
+ self.assertEqual(stem.exit_policy.MicroExitPolicy('reject 1-65535'), router.exit_policy)
+ self.assertEqual({b'@last-listed': b'2013-02-24 00:18:37'}, router.get_annotations())
+ self.assertEqual([b'@last-listed 2013-02-24 00:18:37'], router.get_annotation_lines())
router = next(descriptors)
- self.assertEquals(THIRD_ONION_KEY, router.onion_key)
- self.assertEquals(None, router.ntor_onion_key)
- self.assertEquals([(u'2001:6b0:7:125::242', 9001, True)], router.or_addresses)
- self.assertEquals([], router.family)
- self.assertEquals(stem.exit_policy.MicroExitPolicy('accept 80,443'), router.exit_policy)
- self.assertEquals({b'@last-listed': b'2013-02-24 00:18:36'}, router.get_annotations())
- self.assertEquals([b'@last-listed 2013-02-24 00:18:36'], router.get_annotation_lines())
+ self.assertEqual(THIRD_ONION_KEY, router.onion_key)
+ self.assertEqual(None, router.ntor_onion_key)
+ self.assertEqual([(u'2001:6b0:7:125::242', 9001, True)], router.or_addresses)
+ self.assertEqual([], router.family)
+ self.assertEqual(stem.exit_policy.MicroExitPolicy('accept 80,443'), router.exit_policy)
+ self.assertEqual({b'@last-listed': b'2013-02-24 00:18:36'}, router.get_annotations())
+ self.assertEqual([b'@last-listed 2013-02-24 00:18:36'], router.get_annotation_lines())
def test_minimal_microdescriptor(self):
"""
@@ -89,14 +89,14 @@ class TestMicrodescriptor(unittest.TestCase):
desc = get_microdescriptor()
self.assertTrue(CRYPTO_BLOB in desc.onion_key)
- self.assertEquals(None, desc.ntor_onion_key)
- self.assertEquals([], desc.or_addresses)
- self.assertEquals([], desc.family)
- self.assertEquals(stem.exit_policy.MicroExitPolicy('reject 1-65535'), desc.exit_policy)
- self.assertEquals(None, desc.exit_policy_v6)
- self.assertEquals(None, desc.identifier_type)
- self.assertEquals(None, desc.identifier)
- self.assertEquals([], desc.get_unrecognized_lines())
+ self.assertEqual(None, desc.ntor_onion_key)
+ self.assertEqual([], desc.or_addresses)
+ self.assertEqual([], desc.family)
+ self.assertEqual(stem.exit_policy.MicroExitPolicy('reject 1-65535'), desc.exit_policy)
+ self.assertEqual(None, desc.exit_policy_v6)
+ self.assertEqual(None, desc.identifier_type)
+ self.assertEqual(None, desc.identifier)
+ self.assertEqual([], desc.get_unrecognized_lines())
def test_unrecognized_line(self):
"""
@@ -104,7 +104,7 @@ class TestMicrodescriptor(unittest.TestCase):
"""
desc = get_microdescriptor({'pepperjack': 'is oh so tasty!'})
- self.assertEquals(['pepperjack is oh so tasty!'], desc.get_unrecognized_lines())
+ self.assertEqual(['pepperjack is oh so tasty!'], desc.get_unrecognized_lines())
def test_proceeding_line(self):
"""
@@ -115,7 +115,7 @@ class TestMicrodescriptor(unittest.TestCase):
self.assertRaises(ValueError, Microdescriptor, desc_text)
desc = Microdescriptor(desc_text, validate = False)
- self.assertEquals(['Amunet1'], desc.family)
+ self.assertEqual(['Amunet1'], desc.family)
def test_a_line(self):
"""
@@ -132,7 +132,7 @@ class TestMicrodescriptor(unittest.TestCase):
]
desc = Microdescriptor(desc_text)
- self.assertEquals(expected, desc.or_addresses)
+ self.assertEqual(expected, desc.or_addresses)
def test_family(self):
"""
@@ -140,7 +140,7 @@ class TestMicrodescriptor(unittest.TestCase):
"""
desc = get_microdescriptor({'family': 'Amunet1 Amunet2 Amunet3'})
- self.assertEquals(['Amunet1', 'Amunet2', 'Amunet3'], desc.family)
+ self.assertEqual(['Amunet1', 'Amunet2', 'Amunet3'], desc.family)
# try multiple family lines
@@ -152,7 +152,7 @@ class TestMicrodescriptor(unittest.TestCase):
# family entries will overwrite each other
desc = Microdescriptor(desc_text, validate = False)
- self.assertEquals(1, len(desc.family))
+ self.assertEqual(1, len(desc.family))
def test_exit_policy(self):
"""
@@ -161,7 +161,7 @@ class TestMicrodescriptor(unittest.TestCase):
"""
desc = get_microdescriptor({'p': 'accept 80,110,143,443'})
- self.assertEquals(stem.exit_policy.MicroExitPolicy('accept 80,110,143,443'), desc.exit_policy)
+ self.assertEqual(stem.exit_policy.MicroExitPolicy('accept 80,110,143,443'), desc.exit_policy)
def test_identifier(self):
"""
@@ -169,5 +169,5 @@ class TestMicrodescriptor(unittest.TestCase):
"""
desc = get_microdescriptor({'id': 'rsa1024 Cd47okjCHD83YGzThGBDptXs9Z4'})
- self.assertEquals('rsa1024', desc.identifier_type)
- self.assertEquals('Cd47okjCHD83YGzThGBDptXs9Z4', desc.identifier)
+ self.assertEqual('rsa1024', desc.identifier_type)
+ self.assertEqual('Cd47okjCHD83YGzThGBDptXs9Z4', desc.identifier)
diff --git a/test/unit/descriptor/networkstatus/bridge_document.py b/test/unit/descriptor/networkstatus/bridge_document.py
index a45e802..2ec2a22 100644
--- a/test/unit/descriptor/networkstatus/bridge_document.py
+++ b/test/unit/descriptor/networkstatus/bridge_document.py
@@ -34,13 +34,13 @@ class TestBridgeNetworkStatusDocument(unittest.TestCase):
with open(consensus_path, 'rb') as descriptor_file:
router = next(stem.descriptor.parse_file(descriptor_file))
- self.assertEquals('Unnamed', router.nickname)
- self.assertEquals('0014A2055278DB3EB0E59EA701741416AF185558', router.fingerprint)
- self.assertEquals('148EF8685B8D259650AE0967D1FF8E6A870C7743', router.digest)
- self.assertEquals(datetime.datetime(2012, 5, 31, 15, 57, 0), router.published)
- self.assertEquals('10.97.236.247', router.address)
- self.assertEquals(443, router.or_port)
- self.assertEquals(None, router.dir_port)
+ self.assertEqual('Unnamed', router.nickname)
+ self.assertEqual('0014A2055278DB3EB0E59EA701741416AF185558', router.fingerprint)
+ self.assertEqual('148EF8685B8D259650AE0967D1FF8E6A870C7743', router.digest)
+ self.assertEqual(datetime.datetime(2012, 5, 31, 15, 57, 0), router.published)
+ self.assertEqual('10.97.236.247', router.address)
+ self.assertEqual(443, router.or_port)
+ self.assertEqual(None, router.dir_port)
def test_metrics_cert(self):
"""
@@ -80,17 +80,17 @@ GM9hAsAMRX9Ogqhq5UjDNqEsvDKuyVeyh7unSZEOip9Zr6K/+7VsVPNb8vfBRBjo
with open(cert_path, 'rb') as cert_file:
cert = next(stem.descriptor.parse_file(cert_file))
- self.assertEquals(3, cert.version)
- self.assertEquals(None, cert.address)
- self.assertEquals(None, cert.dir_port)
- self.assertEquals('14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4', cert.fingerprint)
- self.assertEquals(expected_identity_key, cert.identity_key)
- self.assertEquals(datetime.datetime(2008, 5, 9, 21, 13, 26), cert.published)
- self.assertEquals(datetime.datetime(2009, 5, 9, 21, 13, 26), cert.expires)
- self.assertEquals(expected_signing_key, cert.signing_key)
- self.assertEquals(None, cert.crosscert)
- self.assertEquals(expected_key_cert, cert.certification)
- self.assertEquals([], cert.get_unrecognized_lines())
+ self.assertEqual(3, cert.version)
+ self.assertEqual(None, cert.address)
+ self.assertEqual(None, cert.dir_port)
+ self.assertEqual('14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4', cert.fingerprint)
+ self.assertEqual(expected_identity_key, cert.identity_key)
+ self.assertEqual(datetime.datetime(2008, 5, 9, 21, 13, 26), cert.published)
+ self.assertEqual(datetime.datetime(2009, 5, 9, 21, 13, 26), cert.expires)
+ self.assertEqual(expected_signing_key, cert.signing_key)
+ self.assertEqual(None, cert.crosscert)
+ self.assertEqual(expected_key_cert, cert.certification)
+ self.assertEqual([], cert.get_unrecognized_lines())
def test_empty_document(self):
"""
@@ -111,5 +111,5 @@ GM9hAsAMRX9Ogqhq5UjDNqEsvDKuyVeyh7unSZEOip9Zr6K/+7VsVPNb8vfBRBjo
self.assertEqual(datetime.datetime(2012, 6, 1, 4, 7, 4), document.published)
self.assertEqual(2, len(document.routers))
- self.assertEqual(set(['Unnamed', 'TolFuin']), set([desc.nickname for desc in document.routers.values()]))
+ self.assertEqual(set(['Unnamed', 'TolFuin']), set([desc.nickname for desc in list(document.routers.values())]))
self.assertEqual([], document.get_unrecognized_lines())
diff --git a/test/unit/descriptor/networkstatus/directory_authority.py b/test/unit/descriptor/networkstatus/directory_authority.py
index dd769f7..1114518 100644
--- a/test/unit/descriptor/networkstatus/directory_authority.py
+++ b/test/unit/descriptor/networkstatus/directory_authority.py
@@ -55,7 +55,7 @@ class TestDirectoryAuthority(unittest.TestCase):
"""
authority = get_directory_authority({'pepperjack': 'is oh so tasty!'})
- self.assertEquals(['pepperjack is oh so tasty!'], authority.get_unrecognized_lines())
+ self.assertEqual(['pepperjack is oh so tasty!'], authority.get_unrecognized_lines())
def test_legacy_authority(self):
"""
diff --git a/test/unit/descriptor/networkstatus/document_v2.py b/test/unit/descriptor/networkstatus/document_v2.py
index 7ecea87..54cbccc 100644
--- a/test/unit/descriptor/networkstatus/document_v2.py
+++ b/test/unit/descriptor/networkstatus/document_v2.py
@@ -34,59 +34,59 @@ TpQQk3nNQF8z6UIvdlvP+DnJV4izWVkQEZgUZgIVM0E=
descriptor_file.readline() # strip header
document = stem.descriptor.networkstatus.NetworkStatusDocumentV2(descriptor_file.read())
- self.assertEquals(2, document.version)
- self.assertEquals('18.244.0.114', document.hostname)
- self.assertEquals('18.244.0.114', document.address)
- self.assertEquals(80, document.dir_port)
- self.assertEquals('719BE45DE224B607C53707D0E2143E2D423E74CF', document.fingerprint)
- self.assertEquals('arma at mit dot edu', document.contact)
- self.assertEquals(expected_signing_key, document.signing_key)
-
- self.assertEquals(67, len(document.client_versions))
- self.assertEquals('0.0.9rc2', document.client_versions[0])
- self.assertEquals('0.1.1.10-alpha-cvs', document.client_versions[-1])
-
- self.assertEquals(67, len(document.server_versions))
- self.assertEquals('0.0.9rc2', document.server_versions[0])
- self.assertEquals('0.1.1.10-alpha-cvs', document.server_versions[-1])
-
- self.assertEquals(datetime.datetime(2005, 12, 16, 0, 13, 46), document.published)
- self.assertEquals(['Names', 'Versions'], document.options)
- self.assertEquals('moria2', document.signing_authority)
- self.assertEquals(expected_signature, document.signature)
- self.assertEquals([], document.get_unrecognized_lines())
+ self.assertEqual(2, document.version)
+ self.assertEqual('18.244.0.114', document.hostname)
+ self.assertEqual('18.244.0.114', document.address)
+ self.assertEqual(80, document.dir_port)
+ self.assertEqual('719BE45DE224B607C53707D0E2143E2D423E74CF', document.fingerprint)
+ self.assertEqual('arma at mit dot edu', document.contact)
+ self.assertEqual(expected_signing_key, document.signing_key)
+
+ self.assertEqual(67, len(document.client_versions))
+ self.assertEqual('0.0.9rc2', document.client_versions[0])
+ self.assertEqual('0.1.1.10-alpha-cvs', document.client_versions[-1])
+
+ self.assertEqual(67, len(document.server_versions))
+ self.assertEqual('0.0.9rc2', document.server_versions[0])
+ self.assertEqual('0.1.1.10-alpha-cvs', document.server_versions[-1])
+
+ self.assertEqual(datetime.datetime(2005, 12, 16, 0, 13, 46), document.published)
+ self.assertEqual(['Names', 'Versions'], document.options)
+ self.assertEqual('moria2', document.signing_authority)
+ self.assertEqual(expected_signature, document.signature)
+ self.assertEqual([], document.get_unrecognized_lines())
self.assertEqual(3, len(document.routers))
router1 = document.routers['719BE45DE224B607C53707D0E2143E2D423E74CF']
- self.assertEquals('moria2', router1.nickname)
- self.assertEquals('719BE45DE224B607C53707D0E2143E2D423E74CF', router1.fingerprint)
- self.assertEquals('B7F3F0975B87889DD1285FD57A1B1BB617F65432', router1.digest)
- self.assertEquals(datetime.datetime(2005, 12, 15, 6, 57, 18), router1.published)
- self.assertEquals('18.244.0.114', router1.address)
- self.assertEquals(443, router1.or_port)
- self.assertEquals(80, router1.dir_port)
- self.assertEquals(set(['Authority', 'Fast', 'Named', 'Running', 'Valid', 'V2Dir']), set(router1.flags))
+ self.assertEqual('moria2', router1.nickname)
+ self.assertEqual('719BE45DE224B607C53707D0E2143E2D423E74CF', router1.fingerprint)
+ self.assertEqual('B7F3F0975B87889DD1285FD57A1B1BB617F65432', router1.digest)
+ self.assertEqual(datetime.datetime(2005, 12, 15, 6, 57, 18), router1.published)
+ self.assertEqual('18.244.0.114', router1.address)
+ self.assertEqual(443, router1.or_port)
+ self.assertEqual(80, router1.dir_port)
+ self.assertEqual(set(['Authority', 'Fast', 'Named', 'Running', 'Valid', 'V2Dir']), set(router1.flags))
router2 = document.routers['0928BA467056C4A689FEE4EF5D71482B6289C3D5']
- self.assertEquals('stnv', router2.nickname)
- self.assertEquals('0928BA467056C4A689FEE4EF5D71482B6289C3D5', router2.fingerprint)
- self.assertEquals('22D1A7ED4199BDA7ED6C416EECD769C18E1F2A5A', router2.digest)
- self.assertEquals(datetime.datetime(2005, 12, 15, 16, 24, 42), router2.published)
- self.assertEquals('84.16.236.173', router2.address)
- self.assertEquals(9001, router2.or_port)
- self.assertEquals(None, router2.dir_port)
- self.assertEquals(set(['Named', 'Valid']), set(router2.flags))
+ self.assertEqual('stnv', router2.nickname)
+ self.assertEqual('0928BA467056C4A689FEE4EF5D71482B6289C3D5', router2.fingerprint)
+ self.assertEqual('22D1A7ED4199BDA7ED6C416EECD769C18E1F2A5A', router2.digest)
+ self.assertEqual(datetime.datetime(2005, 12, 15, 16, 24, 42), router2.published)
+ self.assertEqual('84.16.236.173', router2.address)
+ self.assertEqual(9001, router2.or_port)
+ self.assertEqual(None, router2.dir_port)
+ self.assertEqual(set(['Named', 'Valid']), set(router2.flags))
router3 = document.routers['09E8582FF0E6F85E2B8E41C0DC0B9C9DC46E6968']
- self.assertEquals('nggrplz', router3.nickname)
- self.assertEquals('09E8582FF0E6F85E2B8E41C0DC0B9C9DC46E6968', router3.fingerprint)
- self.assertEquals('B302C2B01C94F398E3EF38939526B0651F824DD6', router3.digest)
- self.assertEquals(datetime.datetime(2005, 12, 15, 23, 25, 50), router3.published)
- self.assertEquals('194.109.109.109', router3.address)
- self.assertEquals(9001, router3.or_port)
- self.assertEquals(None, router3.dir_port)
- self.assertEquals(set(['Fast', 'Stable', 'Running', 'Valid']), set(router3.flags))
+ self.assertEqual('nggrplz', router3.nickname)
+ self.assertEqual('09E8582FF0E6F85E2B8E41C0DC0B9C9DC46E6968', router3.fingerprint)
+ self.assertEqual('B302C2B01C94F398E3EF38939526B0651F824DD6', router3.digest)
+ self.assertEqual(datetime.datetime(2005, 12, 15, 23, 25, 50), router3.published)
+ self.assertEqual('194.109.109.109', router3.address)
+ self.assertEqual(9001, router3.or_port)
+ self.assertEqual(None, router3.dir_port)
+ self.assertEqual(set(['Fast', 'Stable', 'Running', 'Valid']), set(router3.flags))
def test_minimal_document(self):
"""
@@ -95,17 +95,17 @@ TpQQk3nNQF8z6UIvdlvP+DnJV4izWVkQEZgUZgIVM0E=
document = get_network_status_document_v2()
- self.assertEquals({}, document.routers)
- self.assertEquals(2, document.version)
- self.assertEquals('18.244.0.114', document.hostname)
- self.assertEquals('18.244.0.114', document.address)
- self.assertEquals(80, document.dir_port)
- self.assertEquals('719BE45DE224B607C53707D0E2143E2D423E74CF', document.fingerprint)
- self.assertEquals('arma at mit dot edu', document.contact)
- self.assertEquals(NETWORK_STATUS_DOCUMENT_HEADER_V2[5][1][1:], document.signing_key)
- self.assertEquals([], document.client_versions)
- self.assertEquals([], document.server_versions)
- self.assertEquals(datetime.datetime(2005, 12, 16, 0, 13, 46), document.published)
- self.assertEquals([], document.options)
- self.assertEquals('moria2', document.signing_authority)
- self.assertEquals(NETWORK_STATUS_DOCUMENT_FOOTER_V2[0][1][7:], document.signature)
+ self.assertEqual({}, document.routers)
+ self.assertEqual(2, document.version)
+ self.assertEqual('18.244.0.114', document.hostname)
+ self.assertEqual('18.244.0.114', document.address)
+ self.assertEqual(80, document.dir_port)
+ self.assertEqual('719BE45DE224B607C53707D0E2143E2D423E74CF', document.fingerprint)
+ self.assertEqual('arma at mit dot edu', document.contact)
+ self.assertEqual(NETWORK_STATUS_DOCUMENT_HEADER_V2[5][1][1:], document.signing_key)
+ self.assertEqual([], document.client_versions)
+ self.assertEqual([], document.server_versions)
+ self.assertEqual(datetime.datetime(2005, 12, 16, 0, 13, 46), document.published)
+ self.assertEqual([], document.options)
+ self.assertEqual('moria2', document.signing_authority)
+ self.assertEqual(NETWORK_STATUS_DOCUMENT_FOOTER_V2[0][1][7:], document.signature)
diff --git a/test/unit/descriptor/networkstatus/document_v3.py b/test/unit/descriptor/networkstatus/document_v3.py
index 261a70f..63a72f0 100644
--- a/test/unit/descriptor/networkstatus/document_v3.py
+++ b/test/unit/descriptor/networkstatus/document_v3.py
@@ -62,13 +62,13 @@ class TestNetworkStatusDocument(unittest.TestCase):
descriptors = stem.descriptor.parse_file(descriptor_file)
router = next(descriptors)
- self.assertEquals('sumkledi', router.nickname)
- self.assertEquals('0013D22389CD50D0B784A3E4061CB31E8CE8CEB5', router.fingerprint)
- self.assertEquals('F260ABF1297B445E04354E236F4159140FF7768F', router.digest)
- self.assertEquals(datetime.datetime(2012, 7, 12, 4, 1, 55), router.published)
- self.assertEquals('178.218.213.229', router.address)
- self.assertEquals(80, router.or_port)
- self.assertEquals(None, router.dir_port)
+ self.assertEqual('sumkledi', router.nickname)
+ self.assertEqual('0013D22389CD50D0B784A3E4061CB31E8CE8CEB5', router.fingerprint)
+ self.assertEqual('F260ABF1297B445E04354E236F4159140FF7768F', router.digest)
+ self.assertEqual(datetime.datetime(2012, 7, 12, 4, 1, 55), router.published)
+ self.assertEqual('178.218.213.229', router.address)
+ self.assertEqual(80, router.or_port)
+ self.assertEqual(None, router.dir_port)
def test_consensus_v3(self):
"""
@@ -112,56 +112,56 @@ I/TJmV928na7RLZe2mGHCAW3VQOvV+QkCfj05VZ8CsY=
with open(get_resource('cached-consensus'), 'rb') as descriptor_file:
document = stem.descriptor.networkstatus.NetworkStatusDocumentV3(descriptor_file.read(), default_params = False)
- self.assertEquals(3, document.version)
- self.assertEquals(None, document.version_flavor)
- self.assertEquals(True, document.is_consensus)
- self.assertEquals(False, document.is_vote)
- self.assertEquals(False, document.is_microdescriptor)
- self.assertEquals(datetime.datetime(2012, 7, 12, 10, 0, 0), document.valid_after)
- self.assertEquals(datetime.datetime(2012, 7, 12, 11, 0, 0), document.fresh_until)
- self.assertEquals(datetime.datetime(2012, 7, 12, 13, 0, 0), document.valid_until)
- self.assertEquals(300, document.vote_delay)
- self.assertEquals(300, document.dist_delay)
- self.assertEquals(expected_versions, document.client_versions)
- self.assertEquals(expected_versions, document.server_versions)
- self.assertEquals(expected_flags, set(document.known_flags))
- self.assertEquals({'CircuitPriorityHalflifeMsec': 30000, 'bwauthpid': 1}, document.params)
-
- self.assertEquals(12, document.consensus_method)
- self.assertEquals(expected_bandwidth_weights, document.bandwidth_weights)
- self.assertEquals([], document.consensus_methods)
- self.assertEquals(None, document.published)
- self.assertEquals([], document.get_unrecognized_lines())
+ self.assertEqual(3, document.version)
+ self.assertEqual(None, document.version_flavor)
+ self.assertEqual(True, document.is_consensus)
+ self.assertEqual(False, document.is_vote)
+ self.assertEqual(False, document.is_microdescriptor)
+ self.assertEqual(datetime.datetime(2012, 7, 12, 10, 0, 0), document.valid_after)
+ self.assertEqual(datetime.datetime(2012, 7, 12, 11, 0, 0), document.fresh_until)
+ self.assertEqual(datetime.datetime(2012, 7, 12, 13, 0, 0), document.valid_until)
+ self.assertEqual(300, document.vote_delay)
+ self.assertEqual(300, document.dist_delay)
+ self.assertEqual(expected_versions, document.client_versions)
+ self.assertEqual(expected_versions, document.server_versions)
+ self.assertEqual(expected_flags, set(document.known_flags))
+ self.assertEqual({'CircuitPriorityHalflifeMsec': 30000, 'bwauthpid': 1}, document.params)
+
+ self.assertEqual(12, document.consensus_method)
+ self.assertEqual(expected_bandwidth_weights, document.bandwidth_weights)
+ self.assertEqual([], document.consensus_methods)
+ self.assertEqual(None, document.published)
+ self.assertEqual([], document.get_unrecognized_lines())
router = document.routers['0013D22389CD50D0B784A3E4061CB31E8CE8CEB5']
- self.assertEquals('sumkledi', router.nickname)
- self.assertEquals('0013D22389CD50D0B784A3E4061CB31E8CE8CEB5', router.fingerprint)
- self.assertEquals('F260ABF1297B445E04354E236F4159140FF7768F', router.digest)
- self.assertEquals(datetime.datetime(2012, 7, 12, 4, 1, 55), router.published)
- self.assertEquals('178.218.213.229', router.address)
- self.assertEquals(80, router.or_port)
- self.assertEquals(None, router.dir_port)
- self.assertEquals(set(['Exit', 'Fast', 'Named', 'Running', 'Valid']), set(router.flags))
+ self.assertEqual('sumkledi', router.nickname)
+ self.assertEqual('0013D22389CD50D0B784A3E4061CB31E8CE8CEB5', router.fingerprint)
+ self.assertEqual('F260ABF1297B445E04354E236F4159140FF7768F', router.digest)
+ self.assertEqual(datetime.datetime(2012, 7, 12, 4, 1, 55), router.published)
+ self.assertEqual('178.218.213.229', router.address)
+ self.assertEqual(80, router.or_port)
+ self.assertEqual(None, router.dir_port)
+ self.assertEqual(set(['Exit', 'Fast', 'Named', 'Running', 'Valid']), set(router.flags))
authority = document.directory_authorities[0]
- self.assertEquals(8, len(document.directory_authorities))
- self.assertEquals('tor26', authority.nickname)
- self.assertEquals('14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4', authority.fingerprint)
- self.assertEquals('86.59.21.38', authority.hostname)
- self.assertEquals('86.59.21.38', authority.address)
- self.assertEquals(80, authority.dir_port)
- self.assertEquals(443, authority.or_port)
- self.assertEquals('Peter Palfrader', authority.contact)
- self.assertEquals('0B6D1E9A300B895AA2D0B427F92917B6995C3C1C', authority.vote_digest)
- self.assertEquals(None, authority.legacy_dir_key)
- self.assertEquals(None, authority.key_certificate)
+ self.assertEqual(8, len(document.directory_authorities))
+ self.assertEqual('tor26', authority.nickname)
+ self.assertEqual('14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4', authority.fingerprint)
+ self.assertEqual('86.59.21.38', authority.hostname)
+ self.assertEqual('86.59.21.38', authority.address)
+ self.assertEqual(80, authority.dir_port)
+ self.assertEqual(443, authority.or_port)
+ self.assertEqual('Peter Palfrader', authority.contact)
+ self.assertEqual('0B6D1E9A300B895AA2D0B427F92917B6995C3C1C', authority.vote_digest)
+ self.assertEqual(None, authority.legacy_dir_key)
+ self.assertEqual(None, authority.key_certificate)
signature = document.signatures[0]
- self.assertEquals(8, len(document.signatures))
- self.assertEquals('sha1', signature.method)
- self.assertEquals('14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4', signature.identity)
- self.assertEquals('BF112F1C6D5543CFD0A32215ACABD4197B5279AD', signature.key_digest)
- self.assertEquals(expected_signature, signature.signature)
+ self.assertEqual(8, len(document.signatures))
+ self.assertEqual('sha1', signature.method)
+ self.assertEqual('14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4', signature.identity)
+ self.assertEqual('BF112F1C6D5543CFD0A32215ACABD4197B5279AD', signature.key_digest)
+ self.assertEqual(expected_signature, signature.signature)
def test_metrics_vote(self):
"""
@@ -174,13 +174,13 @@ I/TJmV928na7RLZe2mGHCAW3VQOvV+QkCfj05VZ8CsY=
descriptors = stem.descriptor.parse_file(descriptor_file)
router = next(descriptors)
- self.assertEquals('sumkledi', router.nickname)
- self.assertEquals('0013D22389CD50D0B784A3E4061CB31E8CE8CEB5', router.fingerprint)
- self.assertEquals('0799F806200B005F01E40A9A7F1A21C988AE8FB1', router.digest)
- self.assertEquals(datetime.datetime(2012, 7, 11, 4, 22, 53), router.published)
- self.assertEquals('178.218.213.229', router.address)
- self.assertEquals(80, router.or_port)
- self.assertEquals(None, router.dir_port)
+ self.assertEqual('sumkledi', router.nickname)
+ self.assertEqual('0013D22389CD50D0B784A3E4061CB31E8CE8CEB5', router.fingerprint)
+ self.assertEqual('0799F806200B005F01E40A9A7F1A21C988AE8FB1', router.digest)
+ self.assertEqual(datetime.datetime(2012, 7, 11, 4, 22, 53), router.published)
+ self.assertEqual('178.218.213.229', router.address)
+ self.assertEqual(80, router.or_port)
+ self.assertEqual(None, router.dir_port)
def test_vote(self):
"""
@@ -235,66 +235,66 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
with open(get_resource('vote'), 'rb') as descriptor_file:
document = stem.descriptor.networkstatus.NetworkStatusDocumentV3(descriptor_file.read(), default_params = False)
- self.assertEquals(3, document.version)
- self.assertEquals(None, document.version_flavor)
- self.assertEquals(False, document.is_consensus)
- self.assertEquals(True, document.is_vote)
- self.assertEquals(False, document.is_microdescriptor)
- self.assertEquals(datetime.datetime(2012, 7, 12, 0, 0, 0), document.valid_after)
- self.assertEquals(datetime.datetime(2012, 7, 12, 1, 0, 0), document.fresh_until)
- self.assertEquals(datetime.datetime(2012, 7, 12, 3, 0, 0), document.valid_until)
- self.assertEquals(300, document.vote_delay)
- self.assertEquals(300, document.dist_delay)
- self.assertEquals([], document.client_versions)
- self.assertEquals([], document.server_versions)
- self.assertEquals(expected_flags, set(document.known_flags))
- self.assertEquals({'CircuitPriorityHalflifeMsec': 30000, 'bwauthpid': 1}, document.params)
-
- self.assertEquals(None, document.consensus_method)
- self.assertEquals({}, document.bandwidth_weights)
- self.assertEquals(range(1, 13), document.consensus_methods)
- self.assertEquals(datetime.datetime(2012, 7, 11, 23, 50, 1), document.published)
- self.assertEquals([], document.get_unrecognized_lines())
+ self.assertEqual(3, document.version)
+ self.assertEqual(None, document.version_flavor)
+ self.assertEqual(False, document.is_consensus)
+ self.assertEqual(True, document.is_vote)
+ self.assertEqual(False, document.is_microdescriptor)
+ self.assertEqual(datetime.datetime(2012, 7, 12, 0, 0, 0), document.valid_after)
+ self.assertEqual(datetime.datetime(2012, 7, 12, 1, 0, 0), document.fresh_until)
+ self.assertEqual(datetime.datetime(2012, 7, 12, 3, 0, 0), document.valid_until)
+ self.assertEqual(300, document.vote_delay)
+ self.assertEqual(300, document.dist_delay)
+ self.assertEqual([], document.client_versions)
+ self.assertEqual([], document.server_versions)
+ self.assertEqual(expected_flags, set(document.known_flags))
+ self.assertEqual({'CircuitPriorityHalflifeMsec': 30000, 'bwauthpid': 1}, document.params)
+
+ self.assertEqual(None, document.consensus_method)
+ self.assertEqual({}, document.bandwidth_weights)
+ self.assertEqual(list(range(1, 13)), document.consensus_methods)
+ self.assertEqual(datetime.datetime(2012, 7, 11, 23, 50, 1), document.published)
+ self.assertEqual([], document.get_unrecognized_lines())
router = document.routers['0013D22389CD50D0B784A3E4061CB31E8CE8CEB5']
- self.assertEquals('sumkledi', router.nickname)
- self.assertEquals('0013D22389CD50D0B784A3E4061CB31E8CE8CEB5', router.fingerprint)
- self.assertEquals('0799F806200B005F01E40A9A7F1A21C988AE8FB1', router.digest)
- self.assertEquals(datetime.datetime(2012, 7, 11, 4, 22, 53), router.published)
- self.assertEquals('178.218.213.229', router.address)
- self.assertEquals(80, router.or_port)
- self.assertEquals(None, router.dir_port)
+ self.assertEqual('sumkledi', router.nickname)
+ self.assertEqual('0013D22389CD50D0B784A3E4061CB31E8CE8CEB5', router.fingerprint)
+ self.assertEqual('0799F806200B005F01E40A9A7F1A21C988AE8FB1', router.digest)
+ self.assertEqual(datetime.datetime(2012, 7, 11, 4, 22, 53), router.published)
+ self.assertEqual('178.218.213.229', router.address)
+ self.assertEqual(80, router.or_port)
+ self.assertEqual(None, router.dir_port)
authority = document.directory_authorities[0]
- self.assertEquals(1, len(document.directory_authorities))
- self.assertEquals('turtles', authority.nickname)
- self.assertEquals('27B6B5996C426270A5C95488AA5BCEB6BCC86956', authority.fingerprint)
- self.assertEquals('76.73.17.194', authority.hostname)
- self.assertEquals('76.73.17.194', authority.address)
- self.assertEquals(9030, authority.dir_port)
- self.assertEquals(9090, authority.or_port)
- self.assertEquals('Mike Perry <email>', authority.contact)
- self.assertEquals(None, authority.vote_digest)
- self.assertEquals(None, authority.legacy_dir_key)
+ self.assertEqual(1, len(document.directory_authorities))
+ self.assertEqual('turtles', authority.nickname)
+ self.assertEqual('27B6B5996C426270A5C95488AA5BCEB6BCC86956', authority.fingerprint)
+ self.assertEqual('76.73.17.194', authority.hostname)
+ self.assertEqual('76.73.17.194', authority.address)
+ self.assertEqual(9030, authority.dir_port)
+ self.assertEqual(9090, authority.or_port)
+ self.assertEqual('Mike Perry <email>', authority.contact)
+ self.assertEqual(None, authority.vote_digest)
+ self.assertEqual(None, authority.legacy_dir_key)
certificate = authority.key_certificate
- self.assertEquals(3, certificate.version)
- self.assertEquals(None, certificate.address)
- self.assertEquals(None, certificate.dir_port)
- self.assertEquals('27B6B5996C426270A5C95488AA5BCEB6BCC86956', certificate.fingerprint)
- self.assertEquals(expected_identity_key, certificate.identity_key)
- self.assertEquals(datetime.datetime(2011, 11, 28, 21, 51, 4), certificate.published)
- self.assertEquals(datetime.datetime(2012, 11, 28, 21, 51, 4), certificate.expires)
- self.assertEquals(expected_signing_key, certificate.signing_key)
- self.assertEquals(expected_key_crosscert, certificate.crosscert)
- self.assertEquals(expected_key_certification, certificate.certification)
+ self.assertEqual(3, certificate.version)
+ self.assertEqual(None, certificate.address)
+ self.assertEqual(None, certificate.dir_port)
+ self.assertEqual('27B6B5996C426270A5C95488AA5BCEB6BCC86956', certificate.fingerprint)
+ self.assertEqual(expected_identity_key, certificate.identity_key)
+ self.assertEqual(datetime.datetime(2011, 11, 28, 21, 51, 4), certificate.published)
+ self.assertEqual(datetime.datetime(2012, 11, 28, 21, 51, 4), certificate.expires)
+ self.assertEqual(expected_signing_key, certificate.signing_key)
+ self.assertEqual(expected_key_crosscert, certificate.crosscert)
+ self.assertEqual(expected_key_certification, certificate.certification)
signature = document.signatures[0]
- self.assertEquals(1, len(document.signatures))
- self.assertEquals('sha1', signature.method)
- self.assertEquals('27B6B5996C426270A5C95488AA5BCEB6BCC86956', signature.identity)
- self.assertEquals('D5C30C15BB3F1DA27669C2D88439939E8F418FCF', signature.key_digest)
- self.assertEquals(expected_signature, signature.signature)
+ self.assertEqual(1, len(document.signatures))
+ self.assertEqual('sha1', signature.method)
+ self.assertEqual('27B6B5996C426270A5C95488AA5BCEB6BCC86956', signature.identity)
+ self.assertEqual('D5C30C15BB3F1DA27669C2D88439939E8F418FCF', signature.key_digest)
+ self.assertEqual(expected_signature, signature.signature)
def test_minimal_consensus(self):
"""
@@ -382,7 +382,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
consensus = NetworkStatusDocumentV3(consensus_file.read())
consensus_file.close()
- for router in consensus.routers.values():
+ for router in list(consensus.routers.values()):
self.assertEqual('caerSidi', router.nickname)
# second example: using stem.descriptor.parse_file
@@ -435,9 +435,9 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
descriptor_file = io.BytesIO(content)
entries = list(_parse_file(descriptor_file))
- self.assertEquals(entry1, entries[0])
- self.assertEquals(entry2, entries[1])
- self.assertEquals(expected_document, entries[0].document)
+ self.assertEqual(entry1, entries[0])
+ self.assertEqual(entry2, entries[1])
+ self.assertEqual(expected_document, entries[0].document)
def test_missing_fields(self):
"""
@@ -461,7 +461,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
"""
document = get_network_status_document_v3({'pepperjack': 'is oh so tasty!'})
- self.assertEquals(['pepperjack is oh so tasty!'], document.get_unrecognized_lines())
+ self.assertEqual(['pepperjack is oh so tasty!'], document.get_unrecognized_lines())
def test_misordered_fields(self):
"""
@@ -472,7 +472,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
attr = {'vote-status': 'consensus'} if is_consensus else {'vote-status': 'vote'}
lines = get_network_status_document_v3(attr, content = True).split(b'\n')
- for index in xrange(len(lines) - 1):
+ for index in range(len(lines) - 1):
# once we reach the authority entry or later we're done since swapping
# those won't be detected
@@ -526,22 +526,22 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
"""
document = get_network_status_document_v3({'network-status-version': '3'})
- self.assertEquals(3, document.version)
- self.assertEquals(None, document.version_flavor)
- self.assertEquals(False, document.is_microdescriptor)
+ self.assertEqual(3, document.version)
+ self.assertEqual(None, document.version_flavor)
+ self.assertEqual(False, document.is_microdescriptor)
document = get_network_status_document_v3({'network-status-version': '3 microdesc'})
- self.assertEquals(3, document.version)
- self.assertEquals('microdesc', document.version_flavor)
- self.assertEquals(True, document.is_microdescriptor)
+ self.assertEqual(3, document.version)
+ self.assertEqual('microdesc', document.version_flavor)
+ self.assertEqual(True, document.is_microdescriptor)
content = get_network_status_document_v3({'network-status-version': '4'}, content = True)
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False)
- self.assertEquals(4, document.version)
- self.assertEquals(None, document.version_flavor)
- self.assertEquals(False, document.is_microdescriptor)
+ self.assertEqual(4, document.version)
+ self.assertEqual(None, document.version_flavor)
+ self.assertEqual(False, document.is_microdescriptor)
def test_vote_status(self):
"""
@@ -549,13 +549,13 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
"""
document = get_network_status_document_v3({'vote-status': 'vote'})
- self.assertEquals(False, document.is_consensus)
- self.assertEquals(True, document.is_vote)
+ self.assertEqual(False, document.is_consensus)
+ self.assertEqual(True, document.is_vote)
content = get_network_status_document_v3({'vote-status': 'consensus'}, content = True)
document = NetworkStatusDocumentV3(content)
- self.assertEquals(True, document.is_consensus)
- self.assertEquals(False, document.is_vote)
+ self.assertEqual(True, document.is_consensus)
+ self.assertEqual(False, document.is_vote)
test_values = (
'',
@@ -568,8 +568,8 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False)
- self.assertEquals(True, document.is_consensus)
- self.assertEquals(False, document.is_vote)
+ self.assertEqual(True, document.is_consensus)
+ self.assertEqual(False, document.is_vote)
def test_consensus_methods(self):
"""
@@ -577,13 +577,13 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
"""
document = get_network_status_document_v3({'vote-status': 'vote', 'consensus-methods': '12 3 1 780'})
- self.assertEquals([12, 3, 1, 780], document.consensus_methods)
+ self.assertEqual([12, 3, 1, 780], document.consensus_methods)
# check that we default to including consensus-method 1
content = get_network_status_document_v3({'vote-status': 'vote'}, ('consensus-methods',), content = True)
document = NetworkStatusDocumentV3(content, False)
- self.assertEquals([1], document.consensus_methods)
- self.assertEquals(None, document.consensus_method)
+ self.assertEqual([1], document.consensus_methods)
+ self.assertEqual(None, document.consensus_method)
test_values = (
('', []),
@@ -598,7 +598,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False)
- self.assertEquals(expected_consensus_methods, document.consensus_methods)
+ self.assertEqual(expected_consensus_methods, document.consensus_methods)
def test_consensus_method(self):
"""
@@ -606,13 +606,13 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
"""
document = get_network_status_document_v3({'consensus-method': '12'})
- self.assertEquals(12, document.consensus_method)
+ self.assertEqual(12, document.consensus_method)
# check that we default to being consensus-method 1
content = get_network_status_document_v3(exclude = ('consensus-method',), content = True)
document = NetworkStatusDocumentV3(content, False)
- self.assertEquals(1, document.consensus_method)
- self.assertEquals([], document.consensus_methods)
+ self.assertEqual(1, document.consensus_method)
+ self.assertEqual([], document.consensus_methods)
test_values = (
'',
@@ -627,7 +627,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False)
- self.assertEquals(1, document.consensus_method)
+ self.assertEqual(1, document.consensus_method)
def test_time_fields(self):
"""
@@ -646,10 +646,10 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
'valid-until': test_value,
})
- self.assertEquals(expected, document.published)
- self.assertEquals(expected, document.valid_after)
- self.assertEquals(expected, document.fresh_until)
- self.assertEquals(expected, document.valid_until)
+ self.assertEqual(expected, document.published)
+ self.assertEqual(expected, document.valid_after)
+ self.assertEqual(expected, document.fresh_until)
+ self.assertEqual(expected, document.valid_until)
test_values = (
'',
@@ -667,7 +667,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False)
- self.assertEquals(None, getattr(document, attr))
+ self.assertEqual(None, getattr(document, attr))
def test_voting_delay(self):
"""
@@ -675,8 +675,8 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
"""
document = get_network_status_document_v3({'voting-delay': '12 345'})
- self.assertEquals(12, document.vote_delay)
- self.assertEquals(345, document.dist_delay)
+ self.assertEqual(12, document.vote_delay)
+ self.assertEqual(345, document.dist_delay)
test_values = (
'',
@@ -691,8 +691,8 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False)
- self.assertEquals(None, document.vote_delay)
- self.assertEquals(None, document.dist_delay)
+ self.assertEqual(None, document.vote_delay)
+ self.assertEqual(None, document.dist_delay)
def test_version_lists(self):
"""
@@ -704,8 +704,8 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
test_value = '1.2.3.4,56.789.12.34-alpha'
document = get_network_status_document_v3({'client-versions': test_value, 'server-versions': test_value})
- self.assertEquals(expected, document.client_versions)
- self.assertEquals(expected, document.server_versions)
+ self.assertEqual(expected, document.client_versions)
+ self.assertEqual(expected, document.server_versions)
test_values = (
('', []),
@@ -722,7 +722,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False)
- self.assertEquals(expected_value, getattr(document, attr))
+ self.assertEqual(expected_value, getattr(document, attr))
def test_known_flags(self):
"""
@@ -742,7 +742,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
for test_value, expected_value in test_values:
document = get_network_status_document_v3({'known-flags': test_value})
- self.assertEquals(expected_value, document.known_flags)
+ self.assertEqual(expected_value, document.known_flags)
def test_flag_thresholds(self):
"""
@@ -758,7 +758,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
for test_value, expected_value in test_values:
document = get_network_status_document_v3({'vote-status': 'vote', 'flag-thresholds': test_value})
- self.assertEquals(expected_value, document.flag_thresholds)
+ self.assertEqual(expected_value, document.flag_thresholds)
# parses a full entry found in an actual vote
@@ -776,7 +776,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
}
document = get_network_status_document_v3({'vote-status': 'vote', 'flag-thresholds': full_line})
- self.assertEquals(expected_value, document.flag_thresholds)
+ self.assertEqual(expected_value, document.flag_thresholds)
test_values = (
'stable-uptime 693369', # not a key=value mapping
@@ -790,7 +790,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False)
- self.assertEquals({}, document.flag_thresholds)
+ self.assertEqual({}, document.flag_thresholds)
def test_params(self):
"""
@@ -798,18 +798,18 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
"""
document = get_network_status_document_v3({'params': 'CircuitPriorityHalflifeMsec=30000 bwauthpid=1 unrecognized=-122'})
- self.assertEquals(30000, document.params['CircuitPriorityHalflifeMsec'])
- self.assertEquals(1, document.params['bwauthpid'])
- self.assertEquals(-122, document.params['unrecognized'])
+ self.assertEqual(30000, document.params['CircuitPriorityHalflifeMsec'])
+ self.assertEqual(1, document.params['bwauthpid'])
+ self.assertEqual(-122, document.params['unrecognized'])
# empty params line
content = get_network_status_document_v3({'params': ''}, content = True)
document = NetworkStatusDocumentV3(content, default_params = True)
- self.assertEquals(DEFAULT_PARAMS, document.params)
+ self.assertEqual(DEFAULT_PARAMS, document.params)
content = get_network_status_document_v3({'params': ''}, content = True)
document = NetworkStatusDocumentV3(content, default_params = False)
- self.assertEquals({}, document.params)
+ self.assertEqual({}, document.params)
def test_params_malformed(self):
"""
@@ -828,7 +828,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False)
- self.assertEquals(DEFAULT_PARAMS, document.params)
+ self.assertEqual(DEFAULT_PARAMS, document.params)
def test_params_range(self):
"""
@@ -861,7 +861,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False, default_params = False)
- self.assertEquals(expected_value, document.params)
+ self.assertEqual(expected_value, document.params)
def test_params_misordered(self):
"""
@@ -872,7 +872,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False, default_params = False)
- self.assertEquals({'unrecognized': -122, 'bwauthpid': 1}, document.params)
+ self.assertEqual({'unrecognized': -122, 'bwauthpid': 1}, document.params)
def test_footer_consensus_method_requirement(self):
"""
@@ -936,7 +936,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
expected[key] = index - 5
document = get_network_status_document_v3({'bandwidth-weights': ' '.join(weight_entries)})
- self.assertEquals(expected, document.bandwidth_weights)
+ self.assertEqual(expected, document.bandwidth_weights)
def test_bandwidth_wights_malformed(self):
"""
@@ -959,7 +959,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False)
- self.assertEquals(expected, document.bandwidth_weights)
+ self.assertEqual(expected, document.bandwidth_weights)
def test_bandwidth_wights_misordered(self):
"""
@@ -973,7 +973,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False)
- self.assertEquals(expected, document.bandwidth_weights)
+ self.assertEqual(expected, document.bandwidth_weights)
def test_bandwidth_wights_in_vote(self):
"""
@@ -987,7 +987,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False)
- self.assertEquals(expected, document.bandwidth_weights)
+ self.assertEqual(expected, document.bandwidth_weights)
def test_microdescriptor_signature(self):
"""
@@ -1024,7 +1024,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
)
for test_value in test_values:
- for test_attr in xrange(3):
+ for test_attr in range(3):
attrs = [DOC_SIG.identity, DOC_SIG.key_digest, DOC_SIG.signature]
attrs[test_attr] = test_value
@@ -1047,8 +1047,8 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
document = get_network_status_document_v3(routers = (entry1, entry2))
- self.assertTrue(entry1 in document.routers.values())
- self.assertTrue(entry2 in document.routers.values())
+ self.assertTrue(entry1 in list(document.routers.values()))
+ self.assertTrue(entry2 in list(document.routers.values()))
# try with an invalid RouterStatusEntry
@@ -1057,7 +1057,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False)
- self.assertEquals([entry3], document.routers.values())
+ self.assertEqual([entry3], list(document.routers.values()))
# try including with a microdescriptor consensus
@@ -1065,7 +1065,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False)
- self.assertEqual([RouterStatusEntryMicroV3(str(entry1), False)], document.routers.values())
+ self.assertEqual([RouterStatusEntryMicroV3(str(entry1), False)], list(document.routers.values()))
def test_with_microdescriptor_router_status_entries(self):
"""
@@ -1081,8 +1081,8 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
document = get_network_status_document_v3({'network-status-version': '3 microdesc'}, routers = (entry1, entry2))
- self.assertTrue(entry1 in document.routers.values())
- self.assertTrue(entry2 in document.routers.values())
+ self.assertTrue(entry1 in list(document.routers.values()))
+ self.assertTrue(entry2 in list(document.routers.values()))
# try with an invalid RouterStatusEntry
@@ -1092,7 +1092,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False)
- self.assertEquals([entry3], document.routers.values())
+ self.assertEqual([entry3], list(document.routers.values()))
# try including microdescriptor entry in a normal consensus
@@ -1100,7 +1100,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, False)
- self.assertEqual([RouterStatusEntryV3(str(entry1), False)], document.routers.values())
+ self.assertEqual([RouterStatusEntryV3(str(entry1), False)], list(document.routers.values()))
def test_with_directory_authorities(self):
"""
@@ -1124,12 +1124,12 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
else:
document = NetworkStatusDocumentV3(content)
- self.assertEquals((authority1, authority2), document.directory_authorities)
+ self.assertEqual((authority1, authority2), document.directory_authorities)
else:
# authority votes in a consensus or consensus authorities in a vote
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, validate = False)
- self.assertEquals((authority1, authority2), document.directory_authorities)
+ self.assertEqual((authority1, authority2), document.directory_authorities)
def test_with_legacy_directory_authorities(self):
"""
@@ -1144,7 +1144,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
document = get_network_status_document_v3({'vote-status': 'consensus'}, authorities = (authority1, authority2, authority3))
- self.assertEquals((authority1, authority2, authority3), document.directory_authorities)
+ self.assertEqual((authority1, authority2, authority3), document.directory_authorities)
def test_authority_validation_flag_propagation(self):
"""
@@ -1162,4 +1162,4 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
self.assertRaises(ValueError, NetworkStatusDocumentV3, content)
document = NetworkStatusDocumentV3(content, validate = False)
- self.assertEquals((authority,), document.directory_authorities)
+ self.assertEqual((authority,), document.directory_authorities)
diff --git a/test/unit/descriptor/networkstatus/key_certificate.py b/test/unit/descriptor/networkstatus/key_certificate.py
index 8d0e828..8939c7e 100644
--- a/test/unit/descriptor/networkstatus/key_certificate.py
+++ b/test/unit/descriptor/networkstatus/key_certificate.py
@@ -41,7 +41,7 @@ class TestKeyCertificate(unittest.TestCase):
"""
certificate = get_key_certificate({'pepperjack': 'is oh so tasty!'})
- self.assertEquals(['pepperjack is oh so tasty!'], certificate.get_unrecognized_lines())
+ self.assertEqual(['pepperjack is oh so tasty!'], certificate.get_unrecognized_lines())
def test_first_and_last_lines(self):
"""
@@ -92,15 +92,15 @@ class TestKeyCertificate(unittest.TestCase):
"""
certificate = get_key_certificate({'dir-key-certificate-version': '3'})
- self.assertEquals(3, certificate.version)
+ self.assertEqual(3, certificate.version)
content = get_key_certificate({'dir-key-certificate-version': '4'}, content = True)
self.assertRaises(ValueError, KeyCertificate, content)
- self.assertEquals(4, KeyCertificate(content, False).version)
+ self.assertEqual(4, KeyCertificate(content, False).version)
content = get_key_certificate({'dir-key-certificate-version': 'boo'}, content = True)
self.assertRaises(ValueError, KeyCertificate, content)
- self.assertEquals(None, KeyCertificate(content, False).version)
+ self.assertEqual(None, KeyCertificate(content, False).version)
def test_dir_address(self):
"""
@@ -169,7 +169,7 @@ class TestKeyCertificate(unittest.TestCase):
self.assertRaises(ValueError, KeyCertificate, content)
certificate = KeyCertificate(content, False)
- self.assertEquals(None, getattr(certificate, attr))
+ self.assertEqual(None, getattr(certificate, attr))
def test_key_blocks(self):
"""
@@ -192,7 +192,7 @@ class TestKeyCertificate(unittest.TestCase):
self.assertRaises(ValueError, KeyCertificate, content)
certificate = KeyCertificate(content, False)
- self.assertEquals(None, getattr(certificate, attr))
+ self.assertEqual(None, getattr(certificate, attr))
def test_wrong_block_type(self):
"""
diff --git a/test/unit/descriptor/reader.py b/test/unit/descriptor/reader.py
index f19c0ec..31c694e 100644
--- a/test/unit/descriptor/reader.py
+++ b/test/unit/descriptor/reader.py
@@ -3,7 +3,6 @@ Unit tests for stem.descriptor.reader.
"""
import getpass
-import io
import os
import shutil
import signal
@@ -12,6 +11,7 @@ import tarfile
import tempfile
import time
import unittest
+from io import StringIO
import stem.descriptor.reader
import test.runner
@@ -107,8 +107,8 @@ class TestDescriptorReader(unittest.TestCase):
'/dir/after empty line': 12345,
}
- open_mock.return_value = io.StringIO(u'\n'.join(test_lines))
- self.assertEquals(expected_value, stem.descriptor.reader.load_processed_files(''))
+ open_mock.return_value = StringIO(u'\n'.join(test_lines))
+ self.assertEqual(expected_value, stem.descriptor.reader.load_processed_files(''))
@patch('stem.descriptor.reader.open', create = True)
def test_load_processed_files_empty(self, open_mock):
@@ -116,8 +116,8 @@ class TestDescriptorReader(unittest.TestCase):
Tests the load_processed_files() function with an empty file.
"""
- open_mock.return_value = io.StringIO(u'')
- self.assertEquals({}, stem.descriptor.reader.load_processed_files(''))
+ open_mock.return_value = StringIO(u'')
+ self.assertEqual({}, stem.descriptor.reader.load_processed_files(''))
@patch('stem.descriptor.reader.open', create = True)
def test_load_processed_files_no_file(self, open_mock):
@@ -126,7 +126,7 @@ class TestDescriptorReader(unittest.TestCase):
it is missing the file path.
"""
- open_mock.return_value = io.StringIO(u' 12345')
+ open_mock.return_value = StringIO(u' 12345')
self.assertRaises(TypeError, stem.descriptor.reader.load_processed_files, '')
@patch('stem.descriptor.reader.open', create = True)
@@ -136,7 +136,7 @@ class TestDescriptorReader(unittest.TestCase):
it is missing the timestamp.
"""
- open_mock.return_value = io.StringIO(u'/dir/file ')
+ open_mock.return_value = StringIO(u'/dir/file ')
self.assertRaises(TypeError, stem.descriptor.reader.load_processed_files, '')
@patch('stem.descriptor.reader.open', create = True)
@@ -146,7 +146,7 @@ class TestDescriptorReader(unittest.TestCase):
it has an invalid file path.
"""
- open_mock.return_value = io.StringIO(u'not_an_absolute_file 12345')
+ open_mock.return_value = StringIO(u'not_an_absolute_file 12345')
self.assertRaises(TypeError, stem.descriptor.reader.load_processed_files, '')
@patch('stem.descriptor.reader.open', create = True)
@@ -156,7 +156,7 @@ class TestDescriptorReader(unittest.TestCase):
it has a non-numeric timestamp.
"""
- open_mock.return_value = io.StringIO(u'/dir/file 123a')
+ open_mock.return_value = StringIO(u'/dir/file 123a')
self.assertRaises(TypeError, stem.descriptor.reader.load_processed_files, '')
def test_load_processed_files_from_data(self):
@@ -173,7 +173,7 @@ class TestDescriptorReader(unittest.TestCase):
'/file with spaces/and \\ stuff': 890,
}
- self.assertEquals(expected_listing, loaded_listing)
+ self.assertEqual(expected_listing, loaded_listing)
def test_load_processed_files_missing(self):
"""
@@ -202,7 +202,7 @@ class TestDescriptorReader(unittest.TestCase):
test.runner.skip(self, '(chmod not functional)')
test_listing_path = self._make_processed_files_listing(BASIC_LISTING)
- os.chmod(test_listing_path, 0077) # remove read permissions
+ os.chmod(test_listing_path, 0o077) # remove read permissions
self.assertRaises(IOError, stem.descriptor.reader.load_processed_files, test_listing_path)
def test_save_processed_files(self):
@@ -221,7 +221,7 @@ class TestDescriptorReader(unittest.TestCase):
stem.descriptor.reader.save_processed_files(self.test_listing_path, initial_listing)
loaded_listing = stem.descriptor.reader.load_processed_files(self.test_listing_path)
- self.assertEquals(initial_listing, loaded_listing)
+ self.assertEqual(initial_listing, loaded_listing)
def test_save_processed_files_malformed(self):
"""
@@ -262,7 +262,7 @@ class TestDescriptorReader(unittest.TestCase):
# running this test multiple times to flush out concurrency issues
- for _ in xrange(15):
+ for _ in range(15):
remaining_entries = list(descriptor_entries)
with stem.descriptor.reader.DescriptorReader(descriptor_path) as reader:
@@ -288,20 +288,20 @@ class TestDescriptorReader(unittest.TestCase):
reader = stem.descriptor.reader.DescriptorReader(descriptor_path)
with reader:
- self.assertEquals(1, len(list(reader)))
+ self.assertEqual(1, len(list(reader)))
# run it a second time, this shouldn't provide any descriptors because we
# have already read it
with reader:
- self.assertEquals(0, len(list(reader)))
+ self.assertEqual(0, len(list(reader)))
# clear the DescriptorReader's memory of seeing the file and run it again
reader.set_processed_files([])
with reader:
- self.assertEquals(1, len(list(reader)))
+ self.assertEqual(1, len(list(reader)))
def test_buffer_size(self):
"""
@@ -377,7 +377,7 @@ class TestDescriptorReader(unittest.TestCase):
with stem.descriptor.reader.DescriptorReader(test_path) as reader:
read_descriptors = [str(desc) for desc in list(reader)]
- self.assertEquals(expected_results, read_descriptors)
+ self.assertEqual(expected_results, read_descriptors)
def test_archived_gzip(self):
"""
@@ -389,7 +389,7 @@ class TestDescriptorReader(unittest.TestCase):
with stem.descriptor.reader.DescriptorReader(test_path) as reader:
read_descriptors = [str(desc) for desc in list(reader)]
- self.assertEquals(expected_results, read_descriptors)
+ self.assertEqual(expected_results, read_descriptors)
def test_archived_bz2(self):
"""
@@ -401,7 +401,7 @@ class TestDescriptorReader(unittest.TestCase):
with stem.descriptor.reader.DescriptorReader(test_path) as reader:
read_descriptors = [str(desc) for desc in list(reader)]
- self.assertEquals(expected_results, read_descriptors)
+ self.assertEqual(expected_results, read_descriptors)
def test_stop(self):
"""
@@ -452,7 +452,7 @@ class TestDescriptorReader(unittest.TestCase):
with reader:
list(reader) # iterates over all of the descriptors
- self.assertEquals(expected_results, reader.get_processed_files())
+ self.assertEqual(expected_results, reader.get_processed_files())
def test_skip_nondescriptor_contents(self):
"""
@@ -495,24 +495,24 @@ class TestDescriptorReader(unittest.TestCase):
# path that we want the DescriptorReader to skip
test_path = os.path.join(DESCRIPTOR_TEST_DATA, 'example_descriptor')
- initial_processed_files = {test_path: sys.maxint}
+ initial_processed_files = {test_path: sys.maxsize}
skip_listener = SkipListener()
reader = stem.descriptor.reader.DescriptorReader(test_path)
reader.register_skip_listener(skip_listener.listener)
reader.set_processed_files(initial_processed_files)
- self.assertEquals(initial_processed_files, reader.get_processed_files())
+ self.assertEqual(initial_processed_files, reader.get_processed_files())
with reader:
list(reader) # iterates over all of the descriptors
- self.assertEquals(1, len(skip_listener.results))
+ self.assertEqual(1, len(skip_listener.results))
skipped_path, skip_exception = skip_listener.results[0]
self.assertEqual(test_path, skipped_path)
self.assertTrue(isinstance(skip_exception, stem.descriptor.reader.AlreadyRead))
- self.assertEqual(sys.maxint, skip_exception.last_modified_when_read)
+ self.assertEqual(sys.maxsize, skip_exception.last_modified_when_read)
def test_skip_listener_unrecognized_type(self):
"""
@@ -567,7 +567,7 @@ class TestDescriptorReader(unittest.TestCase):
test_file.write('test data for test_skip_listener_unrecognized_type()')
test_file.close()
- os.chmod(test_path, 0077) # remove read permissions
+ os.chmod(test_path, 0o077) # remove read permissions
skip_listener = SkipListener()
reader = stem.descriptor.reader.DescriptorReader(test_path)
diff --git a/test/unit/descriptor/router_status_entry.py b/test/unit/descriptor/router_status_entry.py
index 4c9a13a..603cb86 100644
--- a/test/unit/descriptor/router_status_entry.py
+++ b/test/unit/descriptor/router_status_entry.py
@@ -34,7 +34,7 @@ class TestRouterStatusEntry(unittest.TestCase):
'/nHdqoKZ6bKZixxAPzYt9Qen+Is': 'FE71DDAA8299E9B2998B1C403F362DF507A7F88B',
}
- for arg, expected in test_values.items():
+ for arg, expected in list(test_values.items()):
self.assertEqual(expected, _base64_to_hex(arg, True))
# checks with some malformed inputs
@@ -130,7 +130,7 @@ class TestRouterStatusEntry(unittest.TestCase):
"""
entry = get_router_status_entry_v3({'z': 'New tor feature: sparkly unicorns!'})
- self.assertEquals(['z New tor feature: sparkly unicorns!'], entry.get_unrecognized_lines())
+ self.assertEqual(['z New tor feature: sparkly unicorns!'], entry.get_unrecognized_lines())
def test_proceeding_line(self):
"""
@@ -319,9 +319,9 @@ class TestRouterStatusEntry(unittest.TestCase):
('2607:fcd0:daaa:101::602c:bd62', 443, True)],
}
- for a_line, expected in test_values.items():
+ for a_line, expected in list(test_values.items()):
entry = get_router_status_entry_v3({'a': a_line})
- self.assertEquals(expected, entry.or_addresses)
+ self.assertEqual(expected, entry.or_addresses)
# includes multiple 'a' lines
@@ -335,7 +335,7 @@ class TestRouterStatusEntry(unittest.TestCase):
]
entry = RouterStatusEntryV3(content)
- self.assertEquals(expected, entry.or_addresses)
+ self.assertEqual(expected, entry.or_addresses)
# tries some invalid inputs
@@ -360,9 +360,9 @@ class TestRouterStatusEntry(unittest.TestCase):
'Ugabuga': ['Ugabuga'],
}
- for s_line, expected in test_values.items():
+ for s_line, expected in list(test_values.items()):
entry = get_router_status_entry_v3({'s': s_line})
- self.assertEquals(expected, entry.flags)
+ self.assertEqual(expected, entry.flags)
# tries some invalid inputs
test_values = {
@@ -371,7 +371,7 @@ class TestRouterStatusEntry(unittest.TestCase):
'Fast Fast': [Flag.FAST, Flag.FAST],
}
- for s_line, expected in test_values.items():
+ for s_line, expected in list(test_values.items()):
content = get_router_status_entry_v3({'s': s_line}, content = True)
self._expect_invalid_attr(content, 'flags', expected)
@@ -387,10 +387,10 @@ class TestRouterStatusEntry(unittest.TestCase):
'new_stuff and stuff': None,
}
- for v_line, expected in test_values.items():
+ for v_line, expected in list(test_values.items()):
entry = get_router_status_entry_v3({'v': v_line})
- self.assertEquals(expected, entry.version)
- self.assertEquals(v_line, entry.version_line)
+ self.assertEqual(expected, entry.version)
+ self.assertEqual(v_line, entry.version_line)
# tries an invalid input
content = get_router_status_entry_v3({'v': 'Tor ugabuga'}, content = True)
@@ -409,12 +409,12 @@ class TestRouterStatusEntry(unittest.TestCase):
'Bandwidth=11111 Measured=482 Unmeasured=1 Blarg!': (11111, 482, True, ['Blarg!']),
}
- for w_line, expected in test_values.items():
+ for w_line, expected in list(test_values.items()):
entry = get_router_status_entry_v3({'w': w_line})
- self.assertEquals(expected[0], entry.bandwidth)
- self.assertEquals(expected[1], entry.measured)
- self.assertEquals(expected[2], entry.is_unmeasured)
- self.assertEquals(expected[3], entry.unrecognized_bandwidth_entries)
+ self.assertEqual(expected[0], entry.bandwidth)
+ self.assertEqual(expected[1], entry.measured)
+ self.assertEqual(expected[2], entry.is_unmeasured)
+ self.assertEqual(expected[3], entry.unrecognized_bandwidth_entries)
# tries some invalid inputs
test_values = (
@@ -449,9 +449,9 @@ class TestRouterStatusEntry(unittest.TestCase):
'accept 80,110,143,443': MicroExitPolicy('accept 80,110,143,443'),
}
- for p_line, expected in test_values.items():
+ for p_line, expected in list(test_values.items()):
entry = get_router_status_entry_v3({'p': p_line})
- self.assertEquals(expected, entry.exit_policy)
+ self.assertEqual(expected, entry.exit_policy)
# tries some invalid inputs
test_values = (
@@ -484,10 +484,10 @@ class TestRouterStatusEntry(unittest.TestCase):
setattr(mock_document, 'is_vote', True)
setattr(mock_document, 'is_consensus', False)
- for m_line, expected in test_values.items():
+ for m_line, expected in list(test_values.items()):
content = get_router_status_entry_v3({'m': m_line}, content = True)
entry = RouterStatusEntryV3(content, document = mock_document)
- self.assertEquals(expected, entry.microdescriptor_hashes)
+ self.assertEqual(expected, entry.microdescriptor_hashes)
# try with multiple 'm' lines
@@ -501,7 +501,7 @@ class TestRouterStatusEntry(unittest.TestCase):
]
entry = RouterStatusEntryV3(content, document = mock_document)
- self.assertEquals(expected, entry.microdescriptor_hashes)
+ self.assertEqual(expected, entry.microdescriptor_hashes)
# try without a document
content = get_router_status_entry_v3({'m': '8,9,10,11,12'}, content = True)
@@ -529,6 +529,6 @@ class TestRouterStatusEntry(unittest.TestCase):
entry = RouterStatusEntryV3(content, False)
if attr:
- self.assertEquals(expected_value, getattr(entry, attr))
+ self.assertEqual(expected_value, getattr(entry, attr))
else:
- self.assertEquals('caerSidi', entry.nickname)
+ self.assertEqual('caerSidi', entry.nickname)
diff --git a/test/unit/descriptor/server_descriptor.py b/test/unit/descriptor/server_descriptor.py
index 97fcde3..c05dee1 100644
--- a/test/unit/descriptor/server_descriptor.py
+++ b/test/unit/descriptor/server_descriptor.py
@@ -101,35 +101,35 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
-----END SIGNATURE-----"""
desc = next(stem.descriptor.parse_file(descriptor_file, 'server-descriptor 1.0'))
- self.assertEquals('caerSidi', desc.nickname)
- self.assertEquals('A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB', desc.fingerprint)
- self.assertEquals('71.35.133.197', desc.address)
- self.assertEquals(9001, desc.or_port)
- self.assertEquals(None, desc.socks_port)
- self.assertEquals(None, desc.dir_port)
- self.assertEquals(b'Tor 0.2.1.30 on Linux x86_64', desc.platform)
- self.assertEquals(stem.version.Version('0.2.1.30'), desc.tor_version)
- self.assertEquals('Linux x86_64', desc.operating_system)
- self.assertEquals(588217, desc.uptime)
- self.assertEquals(datetime.datetime(2012, 3, 1, 17, 15, 27), desc.published)
- self.assertEquals(b'www.atagar.com/contact', desc.contact)
- self.assertEquals(['1', '2'], desc.link_protocols)
- self.assertEquals(['1'], desc.circuit_protocols)
- self.assertEquals(False, desc.hibernating)
- self.assertEquals(False, desc.allow_single_hop_exits)
- self.assertEquals(False, desc.extra_info_cache)
- self.assertEquals('D225B728768D7EA4B5587C13A7A9D22EBBEE6E66', desc.extra_info_digest)
- self.assertEquals(['2'], desc.hidden_service_dir)
- self.assertEquals(expected_family, desc.family)
- self.assertEquals(153600, desc.average_bandwidth)
- self.assertEquals(256000, desc.burst_bandwidth)
- self.assertEquals(104590, desc.observed_bandwidth)
- self.assertEquals(stem.exit_policy.ExitPolicy('reject *:*'), desc.exit_policy)
- self.assertEquals(expected_onion_key, desc.onion_key)
- self.assertEquals(expected_signing_key, desc.signing_key)
- self.assertEquals(expected_signature, desc.signature)
- self.assertEquals([], desc.get_unrecognized_lines())
- self.assertEquals('2C7B27BEAB04B4E2459D89CA6D5CD1CC5F95A689', desc.digest())
+ self.assertEqual('caerSidi', desc.nickname)
+ self.assertEqual('A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB', desc.fingerprint)
+ self.assertEqual('71.35.133.197', desc.address)
+ self.assertEqual(9001, desc.or_port)
+ self.assertEqual(None, desc.socks_port)
+ self.assertEqual(None, desc.dir_port)
+ self.assertEqual(b'Tor 0.2.1.30 on Linux x86_64', desc.platform)
+ self.assertEqual(stem.version.Version('0.2.1.30'), desc.tor_version)
+ self.assertEqual('Linux x86_64', desc.operating_system)
+ self.assertEqual(588217, desc.uptime)
+ self.assertEqual(datetime.datetime(2012, 3, 1, 17, 15, 27), desc.published)
+ self.assertEqual(b'www.atagar.com/contact', desc.contact)
+ self.assertEqual(['1', '2'], desc.link_protocols)
+ self.assertEqual(['1'], desc.circuit_protocols)
+ self.assertEqual(False, desc.hibernating)
+ self.assertEqual(False, desc.allow_single_hop_exits)
+ self.assertEqual(False, desc.extra_info_cache)
+ self.assertEqual('D225B728768D7EA4B5587C13A7A9D22EBBEE6E66', desc.extra_info_digest)
+ self.assertEqual(['2'], desc.hidden_service_dir)
+ self.assertEqual(expected_family, desc.family)
+ self.assertEqual(153600, desc.average_bandwidth)
+ self.assertEqual(256000, desc.burst_bandwidth)
+ self.assertEqual(104590, desc.observed_bandwidth)
+ self.assertEqual(stem.exit_policy.ExitPolicy('reject *:*'), desc.exit_policy)
+ self.assertEqual(expected_onion_key, desc.onion_key)
+ self.assertEqual(expected_signing_key, desc.signing_key)
+ self.assertEqual(expected_signature, desc.signature)
+ self.assertEqual([], desc.get_unrecognized_lines())
+ self.assertEqual('2C7B27BEAB04B4E2459D89CA6D5CD1CC5F95A689', desc.digest())
def test_metrics_descriptor_multiple(self):
"""
@@ -139,13 +139,13 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
with open(get_resource('metrics_server_desc_multiple'), 'rb') as descriptor_file:
descriptors = list(stem.descriptor.parse_file(descriptor_file, 'server-descriptor 1.0'))
- self.assertEquals(2, len(descriptors))
+ self.assertEqual(2, len(descriptors))
- self.assertEquals('anonion', descriptors[0].nickname)
- self.assertEquals('9A5EC5BB866517E53962AF4D3E776536694B069E', descriptors[0].fingerprint)
+ self.assertEqual('anonion', descriptors[0].nickname)
+ self.assertEqual('9A5EC5BB866517E53962AF4D3E776536694B069E', descriptors[0].fingerprint)
- self.assertEquals('Unnamed', descriptors[1].nickname)
- self.assertEquals('5366F1D198759F8894EA6E5FF768C667F59AFD24', descriptors[1].fingerprint)
+ self.assertEqual('Unnamed', descriptors[1].nickname)
+ self.assertEqual('5366F1D198759F8894EA6E5FF768C667F59AFD24', descriptors[1].fingerprint)
def test_old_descriptor(self):
"""
@@ -155,43 +155,43 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
descriptor_file = open(get_resource('old_descriptor'), 'rb')
desc = next(stem.descriptor.parse_file(descriptor_file, 'server-descriptor 1.0'))
- self.assertEquals('krypton', desc.nickname)
- self.assertEquals('3E2F63E2356F52318B536A12B6445373808A5D6C', desc.fingerprint)
- self.assertEquals('212.37.39.59', desc.address)
- self.assertEquals(8000, desc.or_port)
- self.assertEquals(None, desc.socks_port)
- self.assertEquals(None, desc.dir_port)
- self.assertEquals(b'Tor 0.1.0.14 on FreeBSD i386', desc.platform)
- self.assertEquals(stem.version.Version('0.1.0.14'), desc.tor_version)
- self.assertEquals('FreeBSD i386', desc.operating_system)
- self.assertEquals(64820, desc.uptime)
- self.assertEquals(datetime.datetime(2005, 12, 16, 18, 1, 3), desc.published)
- self.assertEquals(None, desc.contact)
- self.assertEquals(None, desc.link_protocols)
- self.assertEquals(None, desc.circuit_protocols)
- self.assertEquals(True, desc.hibernating)
- self.assertEquals(False, desc.allow_single_hop_exits)
- self.assertEquals(False, desc.extra_info_cache)
- self.assertEquals(None, desc.extra_info_digest)
- self.assertEquals(None, desc.hidden_service_dir)
- self.assertEquals(set(), desc.family)
- self.assertEquals(102400, desc.average_bandwidth)
- self.assertEquals(10485760, desc.burst_bandwidth)
- self.assertEquals(0, desc.observed_bandwidth)
- self.assertEquals(datetime.datetime(2005, 12, 16, 18, 0, 48), desc.read_history_end)
- self.assertEquals(900, desc.read_history_interval)
- self.assertEquals(datetime.datetime(2005, 12, 16, 18, 0, 48), desc.write_history_end)
- self.assertEquals(900, desc.write_history_interval)
- self.assertEquals([], desc.get_unrecognized_lines())
+ self.assertEqual('krypton', desc.nickname)
+ self.assertEqual('3E2F63E2356F52318B536A12B6445373808A5D6C', desc.fingerprint)
+ self.assertEqual('212.37.39.59', desc.address)
+ self.assertEqual(8000, desc.or_port)
+ self.assertEqual(None, desc.socks_port)
+ self.assertEqual(None, desc.dir_port)
+ self.assertEqual(b'Tor 0.1.0.14 on FreeBSD i386', desc.platform)
+ self.assertEqual(stem.version.Version('0.1.0.14'), desc.tor_version)
+ self.assertEqual('FreeBSD i386', desc.operating_system)
+ self.assertEqual(64820, desc.uptime)
+ self.assertEqual(datetime.datetime(2005, 12, 16, 18, 1, 3), desc.published)
+ self.assertEqual(None, desc.contact)
+ self.assertEqual(None, desc.link_protocols)
+ self.assertEqual(None, desc.circuit_protocols)
+ self.assertEqual(True, desc.hibernating)
+ self.assertEqual(False, desc.allow_single_hop_exits)
+ self.assertEqual(False, desc.extra_info_cache)
+ self.assertEqual(None, desc.extra_info_digest)
+ self.assertEqual(None, desc.hidden_service_dir)
+ self.assertEqual(set(), desc.family)
+ self.assertEqual(102400, desc.average_bandwidth)
+ self.assertEqual(10485760, desc.burst_bandwidth)
+ self.assertEqual(0, desc.observed_bandwidth)
+ self.assertEqual(datetime.datetime(2005, 12, 16, 18, 0, 48), desc.read_history_end)
+ self.assertEqual(900, desc.read_history_interval)
+ self.assertEqual(datetime.datetime(2005, 12, 16, 18, 0, 48), desc.write_history_end)
+ self.assertEqual(900, desc.write_history_interval)
+ self.assertEqual([], desc.get_unrecognized_lines())
# The read-history and write-history lines are pretty long so just checking
# the initial contents for the line and parsed values.
read_values_start = [20774, 489973, 510022, 511163, 20949]
- self.assertEquals(read_values_start, desc.read_history_values[:5])
+ self.assertEqual(read_values_start, desc.read_history_values[:5])
write_values_start = [81, 8848, 8927, 8927, 83, 8848, 8931, 8929, 81, 8846]
- self.assertEquals(write_values_start, desc.write_history_values[:10])
+ self.assertEqual(write_values_start, desc.write_history_values[:10])
def test_non_ascii_descriptor(self):
"""
@@ -203,31 +203,31 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
expected_contact = b'1024D/04D2E818 L\xc3\xa9na\xc3\xafc Huard <lenaic dot huard AT laposte dot net>'
desc = next(stem.descriptor.parse_file(descriptor_file, 'server-descriptor 1.0'))
- self.assertEquals('Coruscant', desc.nickname)
- self.assertEquals('0B9821545C48E496AEED9ECC0DB506C49FF8158D', desc.fingerprint)
- self.assertEquals('88.182.161.122', desc.address)
- self.assertEquals(9001, desc.or_port)
- self.assertEquals(None, desc.socks_port)
- self.assertEquals(9030, desc.dir_port)
- self.assertEquals(b'Tor 0.2.3.25 on Linux', desc.platform)
- self.assertEquals(stem.version.Version('0.2.3.25'), desc.tor_version)
- self.assertEquals('Linux', desc.operating_system)
- self.assertEquals(259738, desc.uptime)
- self.assertEquals(datetime.datetime(2013, 5, 18, 11, 16, 19), desc.published)
- self.assertEquals(expected_contact, desc.contact)
- self.assertEquals(['1', '2'], desc.link_protocols)
- self.assertEquals(['1'], desc.circuit_protocols)
- self.assertEquals(False, desc.hibernating)
- self.assertEquals(False, desc.allow_single_hop_exits)
- self.assertEquals(False, desc.extra_info_cache)
- self.assertEquals('56403D838DE152421CD401B8E57DAD4483A3D56B', desc.extra_info_digest)
- self.assertEquals(['2'], desc.hidden_service_dir)
- self.assertEquals(set(), desc.family)
- self.assertEquals(102400, desc.average_bandwidth)
- self.assertEquals(204800, desc.burst_bandwidth)
- self.assertEquals(122818, desc.observed_bandwidth)
- self.assertEquals(stem.exit_policy.ExitPolicy('reject *:*'), desc.exit_policy)
- self.assertEquals([], desc.get_unrecognized_lines())
+ self.assertEqual('Coruscant', desc.nickname)
+ self.assertEqual('0B9821545C48E496AEED9ECC0DB506C49FF8158D', desc.fingerprint)
+ self.assertEqual('88.182.161.122', desc.address)
+ self.assertEqual(9001, desc.or_port)
+ self.assertEqual(None, desc.socks_port)
+ self.assertEqual(9030, desc.dir_port)
+ self.assertEqual(b'Tor 0.2.3.25 on Linux', desc.platform)
+ self.assertEqual(stem.version.Version('0.2.3.25'), desc.tor_version)
+ self.assertEqual('Linux', desc.operating_system)
+ self.assertEqual(259738, desc.uptime)
+ self.assertEqual(datetime.datetime(2013, 5, 18, 11, 16, 19), desc.published)
+ self.assertEqual(expected_contact, desc.contact)
+ self.assertEqual(['1', '2'], desc.link_protocols)
+ self.assertEqual(['1'], desc.circuit_protocols)
+ self.assertEqual(False, desc.hibernating)
+ self.assertEqual(False, desc.allow_single_hop_exits)
+ self.assertEqual(False, desc.extra_info_cache)
+ self.assertEqual('56403D838DE152421CD401B8E57DAD4483A3D56B', desc.extra_info_digest)
+ self.assertEqual(['2'], desc.hidden_service_dir)
+ self.assertEqual(set(), desc.family)
+ self.assertEqual(102400, desc.average_bandwidth)
+ self.assertEqual(204800, desc.burst_bandwidth)
+ self.assertEqual(122818, desc.observed_bandwidth)
+ self.assertEqual(stem.exit_policy.ExitPolicy('reject *:*'), desc.exit_policy)
+ self.assertEqual([], desc.get_unrecognized_lines())
# Make sure that we can get a string representation for this descriptor
# (having non-unicode content risks a UnicodeEncodeError)...
@@ -245,9 +245,9 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
descriptor_file = open(get_resource('cr_in_contact_line'), 'rb')
desc = next(stem.descriptor.parse_file(descriptor_file, 'server-descriptor 1.0'))
- self.assertEquals('pogonip', desc.nickname)
- self.assertEquals('6DABD62BC65D4E6FE620293157FC76968DAB9C9B', desc.fingerprint)
- self.assertEquals('75.5.248.48', desc.address)
+ self.assertEqual('pogonip', desc.nickname)
+ self.assertEqual('6DABD62BC65D4E6FE620293157FC76968DAB9C9B', desc.fingerprint)
+ self.assertEqual('75.5.248.48', desc.address)
# the contact info block is huge so just checking the start and end,
# including some of the embedded carriage returns
@@ -267,9 +267,9 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
descriptor_file = open(get_resource('negative_uptime'), 'rb')
desc = next(stem.descriptor.parse_file(descriptor_file, 'server-descriptor 1.0'))
- self.assertEquals('TipTor', desc.nickname)
- self.assertEquals('137962D4931DBF08A24E843288B8A155D6D2AEDD', desc.fingerprint)
- self.assertEquals('62.99.247.83', desc.address)
+ self.assertEqual('TipTor', desc.nickname)
+ self.assertEqual('137962D4931DBF08A24E843288B8A155D6D2AEDD', desc.fingerprint)
+ self.assertEqual('62.99.247.83', desc.address)
# modify the relay version so it's after when the negative uptime bug
# should appear
@@ -291,32 +291,32 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
])
desc = next(stem.descriptor.parse_file(descriptor_file, 'bridge-server-descriptor 1.0'))
- self.assertEquals('Unnamed', desc.nickname)
- self.assertEquals('AE54E28ED069CDF45F3009F963EE3B3D6FA26A2E', desc.fingerprint)
- self.assertEquals('10.45.227.253', desc.address)
- self.assertEquals(9001, desc.or_port)
- self.assertEquals(None, desc.socks_port)
- self.assertEquals(None, desc.dir_port)
- self.assertEquals(b'Tor 0.2.3.12-alpha (git-800942b4176ca31c) on Linux x86_64', desc.platform)
- self.assertEquals(stem.version.Version('0.2.3.12-alpha'), desc.tor_version)
- self.assertEquals('Linux x86_64', desc.operating_system)
- self.assertEquals(186, desc.uptime)
- self.assertEquals(datetime.datetime(2012, 3, 22, 17, 34, 38), desc.published)
- self.assertEquals(b'somebody', desc.contact)
- self.assertEquals(['1', '2'], desc.link_protocols)
- self.assertEquals(['1'], desc.circuit_protocols)
- self.assertEquals(False, desc.hibernating)
- self.assertEquals(False, desc.allow_single_hop_exits)
- self.assertEquals(False, desc.extra_info_cache)
- self.assertEquals('134F81F7A0D270B85FCD481DD10CEA34BA7B15C9', desc.extra_info_digest)
- self.assertEquals(['2'], desc.hidden_service_dir)
- self.assertEquals(expected_family, desc.family)
- self.assertEquals(409600, desc.average_bandwidth)
- self.assertEquals(819200, desc.burst_bandwidth)
- self.assertEquals(5120, desc.observed_bandwidth)
- self.assertEquals(stem.exit_policy.ExitPolicy('reject *:*'), desc.exit_policy)
- self.assertEquals('006FD96BA35E7785A6A3B8B75FE2E2435A13BDB4', desc.digest())
- self.assertEquals([], desc.get_unrecognized_lines())
+ self.assertEqual('Unnamed', desc.nickname)
+ self.assertEqual('AE54E28ED069CDF45F3009F963EE3B3D6FA26A2E', desc.fingerprint)
+ self.assertEqual('10.45.227.253', desc.address)
+ self.assertEqual(9001, desc.or_port)
+ self.assertEqual(None, desc.socks_port)
+ self.assertEqual(None, desc.dir_port)
+ self.assertEqual(b'Tor 0.2.3.12-alpha (git-800942b4176ca31c) on Linux x86_64', desc.platform)
+ self.assertEqual(stem.version.Version('0.2.3.12-alpha'), desc.tor_version)
+ self.assertEqual('Linux x86_64', desc.operating_system)
+ self.assertEqual(186, desc.uptime)
+ self.assertEqual(datetime.datetime(2012, 3, 22, 17, 34, 38), desc.published)
+ self.assertEqual(b'somebody', desc.contact)
+ self.assertEqual(['1', '2'], desc.link_protocols)
+ self.assertEqual(['1'], desc.circuit_protocols)
+ self.assertEqual(False, desc.hibernating)
+ self.assertEqual(False, desc.allow_single_hop_exits)
+ self.assertEqual(False, desc.extra_info_cache)
+ self.assertEqual('134F81F7A0D270B85FCD481DD10CEA34BA7B15C9', desc.extra_info_digest)
+ self.assertEqual(['2'], desc.hidden_service_dir)
+ self.assertEqual(expected_family, desc.family)
+ self.assertEqual(409600, desc.average_bandwidth)
+ self.assertEqual(819200, desc.burst_bandwidth)
+ self.assertEqual(5120, desc.observed_bandwidth)
+ self.assertEqual(stem.exit_policy.ExitPolicy('reject *:*'), desc.exit_policy)
+ self.assertEqual('006FD96BA35E7785A6A3B8B75FE2E2435A13BDB4', desc.digest())
+ self.assertEqual([], desc.get_unrecognized_lines())
def test_minimal_relay_descriptor(self):
"""
@@ -326,9 +326,9 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
desc = get_relay_server_descriptor()
- self.assertEquals('caerSidi', desc.nickname)
- self.assertEquals('71.35.133.197', desc.address)
- self.assertEquals(None, desc.fingerprint)
+ self.assertEqual('caerSidi', desc.nickname)
+ self.assertEqual('71.35.133.197', desc.address)
+ self.assertEqual(None, desc.fingerprint)
self.assertTrue(CRYPTO_BLOB in desc.onion_key)
def test_with_opt(self):
@@ -337,7 +337,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
"""
desc = get_relay_server_descriptor({'opt': 'contact www.atagar.com/contact/'})
- self.assertEquals(b'www.atagar.com/contact/', desc.contact)
+ self.assertEqual(b'www.atagar.com/contact/', desc.contact)
def test_unrecognized_line(self):
"""
@@ -345,7 +345,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
"""
desc = get_relay_server_descriptor({'pepperjack': 'is oh so tasty!'})
- self.assertEquals(['pepperjack is oh so tasty!'], desc.get_unrecognized_lines())
+ self.assertEqual(['pepperjack is oh so tasty!'], desc.get_unrecognized_lines())
def test_proceeding_line(self):
"""
@@ -426,12 +426,12 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
desc_text = get_relay_server_descriptor({'platform': ''}, content = True)
desc = RelayDescriptor(desc_text, validate = False)
- self.assertEquals(b'', desc.platform)
+ self.assertEqual(b'', desc.platform)
# does the same but with 'platform ' replaced with 'platform'
desc_text = desc_text.replace(b'platform ', b'platform')
desc = RelayDescriptor(desc_text, validate = False)
- self.assertEquals(b'', desc.platform)
+ self.assertEqual(b'', desc.platform)
def test_platform_for_node_tor(self):
"""
@@ -439,9 +439,9 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
"""
desc = get_relay_server_descriptor({'platform': 'node-Tor 0.1.0 on Linux x86_64'})
- self.assertEquals(b'node-Tor 0.1.0 on Linux x86_64', desc.platform)
- self.assertEquals(stem.version.Version('0.1.0'), desc.tor_version)
- self.assertEquals('Linux x86_64', desc.operating_system)
+ self.assertEqual(b'node-Tor 0.1.0 on Linux x86_64', desc.platform)
+ self.assertEqual(stem.version.Version('0.1.0'), desc.tor_version)
+ self.assertEqual('Linux x86_64', desc.operating_system)
def test_protocols_no_circuit_versions(self):
"""
@@ -463,7 +463,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
desc_text = get_relay_server_descriptor({'published': '2012-02-29 04:03:19'}, content = True)
expected_published = datetime.datetime(2012, 2, 29, 4, 3, 19)
- self.assertEquals(expected_published, RelayDescriptor(desc_text).published)
+ self.assertEqual(expected_published, RelayDescriptor(desc_text).published)
def test_published_no_time(self):
"""
@@ -492,9 +492,9 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
expected_end = datetime.datetime(2005, 12, 16, 18, 0, 48)
expected_values = [81, 8848, 8927, 8927, 83, 8848]
- self.assertEquals(expected_end, attr[0])
- self.assertEquals(900, attr[1])
- self.assertEquals(expected_values, attr[2])
+ self.assertEqual(expected_end, attr[0])
+ self.assertEqual(900, attr[1])
+ self.assertEqual(expected_values, attr[2])
def test_read_history_empty(self):
"""
@@ -503,9 +503,9 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
value = '2005-12-17 01:23:11 (900 s) '
desc = get_relay_server_descriptor({'opt read-history': value})
- self.assertEquals(datetime.datetime(2005, 12, 17, 1, 23, 11), desc.read_history_end)
- self.assertEquals(900, desc.read_history_interval)
- self.assertEquals([], desc.read_history_values)
+ self.assertEqual(datetime.datetime(2005, 12, 17, 1, 23, 11), desc.read_history_end)
+ self.assertEqual(900, desc.read_history_interval)
+ self.assertEqual([], desc.read_history_values)
@patch('stem.descriptor.server_descriptor.RelayDescriptor._verify_digest', Mock())
def test_annotations(self):
@@ -526,14 +526,14 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
desc_iter = stem.descriptor.server_descriptor._parse_file(io.BytesIO(desc_text))
desc_entries = list(desc_iter)
- self.assertEquals(1, len(desc_entries))
+ self.assertEqual(1, len(desc_entries))
desc = desc_entries[0]
- self.assertEquals('caerSidi', desc.nickname)
- self.assertEquals(b'@pepperjack very tasty', desc.get_annotation_lines()[0])
- self.assertEquals(b'@mushrooms not so much', desc.get_annotation_lines()[1])
- self.assertEquals({b'@pepperjack': b'very tasty', b'@mushrooms': b'not so much'}, desc.get_annotations())
- self.assertEquals([], desc.get_unrecognized_lines())
+ self.assertEqual('caerSidi', desc.nickname)
+ self.assertEqual(b'@pepperjack very tasty', desc.get_annotation_lines()[0])
+ self.assertEqual(b'@mushrooms not so much', desc.get_annotation_lines()[1])
+ self.assertEqual({b'@pepperjack': b'very tasty', b'@mushrooms': b'not so much'}, desc.get_annotations())
+ self.assertEqual([], desc.get_unrecognized_lines())
def test_duplicate_field(self):
"""
@@ -558,11 +558,11 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
# for one of them checks that the corresponding values are None
if attr == 'router':
- self.assertEquals(None, desc.nickname)
- self.assertEquals(None, desc.address)
- self.assertEquals(None, desc.or_port)
- self.assertEquals(None, desc.socks_port)
- self.assertEquals(None, desc.dir_port)
+ self.assertEqual(None, desc.nickname)
+ self.assertEqual(None, desc.address)
+ self.assertEqual(None, desc.or_port)
+ self.assertEqual(None, desc.socks_port)
+ self.assertEqual(None, desc.dir_port)
def test_fingerprint_invalid(self):
"""
@@ -581,7 +581,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
expected = stem.exit_policy.MicroExitPolicy('accept 22-23,53,80,110')
desc = get_relay_server_descriptor({'ipv6-policy': 'accept 22-23,53,80,110'})
- self.assertEquals(expected, desc.exit_policy_v6)
+ self.assertEqual(expected, desc.exit_policy_v6)
def test_ntor_onion_key(self):
"""
@@ -589,7 +589,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
"""
desc = get_relay_server_descriptor({'ntor-onion-key': 'Od2Sj3UXFyDjwESLXk6fhatqW9z/oBL/vAKJ+tbDqUU='})
- self.assertEquals('Od2Sj3UXFyDjwESLXk6fhatqW9z/oBL/vAKJ+tbDqUU=', desc.ntor_onion_key)
+ self.assertEqual('Od2Sj3UXFyDjwESLXk6fhatqW9z/oBL/vAKJ+tbDqUU=', desc.ntor_onion_key)
def test_minimal_bridge_descriptor(self):
"""
@@ -598,10 +598,10 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
desc = get_bridge_server_descriptor()
- self.assertEquals('Unnamed', desc.nickname)
- self.assertEquals('10.45.227.253', desc.address)
- self.assertEquals(None, desc.fingerprint)
- self.assertEquals('006FD96BA35E7785A6A3B8B75FE2E2435A13BDB4', desc.digest())
+ self.assertEqual('Unnamed', desc.nickname)
+ self.assertEqual('10.45.227.253', desc.address)
+ self.assertEqual(None, desc.fingerprint)
+ self.assertEqual('006FD96BA35E7785A6A3B8B75FE2E2435A13BDB4', desc.digest())
# check that we don't have crypto fields
self.assertRaises(AttributeError, getattr, desc, 'onion_key')
@@ -646,7 +646,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
router_digest = '068A2E28D4C934D9490303B7A645BA068DCA0504'
desc = get_bridge_server_descriptor({'router-digest': router_digest})
- self.assertEquals(router_digest, desc.digest())
+ self.assertEqual(router_digest, desc.digest())
# checks when missing
@@ -655,7 +655,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
# check that we can still construct it without validation
desc = BridgeDescriptor(desc_text, validate = False)
- self.assertEquals(None, desc.digest())
+ self.assertEqual(None, desc.digest())
# checks with invalid content
@@ -671,7 +671,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
self.assertRaises(ValueError, BridgeDescriptor, desc_text)
desc = BridgeDescriptor(desc_text, validate = False)
- self.assertEquals(value, desc.digest())
+ self.assertEqual(value, desc.digest())
def test_or_address_v4(self):
"""
@@ -679,7 +679,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
"""
desc = get_bridge_server_descriptor({'or-address': '10.45.227.253:9001'})
- self.assertEquals([('10.45.227.253', 9001, False)], desc.or_addresses)
+ self.assertEqual([('10.45.227.253', 9001, False)], desc.or_addresses)
def test_or_address_v6(self):
"""
@@ -687,7 +687,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
"""
desc = get_bridge_server_descriptor({'or-address': '[fd9f:2e19:3bcf::02:9970]:9001'})
- self.assertEquals([('fd9f:2e19:3bcf::02:9970', 9001, True)], desc.or_addresses)
+ self.assertEqual([('fd9f:2e19:3bcf::02:9970', 9001, True)], desc.or_addresses)
def test_or_address_multiple(self):
"""
@@ -704,7 +704,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
]
desc = BridgeDescriptor(desc_text)
- self.assertEquals(expected_or_addresses, desc.or_addresses)
+ self.assertEqual(expected_or_addresses, desc.or_addresses)
def _expect_invalid_attr(self, desc_text, attr = None, expected_value = None):
"""
@@ -720,7 +720,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
# check that the invalid attribute matches the expected value when
# constructed without validation
- self.assertEquals(expected_value, getattr(desc, attr))
+ self.assertEqual(expected_value, getattr(desc, attr))
else:
# check a default attribute
- self.assertEquals('caerSidi', desc.nickname)
+ self.assertEqual('caerSidi', desc.nickname)
diff --git a/test/unit/descriptor/tordnsel.py b/test/unit/descriptor/tordnsel.py
index 220af26..26227cc 100644
--- a/test/unit/descriptor/tordnsel.py
+++ b/test/unit/descriptor/tordnsel.py
@@ -82,7 +82,7 @@ class TestTorDNSELDescriptor(unittest.TestCase):
# skip exit address if malformed date and validate is False
- desc = _parse_file(io.BytesIO(MALFORMED_ENTRY_2), validate=False).next()
+ desc = next(_parse_file(io.BytesIO(MALFORMED_ENTRY_2), validate=False))
self.assertTrue(is_valid_fingerprint(desc.fingerprint))
self.assertEqual('030B22437D99B2DB2908B747B6962EAD13AB4038', desc.fingerprint)
self.assertEqual(0, len(desc.exit_addresses))
diff --git a/test/unit/exit_policy/policy.py b/test/unit/exit_policy/policy.py
index 406ef62..3eef79b 100644
--- a/test/unit/exit_policy/policy.py
+++ b/test/unit/exit_policy/policy.py
@@ -18,8 +18,8 @@ class TestExitPolicy(unittest.TestCase):
def test_example(self):
# tests the ExitPolicy and MicroExitPolicy pydoc examples
policy = ExitPolicy('accept *:80', 'accept *:443', 'reject *:*')
- self.assertEquals('accept *:80, accept *:443, reject *:*', str(policy))
- self.assertEquals('accept 80, 443', policy.summary())
+ self.assertEqual('accept *:80, accept *:443, reject *:*', str(policy))
+ self.assertEqual('accept 80, 443', policy.summary())
self.assertTrue(policy.can_exit_to('75.119.206.243', 80))
policy = MicroExitPolicy('accept 80,443')
@@ -36,20 +36,20 @@ class TestExitPolicy(unittest.TestCase):
)
policy = ExitPolicy('accept *:80', 'accept *:443', 'reject *:*')
- self.assertEquals(expected_policy, policy)
+ self.assertEqual(expected_policy, policy)
policy = ExitPolicy(*'accept *:80, accept *:443, reject *:*'.split(','))
- self.assertEquals(expected_policy, policy)
+ self.assertEqual(expected_policy, policy)
# checks that we truncate after getting a catch-all policy
policy = ExitPolicy(*'accept *:80, accept *:443, reject *:*, accept *:20-50'.split(','))
- self.assertEquals(expected_policy, policy)
+ self.assertEqual(expected_policy, policy)
# checks that we compress redundant policies
policy = ExitPolicy(*'reject *:80, reject *:443, reject *:*'.split(','))
- self.assertEquals(ExitPolicy('reject *:*'), policy)
+ self.assertEqual(ExitPolicy('reject *:*'), policy)
def test_can_exit_to(self):
# Basic sanity test for our can_exit_to() method. Most of the interesting
@@ -58,12 +58,12 @@ class TestExitPolicy(unittest.TestCase):
policy = ExitPolicy('accept *:80', 'accept *:443', 'reject *:*')
- for index in xrange(1, 500):
+ for index in range(1, 500):
ip_addr = '%i.%i.%i.%i' % (index / 2, index / 2, index / 2, index / 2)
expected_result = index in (80, 443)
- self.assertEquals(expected_result, policy.can_exit_to(ip_addr, index))
- self.assertEquals(expected_result, policy.can_exit_to(port = index))
+ self.assertEqual(expected_result, policy.can_exit_to(ip_addr, index))
+ self.assertEqual(expected_result, policy.can_exit_to(port = index))
def test_is_exiting_allowed(self):
test_inputs = {
@@ -78,24 +78,24 @@ class TestExitPolicy(unittest.TestCase):
('reject 127.0.0.1:*', 'accept *:80', 'reject *:*'): True,
}
- for rules, expected_result in test_inputs.items():
+ for rules, expected_result in list(test_inputs.items()):
policy = ExitPolicy(*rules)
- self.assertEquals(expected_result, policy.is_exiting_allowed())
+ self.assertEqual(expected_result, policy.is_exiting_allowed())
def test_summary_examples(self):
# checks the summary() method's pydoc examples
policy = ExitPolicy('accept *:80', 'accept *:443', 'reject *:*')
- self.assertEquals('accept 80, 443', policy.summary())
+ self.assertEqual('accept 80, 443', policy.summary())
policy = ExitPolicy('accept *:443', 'reject *:1-1024', 'accept *:*')
- self.assertEquals('reject 1-442, 444-1024', policy.summary())
+ self.assertEqual('reject 1-442, 444-1024', policy.summary())
def test_summary_large_ranges(self):
# checks the summary() method when the policy includes very large port ranges
policy = ExitPolicy('reject *:80-65535', 'accept *:1-65533', 'reject *:*')
- self.assertEquals('accept 1-79', policy.summary())
+ self.assertEqual('accept 1-79', policy.summary())
def test_non_private_non_default_policy(self):
policy = get_config_policy('reject *:80-65535, accept *:1-65533, reject *:*')
@@ -154,10 +154,10 @@ class TestExitPolicy(unittest.TestCase):
# sanity test for our __str__ method
policy = ExitPolicy(' accept *:80\n', '\taccept *:443')
- self.assertEquals('accept *:80, accept *:443', str(policy))
+ self.assertEqual('accept *:80, accept *:443', str(policy))
policy = ExitPolicy('reject 0.0.0.0/255.255.255.0:*', 'accept *:*')
- self.assertEquals('reject 0.0.0.0/24:*, accept *:*', str(policy))
+ self.assertEqual('reject 0.0.0.0/24:*, accept *:*', str(policy))
def test_iter(self):
# sanity test for our __iter__ method
@@ -168,8 +168,8 @@ class TestExitPolicy(unittest.TestCase):
ExitPolicyRule('reject *:*'),
]
- self.assertEquals(rules, list(ExitPolicy(*rules)))
- self.assertEquals(rules, list(ExitPolicy('accept *:80', 'accept *:443', 'reject *:*')))
+ self.assertEqual(rules, list(ExitPolicy(*rules)))
+ self.assertEqual(rules, list(ExitPolicy('accept *:80', 'accept *:443', 'reject *:*')))
def test_microdescriptor_parsing(self):
# mapping between inputs and if they should succeed or not
@@ -190,7 +190,7 @@ class TestExitPolicy(unittest.TestCase):
'bar 80,443': False,
}
- for policy_arg, expect_success in test_inputs.items():
+ for policy_arg, expect_success in list(test_inputs.items()):
try:
policy = MicroExitPolicy(policy_arg)
@@ -225,10 +225,10 @@ class TestExitPolicy(unittest.TestCase):
'reject 1-1024': {1: False, 1024: False, 1025: True},
}
- for policy_arg, attr in test_inputs.items():
+ for policy_arg, attr in list(test_inputs.items()):
policy = MicroExitPolicy(policy_arg)
- for port, expected_value in attr.items():
+ for port, expected_value in list(attr.items()):
self.assertEqual(expected_value, policy.can_exit_to(port = port))
# address argument should be ignored
@@ -261,7 +261,7 @@ class TestExitPolicy(unittest.TestCase):
),
}
- for test_input, expected in test_inputs.items():
+ for test_input, expected in list(test_inputs.items()):
self.assertEqual(expected, get_config_policy(test_input, '12.34.56.78'))
test_inputs = (
diff --git a/test/unit/exit_policy/rule.py b/test/unit/exit_policy/rule.py
index 5a6c0d4..39b6de9 100644
--- a/test/unit/exit_policy/rule.py
+++ b/test/unit/exit_policy/rule.py
@@ -47,7 +47,7 @@ class TestExitPolicyRule(unittest.TestCase):
for rule_arg in test_inputs:
rule = ExitPolicyRule(rule_arg)
- self.assertEquals(rule_arg, str(rule))
+ self.assertEqual(rule_arg, str(rule))
def test_str_changed(self):
# some instances where our rule is valid but won't match our str() representation
@@ -58,9 +58,9 @@ class TestExitPolicyRule(unittest.TestCase):
'accept [::]/128:*': 'accept [0000:0000:0000:0000:0000:0000:0000:0000]:*',
}
- for rule_arg, expected_str in test_inputs.items():
+ for rule_arg, expected_str in list(test_inputs.items()):
rule = ExitPolicyRule(rule_arg)
- self.assertEquals(expected_str, str(rule))
+ self.assertEqual(expected_str, str(rule))
def test_valid_wildcard(self):
test_inputs = {
@@ -83,22 +83,22 @@ class TestExitPolicyRule(unittest.TestCase):
'accept 192.168.0.1:1-65534': (False, False),
}
- for rule_arg, attr in test_inputs.items():
+ for rule_arg, attr in list(test_inputs.items()):
is_address_wildcard, is_port_wildcard = attr
rule = ExitPolicyRule(rule_arg)
- self.assertEquals(is_address_wildcard, rule.is_address_wildcard())
- self.assertEquals(is_port_wildcard, rule.is_port_wildcard())
+ self.assertEqual(is_address_wildcard, rule.is_address_wildcard())
+ self.assertEqual(is_port_wildcard, rule.is_port_wildcard())
# check that when appropriate a /0 is reported as *not* being a wildcard
rule = ExitPolicyRule('reject 127.0.0.1/0:*')
rule._submask_wildcard = False
- self.assertEquals(False, rule.is_address_wildcard())
+ self.assertEqual(False, rule.is_address_wildcard())
rule = ExitPolicyRule('reject [0000:0000:0000:0000:0000:0000:0000:0000]/0:80')
rule._submask_wildcard = False
- self.assertEquals(False, rule.is_address_wildcard())
+ self.assertEqual(False, rule.is_address_wildcard())
def test_invalid_wildcard(self):
test_inputs = (
@@ -113,12 +113,12 @@ class TestExitPolicyRule(unittest.TestCase):
def test_wildcard_attributes(self):
rule = ExitPolicyRule('reject *:*')
- self.assertEquals(AddressType.WILDCARD, rule.get_address_type())
- self.assertEquals(None, rule.address)
- self.assertEquals(None, rule.get_mask())
- self.assertEquals(None, rule.get_masked_bits())
- self.assertEquals(1, rule.min_port)
- self.assertEquals(65535, rule.max_port)
+ self.assertEqual(AddressType.WILDCARD, rule.get_address_type())
+ self.assertEqual(None, rule.address)
+ self.assertEqual(None, rule.get_mask())
+ self.assertEqual(None, rule.get_masked_bits())
+ self.assertEqual(1, rule.min_port)
+ self.assertEqual(65535, rule.max_port)
def test_valid_ipv4_addresses(self):
test_inputs = {
@@ -128,14 +128,14 @@ class TestExitPolicyRule(unittest.TestCase):
'255.255.255.255/0': ('255.255.255.255', '0.0.0.0', 0),
}
- for rule_addr, attr in test_inputs.items():
+ for rule_addr, attr in list(test_inputs.items()):
address, mask, masked_bits = attr
rule = ExitPolicyRule('accept %s:*' % rule_addr)
- self.assertEquals(AddressType.IPv4, rule.get_address_type())
- self.assertEquals(address, rule.address)
- self.assertEquals(mask, rule.get_mask())
- self.assertEquals(masked_bits, rule.get_masked_bits())
+ self.assertEqual(AddressType.IPv4, rule.get_address_type())
+ self.assertEqual(address, rule.address)
+ self.assertEqual(mask, rule.get_mask())
+ self.assertEqual(masked_bits, rule.get_masked_bits())
def test_invalid_ipv4_addresses(self):
test_inputs = (
@@ -167,14 +167,14 @@ class TestExitPolicyRule(unittest.TestCase):
'FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF', 128),
}
- for rule_addr, attr in test_inputs.items():
+ for rule_addr, attr in list(test_inputs.items()):
address, mask, masked_bits = attr
rule = ExitPolicyRule('accept %s:*' % rule_addr)
- self.assertEquals(AddressType.IPv6, rule.get_address_type())
- self.assertEquals(address, rule.address)
- self.assertEquals(mask, rule.get_mask())
- self.assertEquals(masked_bits, rule.get_masked_bits())
+ self.assertEqual(AddressType.IPv6, rule.get_address_type())
+ self.assertEqual(address, rule.address)
+ self.assertEqual(mask, rule.get_mask())
+ self.assertEqual(masked_bits, rule.get_masked_bits())
def test_invalid_ipv6_addresses(self):
test_inputs = (
@@ -199,12 +199,12 @@ class TestExitPolicyRule(unittest.TestCase):
'80-443': (80, 443),
}
- for rule_port, attr in test_inputs.items():
+ for rule_port, attr in list(test_inputs.items()):
min_port, max_port = attr
rule = ExitPolicyRule('accept 127.0.0.1:%s' % rule_port)
- self.assertEquals(min_port, rule.min_port)
- self.assertEquals(max_port, rule.max_port)
+ self.assertEqual(min_port, rule.min_port)
+ self.assertEqual(max_port, rule.max_port)
def test_invalid_ports(self):
test_inputs = (
@@ -246,12 +246,12 @@ class TestExitPolicyRule(unittest.TestCase):
},
}
- for rule_arg, matches in test_inputs.items():
+ for rule_arg, matches in list(test_inputs.items()):
rule = ExitPolicyRule(rule_arg)
rule._submask_wildcard = False
- for match_args, expected_result in matches.items():
- self.assertEquals(expected_result, rule.is_match(*match_args))
+ for match_args, expected_result in list(matches.items()):
+ self.assertEqual(expected_result, rule.is_match(*match_args))
# port zero is special in that exit policies can include it, but it's not
# something that we can match against
@@ -282,11 +282,11 @@ class TestExitPolicyRule(unittest.TestCase):
},
}
- for rule_arg, matches in test_inputs.items():
+ for rule_arg, matches in list(test_inputs.items()):
rule = ExitPolicyRule(rule_arg)
- for match_args, expected_result in matches.items():
- self.assertEquals(expected_result, rule.is_match(*match_args))
+ for match_args, expected_result in list(matches.items()):
+ self.assertEqual(expected_result, rule.is_match(*match_args))
def test_is_match_ipv6(self):
test_inputs = {
@@ -313,11 +313,11 @@ class TestExitPolicyRule(unittest.TestCase):
},
}
- for rule_arg, matches in test_inputs.items():
+ for rule_arg, matches in list(test_inputs.items()):
rule = ExitPolicyRule(rule_arg)
- for match_args, expected_result in matches.items():
- self.assertEquals(expected_result, rule.is_match(*match_args))
+ for match_args, expected_result in list(matches.items()):
+ self.assertEqual(expected_result, rule.is_match(*match_args))
def test_is_match_port(self):
test_inputs = {
@@ -341,8 +341,8 @@ class TestExitPolicyRule(unittest.TestCase):
},
}
- for rule_arg, matches in test_inputs.items():
+ for rule_arg, matches in list(test_inputs.items()):
rule = ExitPolicyRule(rule_arg)
- for match_args, expected_result in matches.items():
- self.assertEquals(expected_result, rule.is_match(*match_args))
+ for match_args, expected_result in list(matches.items()):
+ self.assertEqual(expected_result, rule.is_match(*match_args))
diff --git a/test/unit/response/authchallenge.py b/test/unit/response/authchallenge.py
index aa71ecc..2185ea8 100644
--- a/test/unit/response/authchallenge.py
+++ b/test/unit/response/authchallenge.py
@@ -45,7 +45,7 @@ class TestAuthChallengeResponse(unittest.TestCase):
auth_challenge_comp = VALID_RESPONSE.split()
- for index in xrange(1, len(auth_challenge_comp)):
+ for index in range(1, len(auth_challenge_comp)):
# Attempts to parse a message without this item. The first item is
# skipped because, without the 250 code, the message won't be
# constructed.
diff --git a/test/unit/response/control_line.py b/test/unit/response/control_line.py
index edccb2e..adcadf3 100644
--- a/test/unit/response/control_line.py
+++ b/test/unit/response/control_line.py
@@ -22,12 +22,12 @@ class TestControlLine(unittest.TestCase):
"""
line = stem.response.ControlLine("\"We're all mad here.\" says the grinning cat.")
- self.assertEquals(line.pop(True), "We're all mad here.")
- self.assertEquals(line.pop(), 'says')
- self.assertEquals(line.remainder(), 'the grinning cat.')
+ self.assertEqual(line.pop(True), "We're all mad here.")
+ self.assertEqual(line.pop(), 'says')
+ self.assertEqual(line.remainder(), 'the grinning cat.')
line = stem.response.ControlLine('"this has a \\" and \\\\ in it" foo=bar more_data')
- self.assertEquals(line.pop(True, True), 'this has a " and \\ in it')
+ self.assertEqual(line.pop(True, True), 'this has a " and \\ in it')
def test_string(self):
"""
@@ -35,12 +35,12 @@ class TestControlLine(unittest.TestCase):
"""
line = stem.response.ControlLine(PROTOCOLINFO_RESPONSE[0])
- self.assertEquals(line, 'PROTOCOLINFO 1')
+ self.assertEqual(line, 'PROTOCOLINFO 1')
self.assertTrue(line.startswith('PROTOCOLINFO '))
# checks that popping items doesn't effect us
line.pop()
- self.assertEquals(line, 'PROTOCOLINFO 1')
+ self.assertEqual(line, 'PROTOCOLINFO 1')
self.assertTrue(line.startswith('PROTOCOLINFO '))
def test_general_usage(self):
@@ -50,35 +50,35 @@ class TestControlLine(unittest.TestCase):
# pops a series of basic, space separated entries
line = stem.response.ControlLine(PROTOCOLINFO_RESPONSE[0])
- self.assertEquals(line.remainder(), 'PROTOCOLINFO 1')
+ self.assertEqual(line.remainder(), 'PROTOCOLINFO 1')
self.assertFalse(line.is_empty())
self.assertFalse(line.is_next_quoted())
self.assertFalse(line.is_next_mapping())
- self.assertEquals(None, line.peek_key())
+ self.assertEqual(None, line.peek_key())
self.assertRaises(ValueError, line.pop_mapping)
- self.assertEquals(line.pop(), 'PROTOCOLINFO')
- self.assertEquals(line.remainder(), '1')
+ self.assertEqual(line.pop(), 'PROTOCOLINFO')
+ self.assertEqual(line.remainder(), '1')
self.assertFalse(line.is_empty())
self.assertFalse(line.is_next_quoted())
self.assertFalse(line.is_next_mapping())
- self.assertEquals(None, line.peek_key())
+ self.assertEqual(None, line.peek_key())
self.assertRaises(ValueError, line.pop_mapping)
- self.assertEquals(line.pop(), '1')
- self.assertEquals(line.remainder(), '')
+ self.assertEqual(line.pop(), '1')
+ self.assertEqual(line.remainder(), '')
self.assertTrue(line.is_empty())
self.assertFalse(line.is_next_quoted())
self.assertFalse(line.is_next_mapping())
- self.assertEquals(None, line.peek_key())
+ self.assertEqual(None, line.peek_key())
self.assertRaises(IndexError, line.pop_mapping)
self.assertRaises(IndexError, line.pop)
- self.assertEquals(line.remainder(), '')
+ self.assertEqual(line.remainder(), '')
self.assertTrue(line.is_empty())
self.assertFalse(line.is_next_quoted())
self.assertFalse(line.is_next_mapping())
- self.assertEquals(None, line.peek_key())
+ self.assertEqual(None, line.peek_key())
def test_pop_mapping(self):
"""
@@ -89,32 +89,32 @@ class TestControlLine(unittest.TestCase):
version_entry = 'Tor="0.2.1.30 (0a083b0188cacd2f07838ff0446113bd5211a024)"'
line = stem.response.ControlLine(version_entry)
- self.assertEquals(line.remainder(), version_entry)
+ self.assertEqual(line.remainder(), version_entry)
self.assertFalse(line.is_empty())
self.assertFalse(line.is_next_quoted())
self.assertTrue(line.is_next_mapping())
self.assertTrue(line.is_next_mapping(key = 'Tor'))
self.assertTrue(line.is_next_mapping(key = 'Tor', quoted = True))
self.assertTrue(line.is_next_mapping(quoted = True))
- self.assertEquals('Tor', line.peek_key())
+ self.assertEqual('Tor', line.peek_key())
# try popping this as a non-quoted mapping
- self.assertEquals(line.pop_mapping(), ('Tor', '"0.2.1.30'))
- self.assertEquals(line.remainder(), '(0a083b0188cacd2f07838ff0446113bd5211a024)"')
+ self.assertEqual(line.pop_mapping(), ('Tor', '"0.2.1.30'))
+ self.assertEqual(line.remainder(), '(0a083b0188cacd2f07838ff0446113bd5211a024)"')
self.assertFalse(line.is_empty())
self.assertFalse(line.is_next_quoted())
self.assertFalse(line.is_next_mapping())
self.assertRaises(ValueError, line.pop_mapping)
- self.assertEquals(None, line.peek_key())
+ self.assertEqual(None, line.peek_key())
# try popping this as a quoted mapping
line = stem.response.ControlLine(version_entry)
- self.assertEquals(line.pop_mapping(True), ('Tor', '0.2.1.30 (0a083b0188cacd2f07838ff0446113bd5211a024)'))
- self.assertEquals(line.remainder(), '')
+ self.assertEqual(line.pop_mapping(True), ('Tor', '0.2.1.30 (0a083b0188cacd2f07838ff0446113bd5211a024)'))
+ self.assertEqual(line.remainder(), '')
self.assertTrue(line.is_empty())
self.assertFalse(line.is_next_quoted())
self.assertFalse(line.is_next_mapping())
- self.assertEquals(None, line.peek_key())
+ self.assertEqual(None, line.peek_key())
def test_escapes(self):
"""
@@ -125,13 +125,13 @@ class TestControlLine(unittest.TestCase):
auth_line = PROTOCOLINFO_RESPONSE[1]
line = stem.response.ControlLine(auth_line)
- self.assertEquals(line, auth_line)
- self.assertEquals(line.remainder(), auth_line)
+ self.assertEqual(line, auth_line)
+ self.assertEqual(line.remainder(), auth_line)
- self.assertEquals(line.pop(), 'AUTH')
- self.assertEquals(line.pop_mapping(), ('METHODS', 'COOKIE'))
+ self.assertEqual(line.pop(), 'AUTH')
+ self.assertEqual(line.pop_mapping(), ('METHODS', 'COOKIE'))
- self.assertEquals(line.remainder(), r'COOKIEFILE="/tmp/my data\\\"dir//control_auth_cookie"')
+ self.assertEqual(line.remainder(), r'COOKIEFILE="/tmp/my data\\\"dir//control_auth_cookie"')
self.assertTrue(line.is_next_mapping())
self.assertTrue(line.is_next_mapping(key = 'COOKIEFILE'))
self.assertTrue(line.is_next_mapping(quoted = True))
@@ -139,36 +139,36 @@ class TestControlLine(unittest.TestCase):
cookie_file_entry = line.remainder()
# try a general pop
- self.assertEquals(line.pop(), 'COOKIEFILE="/tmp/my')
- self.assertEquals(line.pop(), r'data\\\"dir//control_auth_cookie"')
+ self.assertEqual(line.pop(), 'COOKIEFILE="/tmp/my')
+ self.assertEqual(line.pop(), r'data\\\"dir//control_auth_cookie"')
self.assertTrue(line.is_empty())
# try a general pop with escapes
line = stem.response.ControlLine(cookie_file_entry)
- self.assertEquals(line.pop(escaped = True), 'COOKIEFILE="/tmp/my')
- self.assertEquals(line.pop(escaped = True), r'data\"dir//control_auth_cookie"')
+ self.assertEqual(line.pop(escaped = True), 'COOKIEFILE="/tmp/my')
+ self.assertEqual(line.pop(escaped = True), r'data\"dir//control_auth_cookie"')
self.assertTrue(line.is_empty())
# try a mapping pop
line = stem.response.ControlLine(cookie_file_entry)
- self.assertEquals(line.pop_mapping(), ('COOKIEFILE', '"/tmp/my'))
- self.assertEquals(line.remainder(), r'data\\\"dir//control_auth_cookie"')
+ self.assertEqual(line.pop_mapping(), ('COOKIEFILE', '"/tmp/my'))
+ self.assertEqual(line.remainder(), r'data\\\"dir//control_auth_cookie"')
self.assertFalse(line.is_empty())
# try a quoted mapping pop (this should trip up on the escaped quote)
line = stem.response.ControlLine(cookie_file_entry)
- self.assertEquals(line.pop_mapping(True), ('COOKIEFILE', '/tmp/my data\\\\\\'))
- self.assertEquals(line.remainder(), 'dir//control_auth_cookie"')
+ self.assertEqual(line.pop_mapping(True), ('COOKIEFILE', '/tmp/my data\\\\\\'))
+ self.assertEqual(line.remainder(), 'dir//control_auth_cookie"')
self.assertFalse(line.is_empty())
# try an escaped quoted mapping pop
line = stem.response.ControlLine(cookie_file_entry)
- self.assertEquals(line.pop_mapping(True, True), ('COOKIEFILE', r'/tmp/my data\"dir//control_auth_cookie'))
+ self.assertEqual(line.pop_mapping(True, True), ('COOKIEFILE', r'/tmp/my data\"dir//control_auth_cookie'))
self.assertTrue(line.is_empty())
# try an escaped slash followed by a character that could be part of an
# escape sequence
line = stem.response.ControlLine(r'COOKIEFILE="C:\\Users\\Atagar\\AppData\\tor\\control_auth_cookie"')
- self.assertEquals(line.pop_mapping(True, True), ('COOKIEFILE', r'C:\Users\Atagar\AppData\tor\control_auth_cookie'))
+ self.assertEqual(line.pop_mapping(True, True), ('COOKIEFILE', r'C:\Users\Atagar\AppData\tor\control_auth_cookie'))
self.assertTrue(line.is_empty())
diff --git a/test/unit/response/control_message.py b/test/unit/response/control_message.py
index 91b7fbd..c0fb2f3 100644
--- a/test/unit/response/control_message.py
+++ b/test/unit/response/control_message.py
@@ -3,9 +3,13 @@ Unit tests for the stem.response.ControlMessage parsing and class.
"""
import socket
-import StringIO
import unittest
+try:
+ from StringIO import StringIO
+except:
+ from io import StringIO
+
import stem.socket
import stem.response
import stem.response.getinfo
@@ -50,11 +54,11 @@ class TestControlMessage(unittest.TestCase):
"""
message = self._assert_message_parses(OK_REPLY)
- self.assertEquals('OK', str(message))
+ self.assertEqual('OK', str(message))
contents = message.content()
- self.assertEquals(1, len(contents))
- self.assertEquals(('250', ' ', 'OK'), contents[0])
+ self.assertEqual(1, len(contents))
+ self.assertEqual(('250', ' ', 'OK'), contents[0])
def test_event_response(self):
"""
@@ -63,20 +67,20 @@ class TestControlMessage(unittest.TestCase):
# BW event
message = self._assert_message_parses(EVENT_BW)
- self.assertEquals('BW 32326 2856', str(message))
+ self.assertEqual('BW 32326 2856', str(message))
contents = message.content()
- self.assertEquals(1, len(contents))
- self.assertEquals(('650', ' ', 'BW 32326 2856'), contents[0])
+ self.assertEqual(1, len(contents))
+ self.assertEqual(('650', ' ', 'BW 32326 2856'), contents[0])
# few types of CIRC events
for circ_content in (EVENT_CIRC_TIMEOUT, EVENT_CIRC_LAUNCHED, EVENT_CIRC_EXTENDED):
message = self._assert_message_parses(circ_content)
- self.assertEquals(circ_content[4:-2], str(message))
+ self.assertEqual(circ_content[4:-2], str(message))
contents = message.content()
- self.assertEquals(1, len(contents))
- self.assertEquals(('650', ' ', str(message)), contents[0])
+ self.assertEqual(1, len(contents))
+ self.assertEqual(('650', ' ', str(message)), contents[0])
def test_getinfo_response(self):
"""
@@ -85,27 +89,27 @@ class TestControlMessage(unittest.TestCase):
# GETINFO version (basic single-line results)
message = self._assert_message_parses(GETINFO_VERSION)
- self.assertEquals(2, len(list(message)))
- self.assertEquals(2, len(str(message).splitlines()))
+ self.assertEqual(2, len(list(message)))
+ self.assertEqual(2, len(str(message).splitlines()))
# manually checks the contents
contents = message.content()
- self.assertEquals(2, len(contents))
- self.assertEquals(('250', '-', 'version=0.2.2.23-alpha (git-b85eb949b528f4d7)'), contents[0])
- self.assertEquals(('250', ' ', 'OK'), contents[1])
+ self.assertEqual(2, len(contents))
+ self.assertEqual(('250', '-', 'version=0.2.2.23-alpha (git-b85eb949b528f4d7)'), contents[0])
+ self.assertEqual(('250', ' ', 'OK'), contents[1])
# GETINFO info/names (data entry)
message = self._assert_message_parses(GETINFO_INFONAMES)
- self.assertEquals(2, len(list(message)))
- self.assertEquals(8, len(str(message).splitlines()))
+ self.assertEqual(2, len(list(message)))
+ self.assertEqual(8, len(str(message).splitlines()))
# manually checks the contents
contents = message.content()
- self.assertEquals(2, len(contents))
+ self.assertEqual(2, len(contents))
first_entry = (contents[0][0], contents[0][1], contents[0][2][:contents[0][2].find('\n')])
- self.assertEquals(('250', '+', 'info/names='), first_entry)
- self.assertEquals(('250', ' ', 'OK'), contents[1])
+ self.assertEqual(('250', '+', 'info/names='), first_entry)
+ self.assertEqual(('250', ' ', 'OK'), contents[1])
def test_no_crlf(self):
"""
@@ -124,7 +128,7 @@ class TestControlMessage(unittest.TestCase):
for index, line in enumerate(infonames_lines):
# replace the CRLF for the line
infonames_lines[index] = line.rstrip('\r\n') + '\n'
- test_socket_file = StringIO.StringIO(''.join(infonames_lines))
+ test_socket_file = StringIO(''.join(infonames_lines))
self.assertRaises(stem.ProtocolError, stem.socket.recv_message, test_socket_file)
# puts the CRLF back
@@ -150,8 +154,8 @@ class TestControlMessage(unittest.TestCase):
# - this is part of the message prefix
# - this is disrupting the line ending
- self.assertRaises(stem.ProtocolError, stem.socket.recv_message, StringIO.StringIO(removal_test_input))
- self.assertRaises(stem.ProtocolError, stem.socket.recv_message, StringIO.StringIO(replacement_test_input))
+ self.assertRaises(stem.ProtocolError, stem.socket.recv_message, StringIO(removal_test_input))
+ self.assertRaises(stem.ProtocolError, stem.socket.recv_message, StringIO(replacement_test_input))
else:
# otherwise the data will be malformed, but this goes undetected
self._assert_message_parses(removal_test_input)
@@ -175,7 +179,7 @@ class TestControlMessage(unittest.TestCase):
stem.response.ControlMessage for the given input
"""
- message = stem.socket.recv_message(StringIO.StringIO(controller_reply))
+ message = stem.socket.recv_message(StringIO(controller_reply))
# checks that the raw_content equals the input value
self.assertEqual(controller_reply, message.raw_content())
diff --git a/test/unit/response/events.py b/test/unit/response/events.py
index 054a9ff..2e5ef50 100644
--- a/test/unit/response/events.py
+++ b/test/unit/response/events.py
@@ -395,7 +395,7 @@ class TestEvents(unittest.TestCase):
self.assertEqual('sent: 25, received: 15', msg)
def event_sender():
- for index in xrange(3):
+ for index in range(3):
print_bw(_get_event('650 BW 15 25'))
time.sleep(0.05)
diff --git a/test/unit/response/protocolinfo.py b/test/unit/response/protocolinfo.py
index fa87a0d..4dcf291 100644
--- a/test/unit/response/protocolinfo.py
+++ b/test/unit/response/protocolinfo.py
@@ -72,7 +72,7 @@ class TestProtocolInfoResponse(unittest.TestCase):
# exercise some of the ControlMessage functionality
raw_content = (NO_AUTH + '\n').replace('\n', '\r\n')
- self.assertEquals(raw_content, control_message.raw_content())
+ self.assertEqual(raw_content, control_message.raw_content())
self.assertTrue(str(control_message).startswith('PROTOCOLINFO 1'))
# attempt to convert the wrong type
@@ -90,11 +90,11 @@ class TestProtocolInfoResponse(unittest.TestCase):
control_message = mocking.get_message(NO_AUTH)
stem.response.convert('PROTOCOLINFO', control_message)
- self.assertEquals(1, control_message.protocol_version)
- self.assertEquals(stem.version.Version('0.2.1.30'), control_message.tor_version)
- self.assertEquals((AuthMethod.NONE, ), control_message.auth_methods)
- self.assertEquals((), control_message.unknown_auth_methods)
- self.assertEquals(None, control_message.cookie_path)
+ self.assertEqual(1, control_message.protocol_version)
+ self.assertEqual(stem.version.Version('0.2.1.30'), control_message.tor_version)
+ self.assertEqual((AuthMethod.NONE, ), control_message.auth_methods)
+ self.assertEqual((), control_message.unknown_auth_methods)
+ self.assertEqual(None, control_message.cookie_path)
def test_password_auth(self):
"""
@@ -103,7 +103,7 @@ class TestProtocolInfoResponse(unittest.TestCase):
control_message = mocking.get_message(PASSWORD_AUTH)
stem.response.convert('PROTOCOLINFO', control_message)
- self.assertEquals((AuthMethod.PASSWORD, ), control_message.auth_methods)
+ self.assertEqual((AuthMethod.PASSWORD, ), control_message.auth_methods)
def test_cookie_auth(self):
"""
@@ -113,8 +113,8 @@ class TestProtocolInfoResponse(unittest.TestCase):
control_message = mocking.get_message(COOKIE_AUTH)
stem.response.convert('PROTOCOLINFO', control_message)
- self.assertEquals((AuthMethod.COOKIE, ), control_message.auth_methods)
- self.assertEquals('/tmp/my data\\"dir//control_auth_cookie', control_message.cookie_path)
+ self.assertEqual((AuthMethod.COOKIE, ), control_message.auth_methods)
+ self.assertEqual('/tmp/my data\\"dir//control_auth_cookie', control_message.cookie_path)
def test_multiple_auth(self):
"""
@@ -123,8 +123,8 @@ class TestProtocolInfoResponse(unittest.TestCase):
control_message = mocking.get_message(MULTIPLE_AUTH)
stem.response.convert('PROTOCOLINFO', control_message)
- self.assertEquals((AuthMethod.COOKIE, AuthMethod.PASSWORD), control_message.auth_methods)
- self.assertEquals('/home/atagar/.tor/control_auth_cookie', control_message.cookie_path)
+ self.assertEqual((AuthMethod.COOKIE, AuthMethod.PASSWORD), control_message.auth_methods)
+ self.assertEqual('/home/atagar/.tor/control_auth_cookie', control_message.cookie_path)
def test_unknown_auth(self):
"""
@@ -133,8 +133,8 @@ class TestProtocolInfoResponse(unittest.TestCase):
control_message = mocking.get_message(UNKNOWN_AUTH)
stem.response.convert('PROTOCOLINFO', control_message)
- self.assertEquals((AuthMethod.UNKNOWN, AuthMethod.PASSWORD), control_message.auth_methods)
- self.assertEquals(('MAGIC', 'PIXIE_DUST'), control_message.unknown_auth_methods)
+ self.assertEqual((AuthMethod.UNKNOWN, AuthMethod.PASSWORD), control_message.auth_methods)
+ self.assertEqual(('MAGIC', 'PIXIE_DUST'), control_message.unknown_auth_methods)
def test_minimum_response(self):
"""
@@ -145,11 +145,11 @@ class TestProtocolInfoResponse(unittest.TestCase):
control_message = mocking.get_message(MINIMUM_RESPONSE)
stem.response.convert('PROTOCOLINFO', control_message)
- self.assertEquals(5, control_message.protocol_version)
- self.assertEquals(None, control_message.tor_version)
- self.assertEquals((), control_message.auth_methods)
- self.assertEquals((), control_message.unknown_auth_methods)
- self.assertEquals(None, control_message.cookie_path)
+ self.assertEqual(5, control_message.protocol_version)
+ self.assertEqual(None, control_message.tor_version)
+ self.assertEqual((), control_message.auth_methods)
+ self.assertEqual((), control_message.unknown_auth_methods)
+ self.assertEqual(None, control_message.cookie_path)
@patch('stem.util.proc.is_available', Mock(return_value = False))
@patch('stem.util.system.is_available', Mock(return_value = True))
@@ -178,7 +178,7 @@ class TestProtocolInfoResponse(unittest.TestCase):
stem.connection._expand_cookie_path(control_message, stem.util.system.pid_by_name, 'tor')
- self.assertEquals(os.path.join('/tmp/foo', 'tor-browser_en-US', 'Data', 'control_auth_cookie'), control_message.cookie_path)
+ self.assertEqual(os.path.join('/tmp/foo', 'tor-browser_en-US', 'Data', 'control_auth_cookie'), control_message.cookie_path)
# exercise cookie expansion where both calls fail (should work, just
# leaving the path unexpanded)
@@ -186,4 +186,4 @@ class TestProtocolInfoResponse(unittest.TestCase):
with patch('stem.util.system.call', Mock(return_value = None)):
control_message = mocking.get_message(RELATIVE_COOKIE_PATH)
stem.response.convert('PROTOCOLINFO', control_message)
- self.assertEquals('./tor-browser_en-US/Data/control_auth_cookie', control_message.cookie_path)
+ self.assertEqual('./tor-browser_en-US/Data/control_auth_cookie', control_message.cookie_path)
diff --git a/test/unit/tutorial.py b/test/unit/tutorial.py
index 5a861b6..883c4a7 100644
--- a/test/unit/tutorial.py
+++ b/test/unit/tutorial.py
@@ -3,7 +3,6 @@ Tests for the examples given in stem's tutorial.
"""
import io
-import StringIO
import unittest
from stem.control import Controller
@@ -14,8 +13,10 @@ from test import mocking
try:
# added in python 3.3
from unittest.mock import Mock, patch
+ from io import StringIO
except ImportError:
from mock import Mock, patch
+ from StringIO import StringIO
OVER_THE_RIVER_OUTPUT = """\
* Connecting to tor
@@ -32,7 +33,7 @@ MIRROR_MIRROR_OUTPUT = """\
class TestTutorial(unittest.TestCase):
- @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('sys.stdout', new_callable = StringIO)
@patch('stem.control.Controller.from_port', spec = Controller)
def test_the_little_relay_that_could(self, from_port_mock, stdout_mock):
def tutorial_example():
@@ -44,7 +45,7 @@ class TestTutorial(unittest.TestCase):
bytes_read = controller.get_info('traffic/read')
bytes_written = controller.get_info('traffic/written')
- print 'My Tor relay has read %s bytes and written %s.' % (bytes_read, bytes_written)
+ print('My Tor relay has read %s bytes and written %s.' % (bytes_read, bytes_written))
controller = from_port_mock().__enter__()
controller.get_info.side_effect = lambda arg: {
@@ -55,7 +56,7 @@ class TestTutorial(unittest.TestCase):
tutorial_example()
self.assertEqual('My Tor relay has read 33406 bytes and written 29649.\n', stdout_mock.getvalue())
- @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('sys.stdout', new_callable = StringIO)
@patch('shutil.rmtree')
@patch('stem.control.Controller.from_port', spec = Controller)
def test_over_the_river(self, from_port_mock, rmtree_mock, stdout_mock):
@@ -69,7 +70,7 @@ class TestTutorial(unittest.TestCase):
def index():
return "<h1>Hi Grandma!</h1>"
- print ' * Connecting to tor'
+ print(' * Connecting to tor')
with Controller.from_port() as controller:
controller.authenticate()
@@ -82,16 +83,16 @@ class TestTutorial(unittest.TestCase):
# Create a hidden service where visitors of port 80 get redirected to local
# port 5000 (this is where flask runs by default).
- print " * Creating our hidden service in %s" % hidden_service_dir
+ print(" * Creating our hidden service in %s" % hidden_service_dir)
result = controller.create_hidden_service(hidden_service_dir, 80, target_port = 5000)
# The hostname is only available we can read the hidden service directory.
# This requires us to be running with the same user as tor.
if result.hostname:
- print " * Our service is available at %s, press ctrl+c to quit" % result.hostname
+ print(" * Our service is available at %s, press ctrl+c to quit" % result.hostname)
else:
- print " * Unable to determine our service's hostname, probably due to being unable to read the hidden service directory"
+ print(" * Unable to determine our service's hostname, probably due to being unable to read the hidden service directory")
try:
app.run()
@@ -100,7 +101,7 @@ class TestTutorial(unittest.TestCase):
# want to delete the hidden service directory if you'd like to have this
# same *.onion address in the future.
- print " * Shutting down our hidden service"
+ print(" * Shutting down our hidden service")
controller.remove_hidden_service(hidden_service_dir)
shutil.rmtree(hidden_service_dir)
@@ -121,7 +122,7 @@ class TestTutorial(unittest.TestCase):
self.assertEqual(OVER_THE_RIVER_OUTPUT, stdout_mock.getvalue())
- @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('sys.stdout', new_callable = StringIO)
@patch('stem.descriptor.remote.DescriptorDownloader')
def test_mirror_mirror_on_the_wall_1(self, downloader_mock, stdout_mock):
def tutorial_example():
@@ -131,16 +132,16 @@ class TestTutorial(unittest.TestCase):
try:
for desc in downloader.get_consensus().run():
- print 'found relay %s (%s)' % (desc.nickname, desc.fingerprint)
+ print('found relay %s (%s)' % (desc.nickname, desc.fingerprint))
except Exception as exc:
- print 'Unable to retrieve the consensus: %s' % exc
+ print('Unable to retrieve the consensus: %s' % exc)
downloader_mock().get_consensus().run.return_value = [mocking.get_router_status_entry_v2()]
tutorial_example()
self.assertEqual('found relay caerSidi (A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB)\n', stdout_mock.getvalue())
- @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('sys.stdout', new_callable = StringIO)
@patch('stem.control.Controller.from_port', spec = Controller)
def test_mirror_mirror_on_the_wall_2(self, from_port_mock, stdout_mock):
def tutorial_example():
@@ -150,7 +151,7 @@ class TestTutorial(unittest.TestCase):
controller.authenticate()
for desc in controller.get_network_statuses():
- print 'found relay %s (%s)' % (desc.nickname, desc.fingerprint)
+ print('found relay %s (%s)' % (desc.nickname, desc.fingerprint))
controller = from_port_mock().__enter__()
controller.get_network_statuses.return_value = [mocking.get_router_status_entry_v2()]
@@ -158,14 +159,14 @@ class TestTutorial(unittest.TestCase):
tutorial_example()
self.assertEqual('found relay caerSidi (A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB)\n', stdout_mock.getvalue())
- @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('sys.stdout', new_callable = StringIO)
@patch('%s.open' % __name__, create = True)
def test_mirror_mirror_on_the_wall_3(self, open_mock, stdout_mock):
def tutorial_example():
from stem.descriptor import parse_file
for desc in parse_file(open('/home/atagar/.tor/cached-consensus')):
- print 'found relay %s (%s)' % (desc.nickname, desc.fingerprint)
+ print('found relay %s (%s)' % (desc.nickname, desc.fingerprint))
test_file = io.BytesIO(mocking.get_network_status_document_v3(
routers = [mocking.get_router_status_entry_v3()],
@@ -178,7 +179,7 @@ class TestTutorial(unittest.TestCase):
tutorial_example()
self.assertEqual('found relay caerSidi (A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB)\n', stdout_mock.getvalue())
- @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('sys.stdout', new_callable = StringIO)
@patch('stem.descriptor.reader.DescriptorReader', spec = DescriptorReader)
def test_mirror_mirror_on_the_wall_4(self, reader_mock, stdout_mock):
def tutorial_example():
@@ -186,7 +187,7 @@ class TestTutorial(unittest.TestCase):
with DescriptorReader(['/home/atagar/server-descriptors-2013-03.tar']) as reader:
for desc in reader:
- print 'found relay %s (%s)' % (desc.nickname, desc.fingerprint)
+ print('found relay %s (%s)' % (desc.nickname, desc.fingerprint))
reader = reader_mock().__enter__()
reader.__iter__.return_value = iter([mocking.get_relay_server_descriptor()])
@@ -194,7 +195,7 @@ class TestTutorial(unittest.TestCase):
tutorial_example()
self.assertEqual('found relay caerSidi (None)\n', stdout_mock.getvalue())
- @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('sys.stdout', new_callable = StringIO)
@patch('stem.descriptor.remote.DescriptorDownloader')
@patch('stem.descriptor.server_descriptor.RelayDescriptor._verify_digest', Mock())
def test_mirror_mirror_on_the_wall_5(self, downloader_mock, stdout_mock):
@@ -213,7 +214,7 @@ class TestTutorial(unittest.TestCase):
if desc.exit_policy.is_exiting_allowed():
bw_to_relay.setdefault(desc.observed_bandwidth, []).append(desc.nickname)
except Exception as exc:
- print 'Unable to retrieve the server descriptors: %s' % exc
+ print('Unable to retrieve the server descriptors: %s' % exc)
return bw_to_relay
@@ -222,9 +223,9 @@ class TestTutorial(unittest.TestCase):
bw_to_relay = get_bw_to_relay()
count = 1
- for bw_value in sorted(bw_to_relay.keys(), reverse = True):
+ for bw_value in sorted(list(bw_to_relay.keys()), reverse = True):
for nickname in bw_to_relay[bw_value]:
- print '%i. %s (%s/s)' % (count, nickname, str_tools.size_label(bw_value, 2))
+ print('%i. %s (%s/s)' % (count, nickname, str_tools.size_label(bw_value, 2)))
count += 1
if count > 15:
diff --git a/test/unit/tutorial_examples.py b/test/unit/tutorial_examples.py
index 0a64bff..b277192 100644
--- a/test/unit/tutorial_examples.py
+++ b/test/unit/tutorial_examples.py
@@ -4,9 +4,13 @@ Tests for the examples given in stem's tutorial.
import collections
import itertools
-import StringIO
import unittest
+try:
+ from StringIO import StringIO
+except ImportError:
+ from io import StringIO
+
import stem.response
import stem.descriptor.remote
@@ -25,6 +29,8 @@ try:
from unittest.mock import Mock, patch
except ImportError:
from mock import Mock, patch
+import sys
+oldstdout = sys.stdout
CIRC_CONTENT = '650 CIRC %d %s \
%s \
@@ -32,7 +38,7 @@ PURPOSE=%s'
PATH_CONTENT = '$%s=%s,$%s=%s,$%s=%s'
-LIST_CIRCUITS_OUTPUT = """\
+LIST_CIRCUITS_OUTPUT = u"""\
Circuit 4 (GENERAL)
|- B1FA7D51B8B6F0CB585D944F450E7C06EDE7E44C (ByTORAndTheSnowDog, 173.209.180.61)
@@ -50,7 +56,7 @@ Circuit 10 (GENERAL)
+- 65242C91BFF30F165DA4D132C81A9EBA94B71D62 (torexit16, 176.67.169.171)
"""
-EXIT_USED_OUTPUT = """\
+EXIT_USED_OUTPUT = u"""\
Tracking requests for tor exits. Press 'enter' to end.
Exit relay for our connection to 64.15.112.44:80
@@ -61,7 +67,7 @@ Exit relay for our connection to 64.15.112.44:80
"""
-OUTDATED_RELAYS_OUTPUT = """\
+OUTDATED_RELAYS_OUTPUT = u"""\
Checking for outdated relays...
0.1.0 Sambuddha Basu
@@ -127,7 +133,7 @@ def _get_router_status(address = None, port = None, nickname = None, fingerprint
class TestTutorialExamples(unittest.TestCase):
- @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('sys.stdout', new_callable = StringIO)
@patch('stem.control.Controller.from_port', spec = Controller)
def test_list_circuits(self, from_port_mock, stdout_mock):
def tutorial_example():
@@ -141,8 +147,7 @@ class TestTutorialExamples(unittest.TestCase):
if circ.status != CircStatus.BUILT:
continue
- print
- print "Circuit %s (%s)" % (circ.id, circ.purpose)
+ print("\nCircuit %s (%s)" % (circ.id, circ.purpose))
for i, entry in enumerate(circ.path):
div = '+' if (i == len(circ.path) - 1) else '|'
@@ -151,7 +156,7 @@ class TestTutorialExamples(unittest.TestCase):
desc = controller.get_network_status(fingerprint, None)
address = desc.address if desc else 'unknown'
- print " %s- %s (%s, %s)" % (div, fingerprint, nickname, address)
+ print(" %s- %s (%s, %s)" % (div, fingerprint, nickname, address))
path_1 = ('B1FA7D51B8B6F0CB585D944F450E7C06EDE7E44C', 'ByTORAndTheSnowDog')
path_2 = ('0DD9935C5E939CFA1E07B8DDA6D91C1A2A9D9338', 'afo02')
@@ -181,7 +186,7 @@ class TestTutorialExamples(unittest.TestCase):
tutorial_example()
self.assertEqual(LIST_CIRCUITS_OUTPUT, stdout_mock.getvalue())
- @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('sys.stdout', new_callable = StringIO)
@patch('stem.control.Controller.from_port', spec = Controller)
def test_exit_used(self, from_port_mock, stdout_mock):
def tutorial_example(mock_event):
@@ -191,8 +196,7 @@ class TestTutorialExamples(unittest.TestCase):
from stem.control import EventType, Controller
def main():
- print "Tracking requests for tor exits. Press 'enter' to end."
- print
+ print("Tracking requests for tor exits. Press 'enter' to end.\n")
with Controller.from_port() as controller:
controller.authenticate()
@@ -209,12 +213,11 @@ class TestTutorialExamples(unittest.TestCase):
exit_fingerprint = circ.path[-1][0]
exit_relay = controller.get_network_status(exit_fingerprint)
- print "Exit relay for our connection to %s" % (event.target)
- print " address: %s:%i" % (exit_relay.address, exit_relay.or_port)
- print " fingerprint: %s" % exit_relay.fingerprint
- print " nickname: %s" % exit_relay.nickname
- print " locale: %s" % controller.get_info("ip-to-country/%s" % exit_relay.address, 'unknown')
- print
+ print("Exit relay for our connection to %s" % (event.target))
+ print(" address: %s:%i" % (exit_relay.address, exit_relay.or_port))
+ print(" fingerprint: %s" % exit_relay.fingerprint)
+ print(" nickname: %s" % exit_relay.nickname)
+ print(" locale: %s\n" % controller.get_info("ip-to-country/%s" % exit_relay.address, 'unknown'))
main()
@@ -232,10 +235,9 @@ class TestTutorialExamples(unittest.TestCase):
controller.get_info.return_value = 'unknown'
tutorial_example(event)
-
self.assertEqual(EXIT_USED_OUTPUT, stdout_mock.getvalue())
- @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('sys.stdout', new_callable = StringIO)
@patch('stem.descriptor.remote.DescriptorDownloader')
def test_outdated_relays(self, downloader_mock, stdout_mock):
def tutorial_example():
@@ -245,19 +247,17 @@ class TestTutorialExamples(unittest.TestCase):
downloader = DescriptorDownloader()
count, with_contact = 0, 0
- print "Checking for outdated relays..."
- print
+ print("Checking for outdated relays...\n")
for desc in downloader.get_server_descriptors():
if desc.tor_version < Version('0.2.3.0'):
count += 1
if desc.contact:
- print ' %-15s %s' % (desc.tor_version, desc.contact.decode("utf-8", "replace"))
+ print(' %-15s %s' % (desc.tor_version, desc.contact.decode("utf-8", "replace")))
with_contact += 1
- print
- print "%i outdated relays found, %i had contact information" % (count, with_contact)
+ print("\n%i outdated relays found, %i had contact information" % (count, with_contact))
downloader_mock().get_server_descriptors.return_value = [
get_relay_server_descriptor({'platform': 'node-Tor 0.2.3.0 on Linux x86_64'}),
@@ -270,7 +270,7 @@ class TestTutorialExamples(unittest.TestCase):
self.assertEqual(OUTDATED_RELAYS_OUTPUT, stdout_mock.getvalue())
- @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('sys.stdout', new_callable = StringIO)
@patch('stem.descriptor.remote.Query')
@patch('stem.descriptor.remote.get_authorities')
def test_compare_flags(self, get_authorities_mock, query_mock, stdout_mock):
@@ -282,7 +282,7 @@ class TestTutorialExamples(unittest.TestCase):
downloader = remote.DescriptorDownloader(document_handler = DocumentHandler.DOCUMENT)
queries = collections.OrderedDict() # needed so output's order matches what's expected
- for name, authority in remote.get_authorities().items():
+ for name, authority in list(remote.get_authorities().items()):
if authority.v3ident is None:
continue # authority doens't vote if it lacks a v3ident
@@ -291,14 +291,14 @@ class TestTutorialExamples(unittest.TestCase):
# Wait for the votes to finish being downloaded, this produces a dictionary of
# authority nicknames to their vote.
- votes = dict((name, query.run()[0]) for (name, query) in queries.items())
+ votes = dict((name, query.run()[0]) for (name, query) in list(queries.items()))
# Get a superset of all the fingerprints in all the votes.
all_fingerprints = set()
- for vote in votes.values():
- all_fingerprints.update(vote.routers.keys())
+ for vote in list(votes.values()):
+ all_fingerprints.update(list(vote.routers.keys()))
# Finally, compare moria1's votes to maatuska.
@@ -307,15 +307,15 @@ class TestTutorialExamples(unittest.TestCase):
maatuska_vote = votes['maatuska'].routers.get(fingerprint)
if not moria1_vote and not maatuska_vote:
- print "both moria1 and maatuska haven't voted about %s" % fingerprint
+ print("both moria1 and maatuska haven't voted about %s" % fingerprint)
elif not moria1_vote:
- print "moria1 hasn't voted about %s" % fingerprint
+ print("moria1 hasn't voted about %s" % fingerprint)
elif not maatuska_vote:
- print "maatuska hasn't voted about %s" % fingerprint
+ print("maatuska hasn't voted about %s" % fingerprint)
elif 'Running' in moria1_vote.flags and 'Running' not in maatuska_vote.flags:
- print "moria1 has the Running flag but maatuska doesn't: %s" % fingerprint
+ print("moria1 has the Running flag but maatuska doesn't: %s" % fingerprint)
elif 'Running' in maatuska_vote.flags and 'Running' not in moria1_vote.flags:
- print "maatuska has the Running flag but moria1 doesn't: %s" % fingerprint
+ print("maatuska has the Running flag but moria1 doesn't: %s" % fingerprint)
get_authorities_mock().items.return_value = [('moria1', DIRECTORY_AUTHORITIES['moria1']), ('maatuska', DIRECTORY_AUTHORITIES['maatuska'])]
@@ -353,7 +353,7 @@ class TestTutorialExamples(unittest.TestCase):
tutorial_example()
self.assertEqual(COMPARE_FLAGS_OUTPUT, stdout_mock.getvalue())
- @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('sys.stdout', new_callable = StringIO)
@patch('stem.descriptor.remote.get_authorities')
@patch('stem.descriptor.remote.DescriptorDownloader.query')
def test_votes_by_bandwidth_authorities(self, query_mock, get_authorities_mock, stdout_mock):
@@ -365,16 +365,16 @@ class TestTutorialExamples(unittest.TestCase):
queries = {}
downloader = remote.DescriptorDownloader()
- for authority in remote.get_authorities().values():
+ for authority in list(remote.get_authorities().values()):
if authority.is_bandwidth_authority:
queries[authority.nickname] = downloader.query(
'/tor/status-vote/current/authority',
endpoints = [(authority.address, authority.dir_port)],
)
- for authority_name, query in queries.items():
+ for authority_name, query in list(queries.items()):
try:
- print "Getting %s's vote from %s:" % (authority_name, query.download_url)
+ print("Getting %s's vote from %s:" % (authority_name, query.download_url))
measured, unmeasured = 0, 0
@@ -384,9 +384,9 @@ class TestTutorialExamples(unittest.TestCase):
else:
unmeasured += 1
- print ' %i measured entries and %i unmeasured' % (measured, unmeasured)
+ print(' %i measured entries and %i unmeasured' % (measured, unmeasured))
except Exception as exc:
- print " failed to get the vote (%s)" % exc
+ print(" failed to get the vote (%s)" % exc)
directory_values = [
DIRECTORY_AUTHORITIES['gabelmoo'],
@@ -422,7 +422,7 @@ class TestTutorialExamples(unittest.TestCase):
tutorial_example()
self.assertEqual(VOTES_BY_BANDWIDTH_AUTHORITIES_OUTPUT, stdout_mock.getvalue())
- @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('sys.stdout', new_callable = StringIO)
@patch('stem.descriptor.parse_file')
@patch('%s.open' % __name__, create = True)
@patch('stem.descriptor.remote.Query')
@@ -446,8 +446,8 @@ class TestTutorialExamples(unittest.TestCase):
document_handler = DocumentHandler.DOCUMENT,
))
- for fingerprint, relay in consensus.routers.items():
- print "%s: %s" % (fingerprint, relay.nickname)
+ for fingerprint, relay in list(consensus.routers.items()):
+ print("%s: %s" % (fingerprint, relay.nickname))
network_status = get_network_status_document_v3(routers = (get_router_status_entry_v3(),))
query_mock().run.return_value = [network_status]
diff --git a/test/unit/util/conf.py b/test/unit/util/conf.py
index 9519c8d..182e622 100644
--- a/test/unit/util/conf.py
+++ b/test/unit/util/conf.py
@@ -34,25 +34,25 @@ class TestConf(unittest.TestCase):
# checks that sync causes existing contents to be applied
test_config.set('bool_value', 'true')
my_config = stem.util.conf.config_dict('unit_testing', my_config)
- self.assertEquals(True, my_config['bool_value'])
+ self.assertEqual(True, my_config['bool_value'])
# check a basic synchronize
test_config.set('str_value', 'me')
- self.assertEquals('me', my_config['str_value'])
+ self.assertEqual('me', my_config['str_value'])
# synchronize with a type mismatch, should keep the old value
test_config.set('int_value', '7a')
- self.assertEquals(5, my_config['int_value'])
+ self.assertEqual(5, my_config['int_value'])
# changes for a collection
test_config.set('list_value', 'a', False)
- self.assertEquals(['a'], my_config['list_value'])
+ self.assertEqual(['a'], my_config['list_value'])
test_config.set('list_value', 'b', False)
- self.assertEquals(['a', 'b'], my_config['list_value'])
+ self.assertEqual(['a', 'b'], my_config['list_value'])
test_config.set('list_value', 'c', False)
- self.assertEquals(['a', 'b', 'c'], my_config['list_value'])
+ self.assertEqual(['a', 'b', 'c'], my_config['list_value'])
def test_parse_enum(self):
"""
@@ -129,18 +129,18 @@ class TestConf(unittest.TestCase):
"""
test_config = stem.util.conf.get_config('unit_testing')
- self.assertEquals([], test_config.keys())
+ self.assertEqual([], list(test_config.keys()))
# tests clearing when we're already empty
test_config.clear()
- self.assertEquals([], test_config.keys())
+ self.assertEqual([], list(test_config.keys()))
# tests clearing when we have contents
test_config.set('hello', 'world')
- self.assertEquals(['hello'], test_config.keys())
+ self.assertEqual(['hello'], list(test_config.keys()))
test_config.clear()
- self.assertEquals([], test_config.keys())
+ self.assertEqual([], list(test_config.keys()))
def test_listeners(self):
"""
@@ -150,20 +150,20 @@ class TestConf(unittest.TestCase):
listener_received_keys = []
def test_listener(config, key):
- self.assertEquals(config, stem.util.conf.get_config('unit_testing'))
+ self.assertEqual(config, stem.util.conf.get_config('unit_testing'))
listener_received_keys.append(key)
test_config = stem.util.conf.get_config('unit_testing')
test_config.add_listener(test_listener)
- self.assertEquals([], listener_received_keys)
+ self.assertEqual([], listener_received_keys)
test_config.set('hello', 'world')
- self.assertEquals(['hello'], listener_received_keys)
+ self.assertEqual(['hello'], listener_received_keys)
test_config.clear_listeners()
test_config.set('foo', 'bar')
- self.assertEquals(['hello'], listener_received_keys)
+ self.assertEqual(['hello'], listener_received_keys)
def test_unused_keys(self):
"""
@@ -178,10 +178,10 @@ class TestConf(unittest.TestCase):
test_config.get('hello')
test_config.get_value('foo')
- self.assertEquals(set(['pw']), test_config.unused_keys())
+ self.assertEqual(set(['pw']), test_config.unused_keys())
test_config.get('pw')
- self.assertEquals(set(), test_config.unused_keys())
+ self.assertEqual(set(), test_config.unused_keys())
def test_get(self):
"""
@@ -200,27 +200,27 @@ class TestConf(unittest.TestCase):
# check that we get the default for type mismatch or missing values
- self.assertEquals(5, test_config.get('foo', 5))
- self.assertEquals(5, test_config.get('bool_value', 5))
+ self.assertEqual(5, test_config.get('foo', 5))
+ self.assertEqual(5, test_config.get('bool_value', 5))
# checks that we get a string when no default is supplied
- self.assertEquals('11', test_config.get('int_value'))
+ self.assertEqual('11', test_config.get('int_value'))
# exercise type casting for each of the supported types
- self.assertEquals(True, test_config.get('bool_value', False))
- self.assertEquals(11, test_config.get('int_value', 0))
- self.assertEquals(11.1, test_config.get('float_value', 0.0))
- self.assertEquals('world', test_config.get('str_value', ''))
- self.assertEquals(['a', 'b', 'c'], test_config.get('list_value', []))
- self.assertEquals(('a', 'b', 'c'), test_config.get('list_value', ()))
- self.assertEquals({'foo': 'bar'}, test_config.get('map_value', {}))
+ self.assertEqual(True, test_config.get('bool_value', False))
+ self.assertEqual(11, test_config.get('int_value', 0))
+ self.assertEqual(11.1, test_config.get('float_value', 0.0))
+ self.assertEqual('world', test_config.get('str_value', ''))
+ self.assertEqual(['a', 'b', 'c'], test_config.get('list_value', []))
+ self.assertEqual(('a', 'b', 'c'), test_config.get('list_value', ()))
+ self.assertEqual({'foo': 'bar'}, test_config.get('map_value', {}))
# the get_value is similar, though only provides back a string or list
- self.assertEquals('c', test_config.get_value('list_value'))
- self.assertEquals(['a', 'b', 'c'], test_config.get_value('list_value', multiple = True))
+ self.assertEqual('c', test_config.get_value('list_value'))
+ self.assertEqual(['a', 'b', 'c'], test_config.get_value('list_value', multiple = True))
- self.assertEquals(None, test_config.get_value('foo'))
- self.assertEquals('hello', test_config.get_value('foo', 'hello'))
+ self.assertEqual(None, test_config.get_value('foo'))
+ self.assertEqual('hello', test_config.get_value('foo', 'hello'))
diff --git a/test/unit/util/connection.py b/test/unit/util/connection.py
index f0359eb..710122b 100644
--- a/test/unit/util/connection.py
+++ b/test/unit/util/connection.py
@@ -403,8 +403,8 @@ class TestConnection(unittest.TestCase):
'1::1': '0001:0000:0000:0000:0000:0000:0000:0001',
}
- for test_arg, expected in test_values.items():
- self.assertEquals(expected, stem.util.connection.expand_ipv6_address(test_arg))
+ for test_arg, expected in list(test_values.items()):
+ self.assertEqual(expected, stem.util.connection.expand_ipv6_address(test_arg))
self.assertRaises(ValueError, stem.util.connection.expand_ipv6_address, '127.0.0.1')
@@ -413,10 +413,10 @@ class TestConnection(unittest.TestCase):
Checks the get_mask_ipv4 function.
"""
- self.assertEquals('255.255.255.255', stem.util.connection.get_mask_ipv4(32))
- self.assertEquals('255.255.255.248', stem.util.connection.get_mask_ipv4(29))
- self.assertEquals('255.255.254.0', stem.util.connection.get_mask_ipv4(23))
- self.assertEquals('0.0.0.0', stem.util.connection.get_mask_ipv4(0))
+ self.assertEqual('255.255.255.255', stem.util.connection.get_mask_ipv4(32))
+ self.assertEqual('255.255.255.248', stem.util.connection.get_mask_ipv4(29))
+ self.assertEqual('255.255.254.0', stem.util.connection.get_mask_ipv4(23))
+ self.assertEqual('0.0.0.0', stem.util.connection.get_mask_ipv4(0))
self.assertRaises(ValueError, stem.util.connection.get_mask_ipv4, -1)
self.assertRaises(ValueError, stem.util.connection.get_mask_ipv4, 33)
@@ -426,9 +426,9 @@ class TestConnection(unittest.TestCase):
Checks the get_mask_ipv6 function.
"""
- self.assertEquals('FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF', stem.util.connection.get_mask_ipv6(128))
- self.assertEquals('FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFE:0000', stem.util.connection.get_mask_ipv6(111))
- self.assertEquals('0000:0000:0000:0000:0000:0000:0000:0000', stem.util.connection.get_mask_ipv6(0))
+ self.assertEqual('FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF', stem.util.connection.get_mask_ipv6(128))
+ self.assertEqual('FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFE:0000', stem.util.connection.get_mask_ipv6(111))
+ self.assertEqual('0000:0000:0000:0000:0000:0000:0000:0000', stem.util.connection.get_mask_ipv6(0))
self.assertRaises(ValueError, stem.util.connection.get_mask_ipv6, -1)
self.assertRaises(ValueError, stem.util.connection.get_mask_ipv6, 129)
@@ -438,10 +438,10 @@ class TestConnection(unittest.TestCase):
Checks the _get_masked_bits function.
"""
- self.assertEquals(32, stem.util.connection._get_masked_bits('255.255.255.255'))
- self.assertEquals(29, stem.util.connection._get_masked_bits('255.255.255.248'))
- self.assertEquals(23, stem.util.connection._get_masked_bits('255.255.254.0'))
- self.assertEquals(0, stem.util.connection._get_masked_bits('0.0.0.0'))
+ self.assertEqual(32, stem.util.connection._get_masked_bits('255.255.255.255'))
+ self.assertEqual(29, stem.util.connection._get_masked_bits('255.255.255.248'))
+ self.assertEqual(23, stem.util.connection._get_masked_bits('255.255.254.0'))
+ self.assertEqual(0, stem.util.connection._get_masked_bits('0.0.0.0'))
self.assertRaises(ValueError, stem.util.connection._get_masked_bits, 'blarg')
self.assertRaises(ValueError, stem.util.connection._get_masked_bits, '255.255.0.255')
@@ -462,8 +462,8 @@ class TestConnection(unittest.TestCase):
'2001:db8::ff00:42:8329': '00100000000000010000110110111000000000000000000000000000000000000000000000000000111111110000000000000000010000101000001100101001',
}
- for test_arg, expected in test_values.items():
- self.assertEquals(expected, stem.util.connection._get_address_binary(test_arg))
+ for test_arg, expected in list(test_values.items()):
+ self.assertEqual(expected, stem.util.connection._get_address_binary(test_arg))
self.assertRaises(ValueError, stem.util.connection._get_address_binary, '')
self.assertRaises(ValueError, stem.util.connection._get_address_binary, 'blarg')
diff --git a/test/unit/util/enum.py b/test/unit/util/enum.py
index 23f5b97..7be7a23 100644
--- a/test/unit/util/enum.py
+++ b/test/unit/util/enum.py
@@ -14,12 +14,12 @@ class TestEnum(unittest.TestCase):
"""
insects = stem.util.enum.Enum('ANT', 'WASP', 'LADYBUG', 'FIREFLY')
- self.assertEquals('Ant', insects.ANT)
- self.assertEquals(('Ant', 'Wasp', 'Ladybug', 'Firefly'), tuple(insects))
+ self.assertEqual('Ant', insects.ANT)
+ self.assertEqual(('Ant', 'Wasp', 'Ladybug', 'Firefly'), tuple(insects))
pets = stem.util.enum.Enum(('DOG', 'Skippy'), 'CAT', ('FISH', 'Nemo'))
- self.assertEquals('Skippy', pets.DOG)
- self.assertEquals('Cat', pets.CAT)
+ self.assertEqual('Skippy', pets.DOG)
+ self.assertEqual('Cat', pets.CAT)
def test_uppercase_enum_example(self):
"""
@@ -28,7 +28,7 @@ class TestEnum(unittest.TestCase):
"""
runlevels = stem.util.enum.UppercaseEnum('DEBUG', 'INFO', 'NOTICE', 'WARN', 'ERROR')
- self.assertEquals('DEBUG', runlevels.DEBUG)
+ self.assertEqual('DEBUG', runlevels.DEBUG)
def test_enum_methods(self):
"""
@@ -38,12 +38,12 @@ class TestEnum(unittest.TestCase):
insects = stem.util.enum.Enum('ANT', 'WASP', 'LADYBUG', 'FIREFLY')
# next method
- self.assertEquals(insects.WASP, insects.next(insects.ANT))
- self.assertEquals(insects.ANT, insects.next(insects.FIREFLY))
+ self.assertEqual(insects.WASP, insects.next(insects.ANT))
+ self.assertEqual(insects.ANT, insects.next(insects.FIREFLY))
# previous method
- self.assertEquals(insects.FIREFLY, insects.previous(insects.ANT))
- self.assertEquals(insects.LADYBUG, insects.previous(insects.FIREFLY))
+ self.assertEqual(insects.FIREFLY, insects.previous(insects.ANT))
+ self.assertEqual(insects.LADYBUG, insects.previous(insects.FIREFLY))
# keys method
- self.assertEquals(['ANT', 'WASP', 'LADYBUG', 'FIREFLY'], insects.keys())
+ self.assertEqual(['ANT', 'WASP', 'LADYBUG', 'FIREFLY'], list(insects.keys()))
diff --git a/test/unit/util/proc.py b/test/unit/util/proc.py
index c8defd7..a612895 100644
--- a/test/unit/util/proc.py
+++ b/test/unit/util/proc.py
@@ -2,7 +2,6 @@
Unit testing code for the stem.util.proc functions.
"""
-import StringIO
import unittest
from stem.util import proc
@@ -11,9 +10,10 @@ from test import mocking
try:
# added in python 3.3
from unittest.mock import Mock, patch
+ from io import StringIO
except ImportError:
from mock import Mock, patch
-
+ from StringIO import StringIO
class TestProc(unittest.TestCase):
@patch('stem.util.proc._get_line')
@@ -26,7 +26,7 @@ class TestProc(unittest.TestCase):
('/proc/stat', 'btime', 'system start time'): 'btime 1001001',
}[params]
- self.assertEquals(1001001, proc.system_start_time())
+ self.assertEqual(1001001, proc.system_start_time())
@patch('stem.util.proc._get_line')
def test_physical_memory(self, get_line_mock):
@@ -38,7 +38,7 @@ class TestProc(unittest.TestCase):
('/proc/meminfo', 'MemTotal:', 'system physical memory'): 'MemTotal: 12345 kB',
}[params]
- self.assertEquals((12345 * 1024), proc.physical_memory())
+ self.assertEqual((12345 * 1024), proc.physical_memory())
@patch('os.readlink')
def test_cwd(self, readlink_mock):
@@ -50,7 +50,7 @@ class TestProc(unittest.TestCase):
'/proc/24019/cwd': '/home/directory/TEST'
}[param]
- self.assertEquals('/home/directory/TEST', proc.cwd(24019))
+ self.assertEqual('/home/directory/TEST', proc.cwd(24019))
@patch('stem.util.proc._get_line')
def test_uid(self, get_line_mock):
@@ -65,7 +65,7 @@ class TestProc(unittest.TestCase):
('/proc/%s/status' % pid, 'Uid:', 'uid'): 'Uid: %s' % uid,
}[params]
- self.assertEquals(uid, proc.uid(pid))
+ self.assertEqual(uid, proc.uid(pid))
@patch('stem.util.proc._get_lines')
def test_memory_usage(self, get_lines_mock):
@@ -105,7 +105,7 @@ class TestProc(unittest.TestCase):
(stat_path, '24062', 'process '): stat
}[params]
- self.assertEquals((), proc.stats(24062))
+ self.assertEqual((), proc.stats(24062))
for stats in stat_combinations:
# the stats variable is...
@@ -114,13 +114,13 @@ class TestProc(unittest.TestCase):
# but we need...
# (arg1, arg2...), (resp1, resp2...).
- args, response = zip(*stats)
+ args, response = list(zip(*stats))
get_line_mock.side_effect = lambda *params: {
(stat_path, '24062', 'process %s' % ', '.join(args)): stat
}[params]
- self.assertEquals(response, proc.stats(24062, *args))
+ self.assertEqual(response, proc.stats(24062, *args))
# tests the case where pid = 0
@@ -141,7 +141,7 @@ class TestProc(unittest.TestCase):
('/proc/0/stat', '0', 'process %s' % ', '.join(args)): stat
}[params]
- self.assertEquals(response, proc.stats(0, *args))
+ self.assertEqual(response, proc.stats(0, *args))
@patch('os.listdir')
def test_file_descriptors_used(self, listdir_mock):
@@ -199,16 +199,16 @@ class TestProc(unittest.TestCase):
udp = '\n A: BBBBBBBB:BBBB CCCCCCCC:CCCC DD EEEEEEEE:EEEEEEEE FF:FFFFFFFF GGGGGGGG 1111 H IIIIIIII'
open_mock.side_effect = lambda param: {
- '/proc/net/tcp': StringIO.StringIO(tcp),
- '/proc/net/udp': StringIO.StringIO(udp)
+ '/proc/net/tcp': StringIO(tcp),
+ '/proc/net/udp': StringIO(udp)
}[param]
# tests the edge case of pid = 0
- self.assertEquals([], proc.connections(0))
+ self.assertEqual([], proc.connections(0))
expected_results = [
('17.17.17.17', 4369, '34.34.34.34', 8738, 'tcp'),
('187.187.187.187', 48059, '204.204.204.204', 52428, 'udp'),
]
- self.assertEquals(expected_results, proc.connections(pid))
+ self.assertEqual(expected_results, proc.connections(pid))
diff --git a/test/unit/util/str_tools.py b/test/unit/util/str_tools.py
index f874be6..1805d56 100644
--- a/test/unit/util/str_tools.py
+++ b/test/unit/util/str_tools.py
@@ -15,21 +15,21 @@ class TestStrTools(unittest.TestCase):
"""
# test the pydoc example
- self.assertEquals('I Like Pepperjack!', str_tools._to_camel_case('I_LIKE_PEPPERJACK!'))
+ self.assertEqual('I Like Pepperjack!', str_tools._to_camel_case('I_LIKE_PEPPERJACK!'))
# check a few edge cases
- self.assertEquals('', str_tools._to_camel_case(''))
- self.assertEquals('Hello', str_tools._to_camel_case('hello'))
- self.assertEquals('Hello', str_tools._to_camel_case('HELLO'))
- self.assertEquals('Hello World', str_tools._to_camel_case('hello__world'))
- self.assertEquals('Hello\tworld', str_tools._to_camel_case('hello\tWORLD'))
- self.assertEquals('Hello\t\tWorld', str_tools._to_camel_case('hello__world', '_', '\t'))
+ self.assertEqual('', str_tools._to_camel_case(''))
+ self.assertEqual('Hello', str_tools._to_camel_case('hello'))
+ self.assertEqual('Hello', str_tools._to_camel_case('HELLO'))
+ self.assertEqual('Hello World', str_tools._to_camel_case('hello__world'))
+ self.assertEqual('Hello\tworld', str_tools._to_camel_case('hello\tWORLD'))
+ self.assertEqual('Hello\t\tWorld', str_tools._to_camel_case('hello__world', '_', '\t'))
def test_crop(self):
# test the pydoc examples
- self.assertEquals('This is a looo...', str_tools.crop('This is a looooong message', 17))
- self.assertEquals('This is a...', str_tools.crop('This is a looooong message', 12))
- self.assertEquals('', str_tools.crop('This is a looooong message', 3))
+ self.assertEqual('This is a looo...', str_tools.crop('This is a looooong message', 17))
+ self.assertEqual('This is a...', str_tools.crop('This is a looooong message', 12))
+ self.assertEqual('', str_tools.crop('This is a looooong message', 3))
def test_size_label(self):
"""
@@ -37,19 +37,19 @@ class TestStrTools(unittest.TestCase):
"""
# test the pydoc examples
- self.assertEquals('1 MB', str_tools.size_label(2000000))
- self.assertEquals('1.02 KB', str_tools.size_label(1050, 2))
- self.assertEquals('1.025 Kilobytes', str_tools.size_label(1050, 3, True))
+ self.assertEqual('1 MB', str_tools.size_label(2000000))
+ self.assertEqual('1.02 KB', str_tools.size_label(1050, 2))
+ self.assertEqual('1.025 Kilobytes', str_tools.size_label(1050, 3, True))
- self.assertEquals('0 B', str_tools.size_label(0))
- self.assertEquals('0 Bytes', str_tools.size_label(0, is_long = True))
- self.assertEquals('0.00 B', str_tools.size_label(0, 2))
- self.assertEquals('-10 B', str_tools.size_label(-10))
- self.assertEquals('80 b', str_tools.size_label(10, is_bytes = False))
- self.assertEquals('-1 MB', str_tools.size_label(-2000000))
+ self.assertEqual('0 B', str_tools.size_label(0))
+ self.assertEqual('0 Bytes', str_tools.size_label(0, is_long = True))
+ self.assertEqual('0.00 B', str_tools.size_label(0, 2))
+ self.assertEqual('-10 B', str_tools.size_label(-10))
+ self.assertEqual('80 b', str_tools.size_label(10, is_bytes = False))
+ self.assertEqual('-1 MB', str_tools.size_label(-2000000))
# checking that we round down
- self.assertEquals('23.43 Kb', str_tools.size_label(3000, 2, is_bytes = False))
+ self.assertEqual('23.43 Kb', str_tools.size_label(3000, 2, is_bytes = False))
self.assertRaises(TypeError, str_tools.size_label, None)
self.assertRaises(TypeError, str_tools.size_label, 'hello world')
@@ -60,14 +60,14 @@ class TestStrTools(unittest.TestCase):
"""
# test the pydoc examples
- self.assertEquals('2h', str_tools.time_label(10000))
- self.assertEquals('1.0 minute', str_tools.time_label(61, 1, True))
- self.assertEquals('1.01 minutes', str_tools.time_label(61, 2, True))
+ self.assertEqual('2h', str_tools.time_label(10000))
+ self.assertEqual('1.0 minute', str_tools.time_label(61, 1, True))
+ self.assertEqual('1.01 minutes', str_tools.time_label(61, 2, True))
- self.assertEquals('0s', str_tools.time_label(0))
- self.assertEquals('0 seconds', str_tools.time_label(0, is_long = True))
- self.assertEquals('0.00s', str_tools.time_label(0, 2))
- self.assertEquals('-10s', str_tools.time_label(-10))
+ self.assertEqual('0s', str_tools.time_label(0))
+ self.assertEqual('0 seconds', str_tools.time_label(0, is_long = True))
+ self.assertEqual('0.00s', str_tools.time_label(0, 2))
+ self.assertEqual('-10s', str_tools.time_label(-10))
self.assertRaises(TypeError, str_tools.time_label, None)
self.assertRaises(TypeError, str_tools.time_label, 'hello world')
@@ -78,11 +78,11 @@ class TestStrTools(unittest.TestCase):
"""
# test the pydoc examples
- self.assertEquals(['6m', '40s'], str_tools.time_labels(400))
- self.assertEquals(['1 hour', '40 seconds'], str_tools.time_labels(3640, True))
+ self.assertEqual(['6m', '40s'], str_tools.time_labels(400))
+ self.assertEqual(['1 hour', '40 seconds'], str_tools.time_labels(3640, True))
- self.assertEquals([], str_tools.time_labels(0))
- self.assertEquals(['-10s'], str_tools.time_labels(-10))
+ self.assertEqual([], str_tools.time_labels(0))
+ self.assertEqual(['-10s'], str_tools.time_labels(-10))
self.assertRaises(TypeError, str_tools.time_labels, None)
self.assertRaises(TypeError, str_tools.time_labels, 'hello world')
@@ -93,10 +93,10 @@ class TestStrTools(unittest.TestCase):
"""
# test the pydoc examples
- self.assertEquals('01:51', str_tools.short_time_label(111))
- self.assertEquals('6-07:08:20', str_tools.short_time_label(544100))
+ self.assertEqual('01:51', str_tools.short_time_label(111))
+ self.assertEqual('6-07:08:20', str_tools.short_time_label(544100))
- self.assertEquals('00:00', str_tools.short_time_label(0))
+ self.assertEqual('00:00', str_tools.short_time_label(0))
self.assertRaises(TypeError, str_tools.short_time_label, None)
self.assertRaises(TypeError, str_tools.short_time_label, 'hello world')
@@ -108,17 +108,17 @@ class TestStrTools(unittest.TestCase):
"""
# test the pydoc examples
- self.assertEquals(111, str_tools.parse_short_time_label('01:51'))
- self.assertEquals(544100, str_tools.parse_short_time_label('6-07:08:20'))
+ self.assertEqual(111, str_tools.parse_short_time_label('01:51'))
+ self.assertEqual(544100, str_tools.parse_short_time_label('6-07:08:20'))
- self.assertEquals(110, str_tools.parse_short_time_label('01:50.62'))
- self.assertEquals(0, str_tools.parse_short_time_label('00:00'))
+ self.assertEqual(110, str_tools.parse_short_time_label('01:50.62'))
+ self.assertEqual(0, str_tools.parse_short_time_label('00:00'))
# these aren't technically valid, but might as well allow unnecessary
# digits to be dropped
- self.assertEquals(300, str_tools.parse_short_time_label('05:0'))
- self.assertEquals(300, str_tools.parse_short_time_label('5:00'))
+ self.assertEqual(300, str_tools.parse_short_time_label('05:0'))
+ self.assertEqual(300, str_tools.parse_short_time_label('5:00'))
self.assertRaises(TypeError, str_tools.parse_short_time_label, None)
self.assertRaises(TypeError, str_tools.parse_short_time_label, 100)
@@ -143,7 +143,7 @@ class TestStrTools(unittest.TestCase):
datetime.datetime(2012, 11, 8, 16, 48, 41, 0),
}
- for arg, expected in test_inputs.items():
+ for arg, expected in list(test_inputs.items()):
self.assertEqual(expected, str_tools._parse_iso_timestamp(arg))
invalid_input = [
diff --git a/test/unit/util/system.py b/test/unit/util/system.py
index 911f151..d2ae43f 100644
--- a/test/unit/util/system.py
+++ b/test/unit/util/system.py
@@ -133,7 +133,7 @@ class TestSystem(unittest.TestCase):
call_mock.return_value = None
call_mock.side_effect = None
self.assertFalse(system.is_running('irssi'))
- self.assertEquals(None, system.is_running('irssi'))
+ self.assertEqual(None, system.is_running('irssi'))
@patch('stem.util.system.call')
@patch('stem.util.proc.is_available', Mock(return_value = False))
@@ -156,7 +156,7 @@ class TestSystem(unittest.TestCase):
for test_input in responses:
expected_response = 'vim' if test_input == 'success' else None
- self.assertEquals(expected_response, system.name_by_pid(test_input))
+ self.assertEqual(expected_response, system.name_by_pid(test_input))
@patch('stem.util.system.call')
@patch('stem.util.system.is_available', Mock(return_value = True))
@@ -172,9 +172,9 @@ class TestSystem(unittest.TestCase):
for test_input in responses:
expected_response = 1111 if test_input == 'success' else None
- self.assertEquals(expected_response, system.pid_by_name(test_input))
+ self.assertEqual(expected_response, system.pid_by_name(test_input))
- self.assertEquals([123, 456, 789], system.pid_by_name('multiple_results', multiple = True))
+ self.assertEqual([123, 456, 789], system.pid_by_name('multiple_results', multiple = True))
@patch('stem.util.system.call')
@patch('stem.util.system.is_available', Mock(return_value = True))
@@ -190,9 +190,9 @@ class TestSystem(unittest.TestCase):
for test_input in responses:
expected_response = 1111 if test_input == 'success' else None
- self.assertEquals(expected_response, system.pid_by_name(test_input))
+ self.assertEqual(expected_response, system.pid_by_name(test_input))
- self.assertEquals([123, 456, 789], system.pid_by_name('multiple_results', multiple = True))
+ self.assertEqual([123, 456, 789], system.pid_by_name('multiple_results', multiple = True))
@patch('stem.util.system.call')
@patch('stem.util.system.is_bsd', Mock(return_value = False))
@@ -209,9 +209,9 @@ class TestSystem(unittest.TestCase):
for test_input in responses:
expected_response = 1111 if test_input == 'success' else None
- self.assertEquals(expected_response, system.pid_by_name(test_input))
+ self.assertEqual(expected_response, system.pid_by_name(test_input))
- self.assertEquals([123, 456, 789], system.pid_by_name('multiple_results', multiple = True))
+ self.assertEqual([123, 456, 789], system.pid_by_name('multiple_results', multiple = True))
@patch('stem.util.system.call')
@patch('stem.util.system.is_bsd', Mock(return_value = True))
@@ -222,13 +222,13 @@ class TestSystem(unittest.TestCase):
"""
call_mock.side_effect = mock_call(system.GET_PID_BY_NAME_PS_BSD, GET_PID_BY_NAME_PS_BSD)
- self.assertEquals(1, system.pid_by_name('launchd'))
- self.assertEquals(11, system.pid_by_name('DirectoryService'))
- self.assertEquals(None, system.pid_by_name('blarg'))
+ self.assertEqual(1, system.pid_by_name('launchd'))
+ self.assertEqual(11, system.pid_by_name('DirectoryService'))
+ self.assertEqual(None, system.pid_by_name('blarg'))
call_mock.side_effect = mock_call(system.GET_PID_BY_NAME_PS_BSD, GET_PID_BY_NAME_PS_BSD_MULTIPLE)
- self.assertEquals([1, 41], system.pid_by_name('launchd', multiple = True))
+ self.assertEqual([1, 41], system.pid_by_name('launchd', multiple = True))
@patch('stem.util.system.call')
@patch('stem.util.system.is_available', Mock(return_value = True))
@@ -244,9 +244,9 @@ class TestSystem(unittest.TestCase):
for test_input in responses:
expected_response = 1111 if test_input == 'success' else None
- self.assertEquals(expected_response, system.pid_by_name(test_input))
+ self.assertEqual(expected_response, system.pid_by_name(test_input))
- self.assertEquals([123, 456, 789], system.pid_by_name('multiple_results', multiple = True))
+ self.assertEqual([123, 456, 789], system.pid_by_name('multiple_results', multiple = True))
@patch('stem.util.system.call')
@patch('stem.util.system.is_available', Mock(return_value = True))
@@ -256,10 +256,10 @@ class TestSystem(unittest.TestCase):
"""
call_mock.side_effect = mock_call(system.GET_PID_BY_PORT_NETSTAT, GET_PID_BY_PORT_NETSTAT_RESULTS)
- self.assertEquals(1641, system.pid_by_port(9051))
- self.assertEquals(1641, system.pid_by_port('9051'))
- self.assertEquals(None, system.pid_by_port(631))
- self.assertEquals(None, system.pid_by_port(123))
+ self.assertEqual(1641, system.pid_by_port(9051))
+ self.assertEqual(1641, system.pid_by_port('9051'))
+ self.assertEqual(None, system.pid_by_port(631))
+ self.assertEqual(None, system.pid_by_port(123))
@patch('stem.util.system.call')
@patch('stem.util.system.is_available', Mock(return_value = True))
@@ -269,9 +269,9 @@ class TestSystem(unittest.TestCase):
"""
call_mock.side_effect = mock_call(system.GET_PID_BY_PORT_SOCKSTAT % 9051, GET_PID_BY_PORT_SOCKSTAT_RESULTS)
- self.assertEquals(4397, system.pid_by_port(9051))
- self.assertEquals(4397, system.pid_by_port('9051'))
- self.assertEquals(None, system.pid_by_port(123))
+ self.assertEqual(4397, system.pid_by_port(9051))
+ self.assertEqual(4397, system.pid_by_port('9051'))
+ self.assertEqual(None, system.pid_by_port(123))
@patch('stem.util.system.call')
@patch('stem.util.system.is_available', Mock(return_value = True))
@@ -281,10 +281,10 @@ class TestSystem(unittest.TestCase):
"""
call_mock.side_effect = mock_call(system.GET_PID_BY_PORT_LSOF, GET_PID_BY_PORT_LSOF_RESULTS)
- self.assertEquals(1745, system.pid_by_port(9051))
- self.assertEquals(1745, system.pid_by_port('9051'))
- self.assertEquals(329, system.pid_by_port(80))
- self.assertEquals(None, system.pid_by_port(123))
+ self.assertEqual(1745, system.pid_by_port(9051))
+ self.assertEqual(1745, system.pid_by_port('9051'))
+ self.assertEqual(329, system.pid_by_port(80))
+ self.assertEqual(None, system.pid_by_port(123))
@patch('stem.util.system.call')
@patch('stem.util.system.is_available', Mock(return_value = True))
@@ -295,11 +295,11 @@ class TestSystem(unittest.TestCase):
lsof_query = system.GET_PID_BY_FILE_LSOF % '/tmp/foo'
call_mock.side_effect = mock_call(lsof_query, ['4762'])
- self.assertEquals(4762, system.pid_by_open_file('/tmp/foo'))
+ self.assertEqual(4762, system.pid_by_open_file('/tmp/foo'))
call_mock.return_value = []
call_mock.side_effect = None
- self.assertEquals(None, system.pid_by_open_file('/tmp/somewhere_else'))
+ self.assertEqual(None, system.pid_by_open_file('/tmp/somewhere_else'))
@patch('stem.util.system.call')
@patch('stem.util.proc.is_available', Mock(return_value = False))
@@ -320,7 +320,7 @@ class TestSystem(unittest.TestCase):
for test_input in responses:
expected_response = '/home/atagar' if test_input == '3799' else None
- self.assertEquals(expected_response, system.cwd(test_input))
+ self.assertEqual(expected_response, system.cwd(test_input))
@patch('stem.util.system.call')
@patch('stem.util.proc.is_available', Mock(return_value = False))
@@ -340,7 +340,7 @@ class TestSystem(unittest.TestCase):
for test_input in responses:
expected_response = '/Users/atagar/tor/src/or' if test_input == '75717' else None
- self.assertEquals(expected_response, system.cwd(test_input))
+ self.assertEqual(expected_response, system.cwd(test_input))
@patch('stem.util.system.call')
@patch('stem.util.system.is_available', Mock(return_value = True))
@@ -362,7 +362,7 @@ class TestSystem(unittest.TestCase):
for test_input in responses:
expected_response = 1 if test_input == '1111' else 0
- self.assertEquals(expected_response, system.bsd_jail_id(test_input))
+ self.assertEqual(expected_response, system.bsd_jail_id(test_input))
@patch('stem.util.system.call')
@patch('stem.util.system.is_available', Mock(return_value = True))
@@ -374,10 +374,10 @@ class TestSystem(unittest.TestCase):
# check when we don't have a jail
call_mock.return_value = []
- self.assertEquals(None, system.bsd_jail_path(1))
+ self.assertEqual(None, system.bsd_jail_path(1))
call_mock.side_effect = mock_call(system.GET_BSD_JAIL_PATH % '1', GET_BSD_JAIL_PATH_RESULTS)
- self.assertEquals('/usr/jails/tor-jail', system.bsd_jail_path(1))
+ self.assertEqual('/usr/jails/tor-jail', system.bsd_jail_path(1))
@patch('platform.system', Mock(return_value = 'Linux'))
@patch('os.path.join', Mock(side_effect = posixpath.join))
@@ -388,13 +388,13 @@ class TestSystem(unittest.TestCase):
tests).
"""
- self.assertEquals('', system.expand_path(''))
- self.assertEquals('/tmp', system.expand_path('/tmp'))
- self.assertEquals('/tmp', system.expand_path('/tmp/'))
- self.assertEquals('/tmp', system.expand_path('.', '/tmp'))
- self.assertEquals('/tmp', system.expand_path('./', '/tmp'))
- self.assertEquals('/tmp/foo', system.expand_path('foo', '/tmp'))
- self.assertEquals('/tmp/foo', system.expand_path('./foo', '/tmp'))
+ self.assertEqual('', system.expand_path(''))
+ self.assertEqual('/tmp', system.expand_path('/tmp'))
+ self.assertEqual('/tmp', system.expand_path('/tmp/'))
+ self.assertEqual('/tmp', system.expand_path('.', '/tmp'))
+ self.assertEqual('/tmp', system.expand_path('./', '/tmp'))
+ self.assertEqual('/tmp/foo', system.expand_path('foo', '/tmp'))
+ self.assertEqual('/tmp/foo', system.expand_path('./foo', '/tmp'))
@patch('platform.system', Mock(return_value = 'Windows'))
@patch('os.path.join', Mock(side_effect = ntpath.join))
@@ -405,10 +405,10 @@ class TestSystem(unittest.TestCase):
(that's left to integ tests).
"""
- self.assertEquals('', system.expand_path(''))
- self.assertEquals('C:\\tmp', system.expand_path('C:\\tmp'))
- self.assertEquals('C:\\tmp', system.expand_path('C:\\tmp\\'))
- self.assertEquals('C:\\tmp', system.expand_path('.', 'C:\\tmp'))
- self.assertEquals('C:\\tmp', system.expand_path('.\\', 'C:\\tmp'))
- self.assertEquals('C:\\tmp\\foo', system.expand_path('foo', 'C:\\tmp'))
- self.assertEquals('C:\\tmp\\foo', system.expand_path('.\\foo', 'C:\\tmp'))
+ self.assertEqual('', system.expand_path(''))
+ self.assertEqual('C:\\tmp', system.expand_path('C:\\tmp'))
+ self.assertEqual('C:\\tmp', system.expand_path('C:\\tmp\\'))
+ self.assertEqual('C:\\tmp', system.expand_path('.', 'C:\\tmp'))
+ self.assertEqual('C:\\tmp', system.expand_path('.\\', 'C:\\tmp'))
+ self.assertEqual('C:\\tmp\\foo', system.expand_path('foo', 'C:\\tmp'))
+ self.assertEqual('C:\\tmp\\foo', system.expand_path('.\\foo', 'C:\\tmp'))
diff --git a/test/unit/version.py b/test/unit/version.py
index df5b57e..2d9803e 100644
--- a/test/unit/version.py
+++ b/test/unit/version.py
@@ -191,7 +191,7 @@ class TestVersion(unittest.TestCase):
requirements = stem.version._VersionRequirements()
requirements.in_range(Version('0.2.2.0'), Version('0.2.3.0'))
- for index in xrange(0, 100):
+ for index in range(0, 100):
self.assertTrue(Version('0.2.2.%i' % index) >= requirements)
def test_requirements_multiple_rules(self):
@@ -207,7 +207,7 @@ class TestVersion(unittest.TestCase):
self.assertTrue(Version('0.2.3.0') >= requirements)
self.assertFalse(Version('0.2.2.0') >= requirements)
- for index in xrange(0, 100):
+ for index in range(0, 100):
self.assertFalse(Version('0.2.2.%i' % index) >= requirements)
def assert_versions_match(self, version, major, minor, micro, patch, status, extra):
diff --git a/test/util.py b/test/util.py
index 714d949..314b5e7 100644
--- a/test/util.py
+++ b/test/util.py
@@ -141,7 +141,7 @@ def get_help_message():
help_msg = CONFIG['msg.help']
# gets the longest target length so we can show the entries in columns
- target_name_length = max(map(len, Target))
+ target_name_length = max(list(map(len, Target)))
description_format = '\n %%-%is - %%s' % target_name_length
for target in Target:
@@ -192,7 +192,7 @@ def get_torrc_entries(target):
for opt in config_csv.split(','):
opt = opt.strip()
- if opt in test.runner.Torrc.keys():
+ if opt in list(test.runner.Torrc.keys()):
torrc_opts.append(test.runner.Torrc[opt])
else:
raise ValueError("'%s' isn't a test.runner.Torrc enumeration" % opt)
1
0
commit 95c2187563cb194afa4aa4ec2d479614da91e291
Author: Foxboron <mcfoxax(a)gmail.com>
Date: Fri Jan 2 23:57:28 2015 +0100
fixed python2.6 compatability
---
stem/_compat.py | 8 ++++----
stem/control.py | 12 ++++++------
stem/descriptor/__init__.py | 6 +++---
stem/descriptor/reader.py | 4 ++--
stem/exit_policy.py | 10 +++++-----
stem/response/events.py | 20 ++++++++++----------
stem/util/connection.py | 4 ++--
stem/util/enum.py | 4 ++--
stem/util/str_tools.py | 10 +++++-----
stem/util/system.py | 4 ++--
test/unit/connection/connect.py | 5 ++++-
test/unit/tutorial_examples.py | 2 +-
12 files changed, 46 insertions(+), 43 deletions(-)
diff --git a/stem/_compat.py b/stem/_compat.py
index 0fb3bfc..e0ba489 100644
--- a/stem/_compat.py
+++ b/stem/_compat.py
@@ -6,11 +6,11 @@ PY33 = sys.version_info >= (3, 3)
PY34 = sys.version_info >= (3, 4)
if PY3:
- unicode = str
+ str_type = str
else:
- unicode = unicode # NOQA
+ str_type = unicode # NOQA
if PY3:
- long = int
+ int_type = int
else:
- long = long # NOQA
+ int_type = long # NOQA
diff --git a/stem/control.py b/stem/control.py
index 8986c21..993d5c3 100644
--- a/stem/control.py
+++ b/stem/control.py
@@ -258,7 +258,7 @@ import stem.version
from stem import UNDEFINED, CircStatus, Signal
from stem.util import log
-from stem._compat import unicode
+from stem._compat import str_type
# state changes a control socket can have
@@ -992,7 +992,7 @@ class Controller(BaseController):
start_time = time.time()
reply = {}
- if isinstance(params, (bytes, unicode)):
+ if isinstance(params, (bytes, str_type)):
is_multiple = False
params = set([params])
else:
@@ -1887,7 +1887,7 @@ class Controller(BaseController):
start_time = time.time()
reply = {}
- if isinstance(params, (bytes, unicode)):
+ if isinstance(params, (bytes, str_type)):
params = [params]
# remove strings which contain only whitespace
@@ -2077,7 +2077,7 @@ class Controller(BaseController):
for param, value in params:
param = param.lower()
- if isinstance(value, (bytes, unicode)):
+ if isinstance(value, (bytes, str_type)):
value = [value]
to_cache[param] = value
@@ -2635,7 +2635,7 @@ class Controller(BaseController):
* :class:`stem.InvalidArguments` if features passed were invalid
"""
- if isinstance(features, (bytes, unicode)):
+ if isinstance(features, (bytes, str_type)):
features = [features]
response = self.msg('USEFEATURE %s' % ' '.join(features))
@@ -2780,7 +2780,7 @@ class Controller(BaseController):
args = [circuit_id]
- if isinstance(path, (bytes, unicode)):
+ if isinstance(path, (bytes, str_type)):
path = [path]
if path:
diff --git a/stem/descriptor/__init__.py b/stem/descriptor/__init__.py
index 25a880e..6f4653f 100644
--- a/stem/descriptor/__init__.py
+++ b/stem/descriptor/__init__.py
@@ -58,7 +58,7 @@ import stem.prereq
import stem.util.enum
import stem.util.str_tools
import stem.util.system
-from stem._compat import unicode
+from stem._compat import str_type
try:
# added in python 2.7
@@ -151,7 +151,7 @@ def parse_file(descriptor_file, descriptor_type = None, validate = True, documen
handler = None
- if isinstance(descriptor_file, (bytes, unicode)):
+ if isinstance(descriptor_file, (bytes, str_type)):
if stem.util.system.is_tarfile(descriptor_file):
handler = _parse_file_for_tar_path
else:
@@ -433,7 +433,7 @@ def _read_until_keywords(keywords, descriptor_file, inclusive = False, ignore_fi
ending_keyword = None
- if isinstance(keywords, (bytes, unicode)):
+ if isinstance(keywords, (bytes, str_type)):
keywords = (keywords,)
if ignore_first:
diff --git a/stem/descriptor/reader.py b/stem/descriptor/reader.py
index bbd6c6c..0022d89 100644
--- a/stem/descriptor/reader.py
+++ b/stem/descriptor/reader.py
@@ -90,7 +90,7 @@ except ImportError:
import stem.descriptor
import stem.prereq
import stem.util.system
-from stem._compat import unicode
+from stem._compat import str_type
# flag to indicate when the reader thread is out of descriptor files to read
FINISHED = 'DONE'
@@ -263,7 +263,7 @@ class DescriptorReader(object):
"""
def __init__(self, target, validate = True, follow_links = False, buffer_size = 100, persistence_path = None, document_handler = stem.descriptor.DocumentHandler.ENTRIES, **kwargs):
- if isinstance(target, (bytes, unicode)):
+ if isinstance(target, (bytes, str_type)):
self._targets = [target]
else:
self._targets = target
diff --git a/stem/exit_policy.py b/stem/exit_policy.py
index 7ac3b8b..06b2b53 100644
--- a/stem/exit_policy.py
+++ b/stem/exit_policy.py
@@ -75,7 +75,7 @@ import stem.util.connection
import stem.util.enum
import stem.util.str_tools
-from stem._compat import unicode
+from stem._compat import str_type
try:
# added in python 3.2
@@ -121,7 +121,7 @@ def get_config_policy(rules, ip_address = None):
if ip_address and not (stem.util.connection.is_valid_ipv4_address(ip_address) or stem.util.connection.is_valid_ipv6_address(ip_address)):
raise ValueError("%s isn't a valid IP address" % ip_address)
- if isinstance(rules, (bytes, unicode)):
+ if isinstance(rules, (bytes, str_type)):
rules = rules.split(',')
result = []
@@ -238,7 +238,7 @@ class ExitPolicy(object):
# sanity check the types
for rule in rules:
- if not isinstance(rule, (bytes, unicode, ExitPolicyRule)):
+ if not isinstance(rule, (bytes, str_type, ExitPolicyRule)):
raise TypeError('Exit policy rules can only contain strings or ExitPolicyRules, got a %s (%s)' % (type(rule), rules))
# Unparsed representation of the rules we were constructed with. Our
@@ -249,7 +249,7 @@ class ExitPolicy(object):
is_all_str = True
for rule in rules:
- if not isinstance(rule, (bytes, unicode)):
+ if not isinstance(rule, (bytes, str_type)):
is_all_str = False
if rules and is_all_str:
@@ -458,7 +458,7 @@ class ExitPolicy(object):
if isinstance(rule, bytes):
rule = stem.util.str_tools._to_unicode(rule)
- if isinstance(rule, unicode):
+ if isinstance(rule, str_type):
rule = ExitPolicyRule(rule.strip())
if rule.is_accept:
diff --git a/stem/response/events.py b/stem/response/events.py
index 01a7b26..55c73e3 100644
--- a/stem/response/events.py
+++ b/stem/response/events.py
@@ -12,7 +12,7 @@ import stem.response
import stem.version
from stem.util import connection, log, str_tools, tor_tools
-from stem._compat import unicode, long
+from stem._compat import str_type, int_type
# Matches keyword=value arguments. This can't be a simple "(.*)=(.*)" pattern
# because some positional arguments, like circuit paths, can have an equal
@@ -142,7 +142,7 @@ class Event(stem.response.ControlMessage):
attr_values = getattr(self, attr)
if attr_values:
- if isinstance(attr_values, (bytes, unicode)):
+ if isinstance(attr_values, (bytes, str_type)):
attr_values = [attr_values]
for value in attr_values:
@@ -256,8 +256,8 @@ class BandwidthEvent(Event):
elif not self.read.isdigit() or not self.written.isdigit():
raise stem.ProtocolError("A BW event's bytes sent and received should be a positive numeric value, received: %s" % self)
- self.read = long(self.read)
- self.written = long(self.written)
+ self.read = int_type(self.read)
+ self.written = int_type(self.written)
class BuildTimeoutSetEvent(Event):
@@ -977,8 +977,8 @@ class StreamBwEvent(Event):
elif not self.read.isdigit() or not self.written.isdigit():
raise stem.ProtocolError("A STREAM_BW event's bytes sent and received should be a positive numeric value, received: %s" % self)
- self.read = long(self.read)
- self.written = long(self.written)
+ self.read = int_type(self.read)
+ self.written = int_type(self.written)
class TransportLaunchedEvent(Event):
@@ -1051,8 +1051,8 @@ class ConnectionBandwidthEvent(Event):
elif not tor_tools.is_valid_connection_id(self.id):
raise stem.ProtocolError("Connection IDs must be one to sixteen alphanumeric characters, got '%s': %s" % (self.id, self))
- self.read = long(self.read)
- self.written = long(self.written)
+ self.read = int_type(self.read)
+ self.written = int_type(self.written)
self._log_if_unrecognized('type', stem.ConnectionType)
@@ -1091,8 +1091,8 @@ class CircuitBandwidthEvent(Event):
elif not tor_tools.is_valid_circuit_id(self.id):
raise stem.ProtocolError("Circuit IDs must be one to sixteen alphanumeric characters, got '%s': %s" % (self.id, self))
- self.read = long(self.read)
- self.written = long(self.written)
+ self.read = int_type(self.read)
+ self.written = int_type(self.written)
class CellStatsEvent(Event):
diff --git a/stem/util/connection.py b/stem/util/connection.py
index 276f97c..ded09b3 100644
--- a/stem/util/connection.py
+++ b/stem/util/connection.py
@@ -51,7 +51,7 @@ import stem.util.proc
import stem.util.system
from stem.util import conf, enum, log
-from stem._compat import unicode
+from stem._compat import str_type
# Connection resolution is risky to log about since it's highly likely to
# contain sensitive information. That said, it's also difficult to get right in
@@ -337,7 +337,7 @@ def is_valid_ipv4_address(address):
:returns: **True** if input is a valid IPv4 address, **False** otherwise
"""
- if not isinstance(address, (bytes, unicode)):
+ if not isinstance(address, (bytes, str_type)):
return False
# checks if theres four period separated values
diff --git a/stem/util/enum.py b/stem/util/enum.py
index 7520bda..d641789 100644
--- a/stem/util/enum.py
+++ b/stem/util/enum.py
@@ -40,7 +40,7 @@ constructed as simple type listings...
+- __iter__ - iterator over our enum keys
"""
-from stem._compat import unicode
+from stem._compat import str_type
def UppercaseEnum(*args):
@@ -76,7 +76,7 @@ class Enum(object):
keys, values = [], []
for entry in args:
- if isinstance(entry, (bytes, unicode)):
+ if isinstance(entry, (bytes, str_type)):
key, val = entry, _to_camel_case(entry)
elif isinstance(entry, tuple) and len(entry) == 2:
key, val = entry
diff --git a/stem/util/str_tools.py b/stem/util/str_tools.py
index 3556a33..63b66b0 100644
--- a/stem/util/str_tools.py
+++ b/stem/util/str_tools.py
@@ -28,7 +28,7 @@ import sys
import stem.prereq
import stem.util.enum
-from stem._compat import unicode
+from stem._compat import str_type
# label conversion tuples of the form...
@@ -74,13 +74,13 @@ if stem.prereq.is_python_3():
return msg
else:
def _to_bytes_impl(msg):
- if msg is not None and isinstance(msg, unicode):
+ if msg is not None and isinstance(msg, str_type):
return codecs.latin_1_encode(msg, 'replace')[0]
else:
return msg
def _to_unicode_impl(msg):
- if msg is not None and not isinstance(msg, unicode):
+ if msg is not None and not isinstance(msg, str_type):
return msg.decode('utf-8', 'replace')
else:
return msg
@@ -455,7 +455,7 @@ def _parse_timestamp(entry):
:raises: **ValueError** if the timestamp is malformed
"""
- if not isinstance(entry, (str, unicode)):
+ if not isinstance(entry, (str, str_type)):
raise ValueError('parse_timestamp() input must be a str, got a %s' % type(entry))
try:
@@ -481,7 +481,7 @@ def _parse_iso_timestamp(entry):
:raises: **ValueError** if the timestamp is malformed
"""
- if not isinstance(entry, (str, unicode)):
+ if not isinstance(entry, (str, str_type)):
raise ValueError('parse_iso_timestamp() input must be a str, got a %s' % type(entry))
# based after suggestions from...
diff --git a/stem/util/system.py b/stem/util/system.py
index ec33c2b..315c39e 100644
--- a/stem/util/system.py
+++ b/stem/util/system.py
@@ -56,7 +56,7 @@ import stem.util.str_tools
from stem import UNDEFINED
from stem.util import log
-from stem._compat import unicode
+from stem._compat import str_type
# Mapping of commands to if they're available or not.
@@ -243,7 +243,7 @@ def is_running(command):
command_listing = call(secondary_resolver, None)
if command_listing:
- command_listing = list(map(unicode.strip, command_listing))
+ command_listing = list(map(str_type.strip, command_listing))
return command in command_listing
return None
diff --git a/test/unit/connection/connect.py b/test/unit/connection/connect.py
index b342eb7..37ded2f 100644
--- a/test/unit/connection/connect.py
+++ b/test/unit/connection/connect.py
@@ -9,7 +9,10 @@ try:
except ImportError:
from io import StringIO
-from mock import Mock, patch
+try:
+ from mock import Mock, patch
+except ImportError:
+ from unittest.mock import Mock, patch
import stem
import stem.connection
diff --git a/test/unit/tutorial_examples.py b/test/unit/tutorial_examples.py
index b277192..618844d 100644
--- a/test/unit/tutorial_examples.py
+++ b/test/unit/tutorial_examples.py
@@ -280,7 +280,7 @@ class TestTutorialExamples(unittest.TestCase):
# Query all authority votes asynchronously.
downloader = remote.DescriptorDownloader(document_handler = DocumentHandler.DOCUMENT)
- queries = collections.OrderedDict() # needed so output's order matches what's expected
+ queries = {}
for name, authority in list(remote.get_authorities().items()):
if authority.v3ident is None:
1
0
commit e1047c8173f08504a90779f518919e387e29fb9e
Author: Foxboron <mcfoxax(a)gmail.com>
Date: Sat Jan 3 00:54:42 2015 +0100
compatability for 3.x
---
stem/descriptor/server_descriptor.py | 3 ++-
test/unit/descriptor/microdescriptor.py | 5 ++--
test/unit/descriptor/networkstatus/document_v3.py | 23 +++++++++---------
test/unit/descriptor/reader.py | 27 +++++++++++----------
test/unit/descriptor/server_descriptor.py | 7 +++---
test/unit/tutorial.py | 8 ++++--
test/unit/tutorial_examples.py | 16 ++++++------
test/unit/util/proc.py | 9 ++++---
test/unit/util/system.py | 4 ++-
9 files changed, 59 insertions(+), 43 deletions(-)
diff --git a/stem/descriptor/server_descriptor.py b/stem/descriptor/server_descriptor.py
index 11820e3..7a46a16 100644
--- a/stem/descriptor/server_descriptor.py
+++ b/stem/descriptor/server_descriptor.py
@@ -46,6 +46,7 @@ import stem.util.tor_tools
import stem.version
from stem.util import log
+from stem._compat import str_type
from stem.descriptor import (
PGP_BLOCK_END,
@@ -297,7 +298,7 @@ class ServerDescriptor(Descriptor):
entries, policy = _get_descriptor_components(raw_contents, validate, ('accept', 'reject'))
- if policy == [u'reject *:*']:
+ if policy == [str_type('reject *:*')]:
self.exit_policy = REJECT_ALL_POLICY
else:
self.exit_policy = stem.exit_policy.ExitPolicy(*policy)
diff --git a/test/unit/descriptor/microdescriptor.py b/test/unit/descriptor/microdescriptor.py
index 5635d54..0873fbb 100644
--- a/test/unit/descriptor/microdescriptor.py
+++ b/test/unit/descriptor/microdescriptor.py
@@ -9,6 +9,7 @@ import stem.exit_policy
import stem.descriptor
from stem.descriptor.microdescriptor import Microdescriptor
+from stem._compat import str_type
from test.mocking import (
get_microdescriptor,
@@ -64,7 +65,7 @@ class TestMicrodescriptor(unittest.TestCase):
router = next(descriptors)
self.assertEqual(SECOND_ONION_KEY, router.onion_key)
- self.assertEqual(u'r5572HzD+PMPBbXlZwBhsm6YEbxnYgis8vhZ1jmdI2k=', router.ntor_onion_key)
+ self.assertEqual(str_type('r5572HzD+PMPBbXlZwBhsm6YEbxnYgis8vhZ1jmdI2k='), router.ntor_onion_key)
self.assertEqual([], router.or_addresses)
self.assertEqual(['$6141629FA0D15A6AEAEF3A1BEB76E64C767B3174'], router.family)
self.assertEqual(stem.exit_policy.MicroExitPolicy('reject 1-65535'), router.exit_policy)
@@ -74,7 +75,7 @@ class TestMicrodescriptor(unittest.TestCase):
router = next(descriptors)
self.assertEqual(THIRD_ONION_KEY, router.onion_key)
self.assertEqual(None, router.ntor_onion_key)
- self.assertEqual([(u'2001:6b0:7:125::242', 9001, True)], router.or_addresses)
+ self.assertEqual([(str_type('2001:6b0:7:125::242'), 9001, True)], router.or_addresses)
self.assertEqual([], router.family)
self.assertEqual(stem.exit_policy.MicroExitPolicy('accept 80,443'), router.exit_policy)
self.assertEqual({b'@last-listed': b'2013-02-24 00:18:36'}, router.get_annotations())
diff --git a/test/unit/descriptor/networkstatus/document_v3.py b/test/unit/descriptor/networkstatus/document_v3.py
index 63a72f0..fafd455 100644
--- a/test/unit/descriptor/networkstatus/document_v3.py
+++ b/test/unit/descriptor/networkstatus/document_v3.py
@@ -10,6 +10,7 @@ import stem.descriptor
import stem.version
from stem import Flag
+from stem._compat import str_type
from stem.descriptor.networkstatus import (
HEADER_STATUS_DOCUMENT_FIELDS,
@@ -751,9 +752,9 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
test_values = (
('', {}),
- ('fast-speed=40960', {u'fast-speed': 40960}), # numeric value
- ('guard-wfu=94.669%', {u'guard-wfu': 0.94669}), # percentage value
- ('guard-wfu=94.669% guard-tk=691200', {u'guard-wfu': 0.94669, u'guard-tk': 691200}), # multiple values
+ ('fast-speed=40960', {str_type('fast-speed'): 40960}), # numeric value
+ ('guard-wfu=94.669%', {str_type('guard-wfu'): 0.94669}), # percentage value
+ ('guard-wfu=94.669% guard-tk=691200', {str_type('guard-wfu'): 0.94669, str_type('guard-tk'): 691200}), # multiple values
)
for test_value, expected_value in test_values:
@@ -765,14 +766,14 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
full_line = 'stable-uptime=693369 stable-mtbf=153249 fast-speed=40960 guard-wfu=94.669% guard-tk=691200 guard-bw-inc-exits=174080 guard-bw-exc-exits=184320 enough-mtbf=1'
expected_value = {
- u'stable-uptime': 693369,
- u'stable-mtbf': 153249,
- u'fast-speed': 40960,
- u'guard-wfu': 0.94669,
- u'guard-tk': 691200,
- u'guard-bw-inc-exits': 174080,
- u'guard-bw-exc-exits': 184320,
- u'enough-mtbf': 1,
+ str_type('stable-uptime'): 693369,
+ str_type('stable-mtbf'): 153249,
+ str_type('fast-speed'): 40960,
+ str_type('guard-wfu'): 0.94669,
+ str_type('guard-tk'): 691200,
+ str_type('guard-bw-inc-exits'): 174080,
+ str_type('guard-bw-exc-exits'): 184320,
+ str_type('enough-mtbf'): 1,
}
document = get_network_status_document_v3({'vote-status': 'vote', 'flag-thresholds': full_line})
diff --git a/test/unit/descriptor/reader.py b/test/unit/descriptor/reader.py
index 31c694e..85c3118 100644
--- a/test/unit/descriptor/reader.py
+++ b/test/unit/descriptor/reader.py
@@ -18,6 +18,7 @@ import test.runner
import test.unit.descriptor
from stem.util import system
+from stem._compat import str_type
try:
# added in python 3.3
@@ -90,13 +91,13 @@ class TestDescriptorReader(unittest.TestCase):
"""
test_lines = (
- u'/dir/ 0',
- u'/dir/file 12345',
- u'/dir/file with spaces 7138743',
- u' /dir/with extra space 12345 ',
- u' \t ',
- u'',
- u'/dir/after empty line 12345',
+ str_type('/dir/ 0'),
+ str_type('/dir/file 12345'),
+ str_type('/dir/file with spaces 7138743'),
+ str_type(' /dir/with extra space 12345 '),
+ str_type(' \t '),
+ str_type(''),
+ str_type('/dir/after empty line 12345'),
)
expected_value = {
@@ -107,7 +108,7 @@ class TestDescriptorReader(unittest.TestCase):
'/dir/after empty line': 12345,
}
- open_mock.return_value = StringIO(u'\n'.join(test_lines))
+ open_mock.return_value = StringIO(str_type('\n'.join(test_lines)))
self.assertEqual(expected_value, stem.descriptor.reader.load_processed_files(''))
@patch('stem.descriptor.reader.open', create = True)
@@ -116,7 +117,7 @@ class TestDescriptorReader(unittest.TestCase):
Tests the load_processed_files() function with an empty file.
"""
- open_mock.return_value = StringIO(u'')
+ open_mock.return_value = StringIO(str_type(''))
self.assertEqual({}, stem.descriptor.reader.load_processed_files(''))
@patch('stem.descriptor.reader.open', create = True)
@@ -126,7 +127,7 @@ class TestDescriptorReader(unittest.TestCase):
it is missing the file path.
"""
- open_mock.return_value = StringIO(u' 12345')
+ open_mock.return_value = StringIO(str_type(' 12345'))
self.assertRaises(TypeError, stem.descriptor.reader.load_processed_files, '')
@patch('stem.descriptor.reader.open', create = True)
@@ -136,7 +137,7 @@ class TestDescriptorReader(unittest.TestCase):
it is missing the timestamp.
"""
- open_mock.return_value = StringIO(u'/dir/file ')
+ open_mock.return_value = StringIO(str_type('/dir/file '))
self.assertRaises(TypeError, stem.descriptor.reader.load_processed_files, '')
@patch('stem.descriptor.reader.open', create = True)
@@ -146,7 +147,7 @@ class TestDescriptorReader(unittest.TestCase):
it has an invalid file path.
"""
- open_mock.return_value = StringIO(u'not_an_absolute_file 12345')
+ open_mock.return_value = StringIO(str_type('not_an_absolute_file 12345'))
self.assertRaises(TypeError, stem.descriptor.reader.load_processed_files, '')
@patch('stem.descriptor.reader.open', create = True)
@@ -156,7 +157,7 @@ class TestDescriptorReader(unittest.TestCase):
it has a non-numeric timestamp.
"""
- open_mock.return_value = StringIO(u'/dir/file 123a')
+ open_mock.return_value = StringIO(str_type('/dir/file 123a'))
self.assertRaises(TypeError, stem.descriptor.reader.load_processed_files, '')
def test_load_processed_files_from_data(self):
diff --git a/test/unit/descriptor/server_descriptor.py b/test/unit/descriptor/server_descriptor.py
index c05dee1..a83dfba 100644
--- a/test/unit/descriptor/server_descriptor.py
+++ b/test/unit/descriptor/server_descriptor.py
@@ -14,6 +14,7 @@ import stem.version
import stem.util.str_tools
from stem.descriptor.server_descriptor import RelayDescriptor, BridgeDescriptor
+from stem._compat import str_type
from test.mocking import (
get_relay_server_descriptor,
@@ -30,9 +31,9 @@ except ImportError:
from mock import Mock, patch
TARFILE_FINGERPRINTS = set([
- u'B6D83EC2D9E18B0A7A33428F8CFA9C536769E209',
- u'E0BD57A11F00041A9789577C53A1B784473669E4',
- u'1F43EE37A0670301AD9CB555D94AFEC2C89FDE86',
+ str_type('B6D83EC2D9E18B0A7A33428F8CFA9C536769E209'),
+ str_type('E0BD57A11F00041A9789577C53A1B784473669E4'),
+ str_type('1F43EE37A0670301AD9CB555D94AFEC2C89FDE86'),
])
diff --git a/test/unit/tutorial.py b/test/unit/tutorial.py
index 883c4a7..98d2a1a 100644
--- a/test/unit/tutorial.py
+++ b/test/unit/tutorial.py
@@ -11,12 +11,16 @@ from stem.descriptor.server_descriptor import RelayDescriptor
from test import mocking
try:
+ from StringIO import StringIO
+except ImportError:
+ from io import StringIO
+
+try:
# added in python 3.3
from unittest.mock import Mock, patch
- from io import StringIO
except ImportError:
from mock import Mock, patch
- from StringIO import StringIO
+
OVER_THE_RIVER_OUTPUT = """\
* Connecting to tor
diff --git a/test/unit/tutorial_examples.py b/test/unit/tutorial_examples.py
index 618844d..99b4466 100644
--- a/test/unit/tutorial_examples.py
+++ b/test/unit/tutorial_examples.py
@@ -2,7 +2,6 @@
Tests for the examples given in stem's tutorial.
"""
-import collections
import itertools
import unittest
@@ -16,6 +15,8 @@ import stem.descriptor.remote
from stem.control import Controller
from stem.descriptor.remote import DIRECTORY_AUTHORITIES
+from stem._compat import str_type
+
from test import mocking
from test.mocking import (
get_relay_server_descriptor,
@@ -29,6 +30,7 @@ try:
from unittest.mock import Mock, patch
except ImportError:
from mock import Mock, patch
+
import sys
oldstdout = sys.stdout
@@ -38,7 +40,7 @@ PURPOSE=%s'
PATH_CONTENT = '$%s=%s,$%s=%s,$%s=%s'
-LIST_CIRCUITS_OUTPUT = u"""\
+LIST_CIRCUITS_OUTPUT = str_type("""\
Circuit 4 (GENERAL)
|- B1FA7D51B8B6F0CB585D944F450E7C06EDE7E44C (ByTORAndTheSnowDog, 173.209.180.61)
@@ -54,9 +56,9 @@ Circuit 10 (GENERAL)
|- B1FA7D51B8B6F0CB585D944F450E7C06EDE7E44C (ByTORAndTheSnowDog, 173.209.180.61)
|- 00C2C2A16AEDB51D5E5FB7D6168FC66B343D822F (ph3x, 86.59.119.83)
+- 65242C91BFF30F165DA4D132C81A9EBA94B71D62 (torexit16, 176.67.169.171)
-"""
+""")
-EXIT_USED_OUTPUT = u"""\
+EXIT_USED_OUTPUT = str_type("""\
Tracking requests for tor exits. Press 'enter' to end.
Exit relay for our connection to 64.15.112.44:80
@@ -65,15 +67,15 @@ Exit relay for our connection to 64.15.112.44:80
nickname: chaoscomputerclub19
locale: unknown
-"""
+""")
-OUTDATED_RELAYS_OUTPUT = u"""\
+OUTDATED_RELAYS_OUTPUT = str_type("""\
Checking for outdated relays...
0.1.0 Sambuddha Basu
2 outdated relays found, 1 had contact information
-"""
+""")
COMPARE_FLAGS_OUTPUT = """\
maatuska has the Running flag but moria1 doesn't: E2BB13AA2F6960CD93ABE5257A825687F3973C62
diff --git a/test/unit/util/proc.py b/test/unit/util/proc.py
index a612895..d1fb4aa 100644
--- a/test/unit/util/proc.py
+++ b/test/unit/util/proc.py
@@ -8,12 +8,15 @@ from stem.util import proc
from test import mocking
try:
- # added in python 3.3
- from unittest.mock import Mock, patch
+ from StringIO import StringIO
+except ImportError:
from io import StringIO
+
+try:
+ from unittest.mock import Mock, patch
except ImportError:
from mock import Mock, patch
- from StringIO import StringIO
+
class TestProc(unittest.TestCase):
@patch('stem.util.proc._get_line')
diff --git a/test/unit/util/system.py b/test/unit/util/system.py
index d2ae43f..f9fbb10 100644
--- a/test/unit/util/system.py
+++ b/test/unit/util/system.py
@@ -11,6 +11,7 @@ import posixpath
import unittest
from stem.util import system
+from stem._compat import str_type
try:
# added in python 3.3
@@ -116,7 +117,8 @@ class TestSystem(unittest.TestCase):
"""
# mock response with a linux and bsd resolver
- running_commands = [u'irssi', u'moc', u'tor', u'ps', u' firefox ']
+ running_commands = [str_type('irssi'), str_type('moc'), str_type('tor'),
+ str_type('ps'), str_type(' firefox ')]
for ps_cmd in (system.IS_RUNNING_PS_LINUX, system.IS_RUNNING_PS_BSD):
call_mock.side_effect = mock_call(ps_cmd, running_commands)
1
0
commit c9653bcfc88082e66ca8a6b151741dd6a33e07da
Author: Damian Johnson <atagar(a)torproject.org>
Date: Sat Jan 3 12:34:47 2015 -0800
Dropping unnecessary list() calls
Python's 2to3 converter wraps quite a few things with list() to be safe...
https://stackoverflow.com/questions/17695456/why-python-3-needs-wrap-dict-i…
More often than not this is the right thing. In particular...
* If we return the value then we need the list() call, since dict's keys(),
values(), and items() now return a different type.
* If we concurrently modify the dictionary *or* it's an argument provided
from our caller (so they might concurrently modify it) then we need this
shallow copy so we don't raise an exception due to concurrent modification.
That is to say, the only time we *don't* need the list() call is when it's a
local variable that won't be concurrently modified. There's quite a few
instances of this, so dropping the extraneous list() when we can.
---
run_tests.py | 6 ++---
stem/__init__.py | 2 +-
stem/control.py | 18 +++++++-------
stem/descriptor/microdescriptor.py | 2 +-
stem/descriptor/networkstatus.py | 12 ++++-----
stem/descriptor/remote.py | 8 +++---
stem/exit_policy.py | 4 +--
stem/interpreter/arguments.py | 2 +-
stem/interpreter/autocomplete.py | 2 +-
stem/interpreter/help.py | 2 +-
stem/response/__init__.py | 2 +-
stem/response/events.py | 2 +-
stem/util/conf.py | 2 +-
stem/util/connection.py | 2 +-
stem/util/system.py | 2 +-
stem/util/test_tools.py | 2 +-
test/integ/control/controller.py | 2 +-
test/integ/descriptor/remote.py | 2 +-
test/mocking.py | 4 +--
test/unit/control/controller.py | 2 +-
.../descriptor/networkstatus/bridge_document.py | 2 +-
test/unit/descriptor/networkstatus/document_v3.py | 10 ++++----
test/unit/descriptor/router_status_entry.py | 16 ++++++------
test/unit/exit_policy/policy.py | 10 ++++----
test/unit/exit_policy/rule.py | 26 ++++++++++----------
test/unit/tutorial.py | 2 +-
test/unit/tutorial_examples.py | 14 +++++------
test/unit/util/connection.py | 4 +--
test/unit/util/str_tools.py | 2 +-
test/util.py | 4 +--
30 files changed, 85 insertions(+), 85 deletions(-)
diff --git a/run_tests.py b/run_tests.py
index c881f66..2bf2744 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -300,14 +300,14 @@ def main():
static_check_issues = {}
if pyflakes_task and pyflakes_task.is_successful:
- for path, issues in list(pyflakes_task.result.items()):
+ for path, issues in pyflakes_task.result.items():
for issue in issues:
static_check_issues.setdefault(path, []).append(issue)
elif not stem.util.test_tools.is_pyflakes_available():
println("Static error checking requires pyflakes version 0.7.3 or later. Please install it from ...\n http://pypi.python.org/pypi/pyflakes\n", ERROR)
if pep8_task and pep8_task.is_successful:
- for path, issues in list(pep8_task.result.items()):
+ for path, issues in pep8_task.result.items():
for issue in issues:
static_check_issues.setdefault(path, []).append(issue)
elif not stem.util.test_tools.is_pep8_available():
@@ -403,7 +403,7 @@ def _get_args(argv):
# translates our args dict into a named tuple
- Args = collections.namedtuple('Args', list(args.keys()))
+ Args = collections.namedtuple('Args', args.keys())
return Args(**args)
diff --git a/stem/__init__.py b/stem/__init__.py
index 3ac4565..baa2ef8 100644
--- a/stem/__init__.py
+++ b/stem/__init__.py
@@ -712,7 +712,7 @@ StreamStatus = stem.util.enum.UppercaseEnum(
)
# StreamClosureReason is a superset of RelayEndReason
-StreamClosureReason = stem.util.enum.UppercaseEnum(*(list(RelayEndReason.keys()) + [
+StreamClosureReason = stem.util.enum.UppercaseEnum(*(RelayEndReason.keys() + [
'END',
'PRIVATE_ADDR',
]))
diff --git a/stem/control.py b/stem/control.py
index 993d5c3..6c34671 100644
--- a/stem/control.py
+++ b/stem/control.py
@@ -926,7 +926,7 @@ class Controller(BaseController):
if self.is_caching_enabled():
self._set_cache(dict((k, None) for k in event.config), 'getconf')
- if 'exitpolicy' in list(event.config.keys()):
+ if 'exitpolicy' in event.config.keys():
self._set_cache({'exitpolicy': None})
self.add_event_listener(_confchanged_listener, EventType.CONF_CHANGED)
@@ -1020,7 +1020,7 @@ class Controller(BaseController):
# if everything was cached then short circuit making the query
if not params:
- log.trace('GETINFO %s (cache fetch)' % ' '.join(list(reply.keys())))
+ log.trace('GETINFO %s (cache fetch)' % ' '.join(reply.keys()))
if is_multiple:
return reply
@@ -1035,14 +1035,14 @@ class Controller(BaseController):
# usually we want unicode values under python 3.x
if stem.prereq.is_python_3() and not get_bytes:
- response.entries = dict((k, stem.util.str_tools._to_unicode(v)) for (k, v) in list(response.entries.items()))
+ response.entries = dict((k, stem.util.str_tools._to_unicode(v)) for (k, v) in response.entries.items())
reply.update(response.entries)
if self.is_caching_enabled():
to_cache = {}
- for key, value in list(response.entries.items()):
+ for key, value in response.entries.items():
key = key.lower() # make case insensitive
if key in CACHEABLE_GETINFO_PARAMS:
@@ -1911,7 +1911,7 @@ class Controller(BaseController):
# if everything was cached then short circuit making the query
if not lookup_params:
- log.trace('GETCONF %s (cache fetch)' % ' '.join(list(reply.keys())))
+ log.trace('GETCONF %s (cache fetch)' % ' '.join(reply.keys()))
return self._get_conf_dict_to_response(reply, default, multiple)
try:
@@ -1920,7 +1920,7 @@ class Controller(BaseController):
reply.update(response.entries)
if self.is_caching_enabled():
- to_cache = dict((k.lower(), v) for k, v in list(response.entries.items()))
+ to_cache = dict((k.lower(), v) for k, v in response.entries.items())
for key in UNCACHEABLE_GETCONF_PARAMS:
if key in to_cache:
@@ -1939,7 +1939,7 @@ class Controller(BaseController):
# be sure what they wanted.
for key in reply:
- if not key.lower() in list(MAPPED_CONFIG_KEYS.values()):
+ if not key.lower() in MAPPED_CONFIG_KEYS.values():
user_expected_key = _case_insensitive_lookup(params, key, key)
if key != user_expected_key:
@@ -2447,7 +2447,7 @@ class Controller(BaseController):
del self._event_listeners[event_type]
if event_types_changed:
- response = self.msg('SETEVENTS %s' % ' '.join(list(self._event_listeners.keys())))
+ response = self.msg('SETEVENTS %s' % ' '.join(self._event_listeners.keys()))
if not response.is_ok():
raise stem.ProtocolError('SETEVENTS received unexpected response\n%s' % response)
@@ -3158,7 +3158,7 @@ class Controller(BaseController):
with self._event_listeners_lock:
if self.is_authenticated():
# try to set them all
- response = self.msg('SETEVENTS %s' % ' '.join(list(self._event_listeners.keys())))
+ response = self.msg('SETEVENTS %s' % ' '.join(self._event_listeners.keys()))
if response.is_ok():
set_events = list(self._event_listeners.keys())
diff --git a/stem/descriptor/microdescriptor.py b/stem/descriptor/microdescriptor.py
index e5d690f..093e6f0 100644
--- a/stem/descriptor/microdescriptor.py
+++ b/stem/descriptor/microdescriptor.py
@@ -302,7 +302,7 @@ class Microdescriptor(Descriptor):
if keyword in entries and len(entries[keyword]) > 1:
raise ValueError("The '%s' entry can only appear once in a microdescriptor" % keyword)
- if "onion-key" != list(entries.keys())[0]:
+ if 'onion-key' != list(entries.keys())[0]:
raise ValueError("Microdescriptor must start with a 'onion-key' entry")
def _name(self, is_plural = False):
diff --git a/stem/descriptor/networkstatus.py b/stem/descriptor/networkstatus.py
index 65bf5cc..33beb4a 100644
--- a/stem/descriptor/networkstatus.py
+++ b/stem/descriptor/networkstatus.py
@@ -516,7 +516,7 @@ class NetworkStatusDocumentV3(NetworkStatusDocument):
self._header = _DocumentHeader(document_file, validate, default_params)
# merge header attributes into us
- for attr, value in list(vars(self._header).items()):
+ for attr, value in vars(self._header).items():
if attr != '_unrecognized_lines':
setattr(self, attr, value)
else:
@@ -553,7 +553,7 @@ class NetworkStatusDocumentV3(NetworkStatusDocument):
self._footer = _DocumentFooter(document_file, validate, self._header)
# merge header attributes into us
- for attr, value in list(vars(self._footer).items()):
+ for attr, value in vars(self._footer).items():
if attr != '_unrecognized_lines':
setattr(self, attr, value)
else:
@@ -795,7 +795,7 @@ class _DocumentHeader(object):
Checks that the params we know about are within their documented ranges.
"""
- for key, value in list(self.params.items()):
+ for key, value in self.params.items():
# all parameters are constrained to int32 range
minimum, maximum = -2147483648, 2147483647
@@ -941,11 +941,11 @@ def _check_for_missing_and_disallowed_fields(header, entries, fields):
for field, in_votes, in_consensus, mandatory in fields:
if mandatory and ((header.is_consensus and in_consensus) or (header.is_vote and in_votes)):
# mandatory field, check that we have it
- if field not in list(entries.keys()):
+ if field not in entries.keys():
missing_fields.append(field)
elif (header.is_consensus and not in_consensus) or (header.is_vote and not in_votes):
# field we shouldn't have, check that we don't
- if field in list(entries.keys()):
+ if field in entries.keys():
disallowed_fields.append(field)
if missing_fields:
@@ -972,7 +972,7 @@ def _check_for_misordered_fields(entries, expected):
# document type or are unknown. Remove the unknown fields since they
# reflect a spec change and can appear anywhere in the document.
- actual = [field for field in list(entries.keys()) if field in expected]
+ actual = [field for field in entries.keys() if field in expected]
# Narrow the expected to just what we have. If the lists then match then the
# order's valid.
diff --git a/stem/descriptor/remote.py b/stem/descriptor/remote.py
index fa0a672..058741f 100644
--- a/stem/descriptor/remote.py
+++ b/stem/descriptor/remote.py
@@ -344,7 +344,7 @@ class Query(object):
"""
if use_authority or not self.endpoints:
- authority = random.choice(list(filter(HAS_V3IDENT, list(get_authorities().values()))))
+ authority = random.choice(filter(HAS_V3IDENT, get_authorities().values()))
address, dirport = authority.address, authority.dir_port
else:
address, dirport = random.choice(self.endpoints)
@@ -394,7 +394,7 @@ class DescriptorDownloader(object):
def __init__(self, use_mirrors = False, **default_args):
self._default_args = default_args
- authorities = list(filter(HAS_V3IDENT, list(get_authorities().values())))
+ authorities = filter(HAS_V3IDENT, get_authorities().values())
self._endpoints = [(auth.address, auth.dir_port) for auth in authorities]
if use_mirrors:
@@ -416,12 +416,12 @@ class DescriptorDownloader(object):
:raises: **Exception** if unable to determine the directory mirrors
"""
- authorities = list(filter(HAS_V3IDENT, list(get_authorities().values())))
+ authorities = filter(HAS_V3IDENT, get_authorities().values())
new_endpoints = set([(auth.address, auth.dir_port) for auth in authorities])
consensus = list(self.get_consensus(document_handler = stem.descriptor.DocumentHandler.DOCUMENT).run())[0]
- for desc in list(consensus.routers.values()):
+ for desc in consensus.routers.values():
if Flag.V2DIR in desc.flags:
new_endpoints.add((desc.address, desc.dir_port))
diff --git a/stem/exit_policy.py b/stem/exit_policy.py
index 06b2b53..afcd81d 100644
--- a/stem/exit_policy.py
+++ b/stem/exit_policy.py
@@ -306,7 +306,7 @@ class ExitPolicy(object):
if rule.is_port_wildcard():
return False
else:
- rejected_ports.update(list(range(rule.min_port, rule.max_port + 1)))
+ rejected_ports.update(range(rule.min_port, rule.max_port + 1))
return self._is_allowed_default
@@ -1026,7 +1026,7 @@ def _address_type_to_int(address_type):
def _int_to_address_type(address_type_int):
- return AddressType[list(AddressType.keys())[address_type_int]]
+ return list(AddressType)[address_type_int]
class MicroExitPolicyRule(ExitPolicyRule):
diff --git a/stem/interpreter/arguments.py b/stem/interpreter/arguments.py
index d36d618..d62a386 100644
--- a/stem/interpreter/arguments.py
+++ b/stem/interpreter/arguments.py
@@ -77,7 +77,7 @@ def parse(argv):
# translates our args dict into a named tuple
- Args = collections.namedtuple('Args', list(args.keys()))
+ Args = collections.namedtuple('Args', args.keys())
return Args(**args)
diff --git a/stem/interpreter/autocomplete.py b/stem/interpreter/autocomplete.py
index c014ef3..3a9b40b 100644
--- a/stem/interpreter/autocomplete.py
+++ b/stem/interpreter/autocomplete.py
@@ -70,7 +70,7 @@ def _get_commands(controller, config):
usage_info = config.get('help.usage', {})
- for cmd in list(usage_info.keys()):
+ for cmd in usage_info.keys():
commands.append('/help ' + cmd)
return commands
diff --git a/stem/interpreter/help.py b/stem/interpreter/help.py
index 174bc43..983da3e 100644
--- a/stem/interpreter/help.py
+++ b/stem/interpreter/help.py
@@ -97,7 +97,7 @@ def _response(controller, arg, config):
elif arg == 'SIGNAL':
signal_options = config.get('help.signal.options', {})
- for signal, summary in list(signal_options.items()):
+ for signal, summary in signal_options.items():
output += format('%-15s' % signal, *BOLD_OUTPUT)
output += format(' - %s' % summary, *STANDARD_OUTPUT) + '\n'
elif arg == 'SETEVENTS':
diff --git a/stem/response/__init__.py b/stem/response/__init__.py
index 38d7d8e..6a91698 100644
--- a/stem/response/__init__.py
+++ b/stem/response/__init__.py
@@ -532,7 +532,7 @@ def _unescape(entry):
#
# (unescaped prefix, remaining entry)
- for esc_sequence, replacement in list(CONTROL_ESCAPES.items()):
+ for esc_sequence, replacement in CONTROL_ESCAPES.items():
if entry.startswith(esc_sequence):
return (replacement, entry[len(esc_sequence):])
diff --git a/stem/response/events.py b/stem/response/events.py
index 55c73e3..3e54281 100644
--- a/stem/response/events.py
+++ b/stem/response/events.py
@@ -123,7 +123,7 @@ class Event(stem.response.ControlMessage):
setattr(self, attr_name, attr_value)
- for controller_attr_name, attr_name in list(self._KEYWORD_ARGS.items()):
+ for controller_attr_name, attr_name in self._KEYWORD_ARGS.items():
setattr(self, attr_name, self.keyword_args.get(controller_attr_name))
# method overwritten by our subclasses for special handling that they do
diff --git a/stem/util/conf.py b/stem/util/conf.py
index c74361c..0b1e937 100644
--- a/stem/util/conf.py
+++ b/stem/util/conf.py
@@ -576,7 +576,7 @@ class Config(object):
self._listeners.append(listener)
if backfill:
- for key in list(self.keys()):
+ for key in self.keys():
listener(self, key)
def clear_listeners(self):
diff --git a/stem/util/connection.py b/stem/util/connection.py
index ded09b3..2165b45 100644
--- a/stem/util/connection.py
+++ b/stem/util/connection.py
@@ -304,7 +304,7 @@ def port_usage(port):
config.load(config_path)
port_uses = {}
- for key, value in list(config.get('port', {}).items()):
+ for key, value in config.get('port', {}).items():
if key.isdigit():
port_uses[int(key)] = value
elif '-' in key:
diff --git a/stem/util/system.py b/stem/util/system.py
index 315c39e..66f46a9 100644
--- a/stem/util/system.py
+++ b/stem/util/system.py
@@ -243,7 +243,7 @@ def is_running(command):
command_listing = call(secondary_resolver, None)
if command_listing:
- command_listing = list(map(str_type.strip, command_listing))
+ command_listing = map(str_type.strip, command_listing)
return command in command_listing
return None
diff --git a/stem/util/test_tools.py b/stem/util/test_tools.py
index 624f445..8209c58 100644
--- a/stem/util/test_tools.py
+++ b/stem/util/test_tools.py
@@ -262,7 +262,7 @@ def pyflakes_issues(paths):
# Paths in pyflakes_ignore are relative, so we need to check to see if our
# path ends with any of them.
- for ignored_path, ignored_issues in list(self._ignored_issues.items()):
+ for ignored_path, ignored_issues in self._ignored_issues.items():
if path.endswith(ignored_path) and issue in ignored_issues:
return True
diff --git a/test/integ/control/controller.py b/test/integ/control/controller.py
index fbe66e5..0839bc1 100644
--- a/test/integ/control/controller.py
+++ b/test/integ/control/controller.py
@@ -420,7 +420,7 @@ class TestController(unittest.TestCase):
self.assertEqual(expected, controller.get_conf_map([config_key], 'la-di-dah'))
request_params = ['ControlPORT', 'dirport', 'datadirectory']
- reply_params = list(controller.get_conf_map(request_params, multiple=False).keys())
+ reply_params = controller.get_conf_map(request_params, multiple=False).keys()
self.assertEqual(set(request_params), set(reply_params))
# queries an option that is unset
diff --git a/test/integ/descriptor/remote.py b/test/integ/descriptor/remote.py
index d1700a5..d1a377c 100644
--- a/test/integ/descriptor/remote.py
+++ b/test/integ/descriptor/remote.py
@@ -31,7 +31,7 @@ class TestDescriptorDownloader(unittest.TestCase):
queries = []
- for nickname, authority in list(stem.descriptor.remote.get_authorities().items()):
+ for nickname, authority in stem.descriptor.remote.get_authorities().items():
queries.append((stem.descriptor.remote.Query(
'/tor/server/fp/9695DFC35FFEB861329B9F1AB04C46397020CE31',
'server-descriptor 1.0',
diff --git a/test/mocking.py b/test/mocking.py
index 3d6ac16..28a2e65 100644
--- a/test/mocking.py
+++ b/test/mocking.py
@@ -323,7 +323,7 @@ def _get_descriptor_content(attr = None, exclude = (), header_template = (), foo
remainder = []
- for k, v in list(attr.items()):
+ for k, v in attr.items():
if v:
remainder.append('%s %s' % (k, v))
else:
@@ -605,7 +605,7 @@ def get_network_status_document_v3(attr = None, exclude = (), authorities = None
'consensus-method': '9',
}
- for k, v in list(extra_defaults.items()):
+ for k, v in extra_defaults.items():
if not (k in attr or (exclude and k in exclude)):
attr[k] = v
diff --git a/test/unit/control/controller.py b/test/unit/control/controller.py
index 3dd57d3..58df2d4 100644
--- a/test/unit/control/controller.py
+++ b/test/unit/control/controller.py
@@ -585,7 +585,7 @@ class TestControl(unittest.TestCase):
],
}
- for test_input, expected in list(pydoc_examples.items()):
+ for test_input, expected in pydoc_examples.items():
self.assertEqual(expected, _parse_circ_path(test_input))
# exercise with some invalid inputs
diff --git a/test/unit/descriptor/networkstatus/bridge_document.py b/test/unit/descriptor/networkstatus/bridge_document.py
index 2ec2a22..1ba53e7 100644
--- a/test/unit/descriptor/networkstatus/bridge_document.py
+++ b/test/unit/descriptor/networkstatus/bridge_document.py
@@ -111,5 +111,5 @@ GM9hAsAMRX9Ogqhq5UjDNqEsvDKuyVeyh7unSZEOip9Zr6K/+7VsVPNb8vfBRBjo
self.assertEqual(datetime.datetime(2012, 6, 1, 4, 7, 4), document.published)
self.assertEqual(2, len(document.routers))
- self.assertEqual(set(['Unnamed', 'TolFuin']), set([desc.nickname for desc in list(document.routers.values())]))
+ self.assertEqual(set(['Unnamed', 'TolFuin']), set([desc.nickname for desc in document.routers.values()]))
self.assertEqual([], document.get_unrecognized_lines())
diff --git a/test/unit/descriptor/networkstatus/document_v3.py b/test/unit/descriptor/networkstatus/document_v3.py
index fafd455..9e6f510 100644
--- a/test/unit/descriptor/networkstatus/document_v3.py
+++ b/test/unit/descriptor/networkstatus/document_v3.py
@@ -383,7 +383,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
consensus = NetworkStatusDocumentV3(consensus_file.read())
consensus_file.close()
- for router in list(consensus.routers.values()):
+ for router in consensus.routers.values():
self.assertEqual('caerSidi', router.nickname)
# second example: using stem.descriptor.parse_file
@@ -1048,8 +1048,8 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
document = get_network_status_document_v3(routers = (entry1, entry2))
- self.assertTrue(entry1 in list(document.routers.values()))
- self.assertTrue(entry2 in list(document.routers.values()))
+ self.assertTrue(entry1 in document.routers.values())
+ self.assertTrue(entry2 in document.routers.values())
# try with an invalid RouterStatusEntry
@@ -1082,8 +1082,8 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
document = get_network_status_document_v3({'network-status-version': '3 microdesc'}, routers = (entry1, entry2))
- self.assertTrue(entry1 in list(document.routers.values()))
- self.assertTrue(entry2 in list(document.routers.values()))
+ self.assertTrue(entry1 in document.routers.values())
+ self.assertTrue(entry2 in document.routers.values())
# try with an invalid RouterStatusEntry
diff --git a/test/unit/descriptor/router_status_entry.py b/test/unit/descriptor/router_status_entry.py
index 603cb86..50924de 100644
--- a/test/unit/descriptor/router_status_entry.py
+++ b/test/unit/descriptor/router_status_entry.py
@@ -34,7 +34,7 @@ class TestRouterStatusEntry(unittest.TestCase):
'/nHdqoKZ6bKZixxAPzYt9Qen+Is': 'FE71DDAA8299E9B2998B1C403F362DF507A7F88B',
}
- for arg, expected in list(test_values.items()):
+ for arg, expected in test_values.items():
self.assertEqual(expected, _base64_to_hex(arg, True))
# checks with some malformed inputs
@@ -319,7 +319,7 @@ class TestRouterStatusEntry(unittest.TestCase):
('2607:fcd0:daaa:101::602c:bd62', 443, True)],
}
- for a_line, expected in list(test_values.items()):
+ for a_line, expected in test_values.items():
entry = get_router_status_entry_v3({'a': a_line})
self.assertEqual(expected, entry.or_addresses)
@@ -360,7 +360,7 @@ class TestRouterStatusEntry(unittest.TestCase):
'Ugabuga': ['Ugabuga'],
}
- for s_line, expected in list(test_values.items()):
+ for s_line, expected in test_values.items():
entry = get_router_status_entry_v3({'s': s_line})
self.assertEqual(expected, entry.flags)
@@ -371,7 +371,7 @@ class TestRouterStatusEntry(unittest.TestCase):
'Fast Fast': [Flag.FAST, Flag.FAST],
}
- for s_line, expected in list(test_values.items()):
+ for s_line, expected in test_values.items():
content = get_router_status_entry_v3({'s': s_line}, content = True)
self._expect_invalid_attr(content, 'flags', expected)
@@ -387,7 +387,7 @@ class TestRouterStatusEntry(unittest.TestCase):
'new_stuff and stuff': None,
}
- for v_line, expected in list(test_values.items()):
+ for v_line, expected in test_values.items():
entry = get_router_status_entry_v3({'v': v_line})
self.assertEqual(expected, entry.version)
self.assertEqual(v_line, entry.version_line)
@@ -409,7 +409,7 @@ class TestRouterStatusEntry(unittest.TestCase):
'Bandwidth=11111 Measured=482 Unmeasured=1 Blarg!': (11111, 482, True, ['Blarg!']),
}
- for w_line, expected in list(test_values.items()):
+ for w_line, expected in test_values.items():
entry = get_router_status_entry_v3({'w': w_line})
self.assertEqual(expected[0], entry.bandwidth)
self.assertEqual(expected[1], entry.measured)
@@ -449,7 +449,7 @@ class TestRouterStatusEntry(unittest.TestCase):
'accept 80,110,143,443': MicroExitPolicy('accept 80,110,143,443'),
}
- for p_line, expected in list(test_values.items()):
+ for p_line, expected in test_values.items():
entry = get_router_status_entry_v3({'p': p_line})
self.assertEqual(expected, entry.exit_policy)
@@ -484,7 +484,7 @@ class TestRouterStatusEntry(unittest.TestCase):
setattr(mock_document, 'is_vote', True)
setattr(mock_document, 'is_consensus', False)
- for m_line, expected in list(test_values.items()):
+ for m_line, expected in test_values.items():
content = get_router_status_entry_v3({'m': m_line}, content = True)
entry = RouterStatusEntryV3(content, document = mock_document)
self.assertEqual(expected, entry.microdescriptor_hashes)
diff --git a/test/unit/exit_policy/policy.py b/test/unit/exit_policy/policy.py
index 3eef79b..d4eaa75 100644
--- a/test/unit/exit_policy/policy.py
+++ b/test/unit/exit_policy/policy.py
@@ -78,7 +78,7 @@ class TestExitPolicy(unittest.TestCase):
('reject 127.0.0.1:*', 'accept *:80', 'reject *:*'): True,
}
- for rules, expected_result in list(test_inputs.items()):
+ for rules, expected_result in test_inputs.items():
policy = ExitPolicy(*rules)
self.assertEqual(expected_result, policy.is_exiting_allowed())
@@ -190,7 +190,7 @@ class TestExitPolicy(unittest.TestCase):
'bar 80,443': False,
}
- for policy_arg, expect_success in list(test_inputs.items()):
+ for policy_arg, expect_success in test_inputs.items():
try:
policy = MicroExitPolicy(policy_arg)
@@ -225,10 +225,10 @@ class TestExitPolicy(unittest.TestCase):
'reject 1-1024': {1: False, 1024: False, 1025: True},
}
- for policy_arg, attr in list(test_inputs.items()):
+ for policy_arg, attr in test_inputs.items():
policy = MicroExitPolicy(policy_arg)
- for port, expected_value in list(attr.items()):
+ for port, expected_value in attr.items():
self.assertEqual(expected_value, policy.can_exit_to(port = port))
# address argument should be ignored
@@ -261,7 +261,7 @@ class TestExitPolicy(unittest.TestCase):
),
}
- for test_input, expected in list(test_inputs.items()):
+ for test_input, expected in test_inputs.items():
self.assertEqual(expected, get_config_policy(test_input, '12.34.56.78'))
test_inputs = (
diff --git a/test/unit/exit_policy/rule.py b/test/unit/exit_policy/rule.py
index 39b6de9..1661442 100644
--- a/test/unit/exit_policy/rule.py
+++ b/test/unit/exit_policy/rule.py
@@ -58,7 +58,7 @@ class TestExitPolicyRule(unittest.TestCase):
'accept [::]/128:*': 'accept [0000:0000:0000:0000:0000:0000:0000:0000]:*',
}
- for rule_arg, expected_str in list(test_inputs.items()):
+ for rule_arg, expected_str in test_inputs.items():
rule = ExitPolicyRule(rule_arg)
self.assertEqual(expected_str, str(rule))
@@ -83,7 +83,7 @@ class TestExitPolicyRule(unittest.TestCase):
'accept 192.168.0.1:1-65534': (False, False),
}
- for rule_arg, attr in list(test_inputs.items()):
+ for rule_arg, attr in test_inputs.items():
is_address_wildcard, is_port_wildcard = attr
rule = ExitPolicyRule(rule_arg)
@@ -128,7 +128,7 @@ class TestExitPolicyRule(unittest.TestCase):
'255.255.255.255/0': ('255.255.255.255', '0.0.0.0', 0),
}
- for rule_addr, attr in list(test_inputs.items()):
+ for rule_addr, attr in test_inputs.items():
address, mask, masked_bits = attr
rule = ExitPolicyRule('accept %s:*' % rule_addr)
@@ -167,7 +167,7 @@ class TestExitPolicyRule(unittest.TestCase):
'FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF', 128),
}
- for rule_addr, attr in list(test_inputs.items()):
+ for rule_addr, attr in test_inputs.items():
address, mask, masked_bits = attr
rule = ExitPolicyRule('accept %s:*' % rule_addr)
@@ -199,7 +199,7 @@ class TestExitPolicyRule(unittest.TestCase):
'80-443': (80, 443),
}
- for rule_port, attr in list(test_inputs.items()):
+ for rule_port, attr in test_inputs.items():
min_port, max_port = attr
rule = ExitPolicyRule('accept 127.0.0.1:%s' % rule_port)
@@ -246,11 +246,11 @@ class TestExitPolicyRule(unittest.TestCase):
},
}
- for rule_arg, matches in list(test_inputs.items()):
+ for rule_arg, matches in test_inputs.items():
rule = ExitPolicyRule(rule_arg)
rule._submask_wildcard = False
- for match_args, expected_result in list(matches.items()):
+ for match_args, expected_result in matches.items():
self.assertEqual(expected_result, rule.is_match(*match_args))
# port zero is special in that exit policies can include it, but it's not
@@ -282,10 +282,10 @@ class TestExitPolicyRule(unittest.TestCase):
},
}
- for rule_arg, matches in list(test_inputs.items()):
+ for rule_arg, matches in test_inputs.items():
rule = ExitPolicyRule(rule_arg)
- for match_args, expected_result in list(matches.items()):
+ for match_args, expected_result in matches.items():
self.assertEqual(expected_result, rule.is_match(*match_args))
def test_is_match_ipv6(self):
@@ -313,10 +313,10 @@ class TestExitPolicyRule(unittest.TestCase):
},
}
- for rule_arg, matches in list(test_inputs.items()):
+ for rule_arg, matches in test_inputs.items():
rule = ExitPolicyRule(rule_arg)
- for match_args, expected_result in list(matches.items()):
+ for match_args, expected_result in matches.items():
self.assertEqual(expected_result, rule.is_match(*match_args))
def test_is_match_port(self):
@@ -341,8 +341,8 @@ class TestExitPolicyRule(unittest.TestCase):
},
}
- for rule_arg, matches in list(test_inputs.items()):
+ for rule_arg, matches in test_inputs.items():
rule = ExitPolicyRule(rule_arg)
- for match_args, expected_result in list(matches.items()):
+ for match_args, expected_result in matches.items():
self.assertEqual(expected_result, rule.is_match(*match_args))
diff --git a/test/unit/tutorial.py b/test/unit/tutorial.py
index 98d2a1a..55a170b 100644
--- a/test/unit/tutorial.py
+++ b/test/unit/tutorial.py
@@ -227,7 +227,7 @@ class TestTutorial(unittest.TestCase):
bw_to_relay = get_bw_to_relay()
count = 1
- for bw_value in sorted(list(bw_to_relay.keys()), reverse = True):
+ for bw_value in sorted(bw_to_relay.keys(), reverse = True):
for nickname in bw_to_relay[bw_value]:
print('%i. %s (%s/s)' % (count, nickname, str_tools.size_label(bw_value, 2)))
count += 1
diff --git a/test/unit/tutorial_examples.py b/test/unit/tutorial_examples.py
index 99b4466..d1f8673 100644
--- a/test/unit/tutorial_examples.py
+++ b/test/unit/tutorial_examples.py
@@ -284,7 +284,7 @@ class TestTutorialExamples(unittest.TestCase):
downloader = remote.DescriptorDownloader(document_handler = DocumentHandler.DOCUMENT)
queries = {}
- for name, authority in list(remote.get_authorities().items()):
+ for name, authority in remote.get_authorities().items():
if authority.v3ident is None:
continue # authority doens't vote if it lacks a v3ident
@@ -293,14 +293,14 @@ class TestTutorialExamples(unittest.TestCase):
# Wait for the votes to finish being downloaded, this produces a dictionary of
# authority nicknames to their vote.
- votes = dict((name, query.run()[0]) for (name, query) in list(queries.items()))
+ votes = dict((name, query.run()[0]) for (name, query) in queries.items())
# Get a superset of all the fingerprints in all the votes.
all_fingerprints = set()
- for vote in list(votes.values()):
- all_fingerprints.update(list(vote.routers.keys()))
+ for vote in votes.values():
+ all_fingerprints.update(vote.routers.keys())
# Finally, compare moria1's votes to maatuska.
@@ -367,14 +367,14 @@ class TestTutorialExamples(unittest.TestCase):
queries = {}
downloader = remote.DescriptorDownloader()
- for authority in list(remote.get_authorities().values()):
+ for authority in remote.get_authorities().values():
if authority.is_bandwidth_authority:
queries[authority.nickname] = downloader.query(
'/tor/status-vote/current/authority',
endpoints = [(authority.address, authority.dir_port)],
)
- for authority_name, query in list(queries.items()):
+ for authority_name, query in queries.items():
try:
print("Getting %s's vote from %s:" % (authority_name, query.download_url))
@@ -448,7 +448,7 @@ class TestTutorialExamples(unittest.TestCase):
document_handler = DocumentHandler.DOCUMENT,
))
- for fingerprint, relay in list(consensus.routers.items()):
+ for fingerprint, relay in consensus.routers.items():
print("%s: %s" % (fingerprint, relay.nickname))
network_status = get_network_status_document_v3(routers = (get_router_status_entry_v3(),))
diff --git a/test/unit/util/connection.py b/test/unit/util/connection.py
index 710122b..582e747 100644
--- a/test/unit/util/connection.py
+++ b/test/unit/util/connection.py
@@ -403,7 +403,7 @@ class TestConnection(unittest.TestCase):
'1::1': '0001:0000:0000:0000:0000:0000:0000:0001',
}
- for test_arg, expected in list(test_values.items()):
+ for test_arg, expected in test_values.items():
self.assertEqual(expected, stem.util.connection.expand_ipv6_address(test_arg))
self.assertRaises(ValueError, stem.util.connection.expand_ipv6_address, '127.0.0.1')
@@ -462,7 +462,7 @@ class TestConnection(unittest.TestCase):
'2001:db8::ff00:42:8329': '00100000000000010000110110111000000000000000000000000000000000000000000000000000111111110000000000000000010000101000001100101001',
}
- for test_arg, expected in list(test_values.items()):
+ for test_arg, expected in test_values.items():
self.assertEqual(expected, stem.util.connection._get_address_binary(test_arg))
self.assertRaises(ValueError, stem.util.connection._get_address_binary, '')
diff --git a/test/unit/util/str_tools.py b/test/unit/util/str_tools.py
index 1805d56..922026c 100644
--- a/test/unit/util/str_tools.py
+++ b/test/unit/util/str_tools.py
@@ -143,7 +143,7 @@ class TestStrTools(unittest.TestCase):
datetime.datetime(2012, 11, 8, 16, 48, 41, 0),
}
- for arg, expected in list(test_inputs.items()):
+ for arg, expected in test_inputs.items():
self.assertEqual(expected, str_tools._parse_iso_timestamp(arg))
invalid_input = [
diff --git a/test/util.py b/test/util.py
index 314b5e7..714d949 100644
--- a/test/util.py
+++ b/test/util.py
@@ -141,7 +141,7 @@ def get_help_message():
help_msg = CONFIG['msg.help']
# gets the longest target length so we can show the entries in columns
- target_name_length = max(list(map(len, Target)))
+ target_name_length = max(map(len, Target))
description_format = '\n %%-%is - %%s' % target_name_length
for target in Target:
@@ -192,7 +192,7 @@ def get_torrc_entries(target):
for opt in config_csv.split(','):
opt = opt.strip()
- if opt in list(test.runner.Torrc.keys()):
+ if opt in test.runner.Torrc.keys():
torrc_opts.append(test.runner.Torrc[opt])
else:
raise ValueError("'%s' isn't a test.runner.Torrc enumeration" % opt)
1
0