commit 501d172db534e5476ea1476a2cf07dd8dde56bfb
Author: Damian Johnson <atagar(a)torproject.org>
Date: Fri Mar 30 12:32:47 2018 -0700
Fix stem.descriptor.remote unit tests
Oops, prior change accidently broke our unit tests when offline.
---
test/unit/descriptor/remote.py | 53 ++++++++++++++++++------------------------
1 file changed, 23 insertions(+), 30 deletions(-)
diff --git a/test/unit/descriptor/remote.py b/test/unit/descriptor/remote.py
index 3661a54b..41585fc2 100644
--- a/test/unit/descriptor/remote.py
+++ b/test/unit/descriptor/remote.py
@@ -2,7 +2,6 @@
Unit tests for stem.descriptor.remote.
"""
-import io
import socket
import tempfile
import unittest
@@ -21,9 +20,9 @@ except ImportError:
try:
# added in python 3.3
- from unittest.mock import patch
+ from unittest.mock import patch, Mock
except ImportError:
- from mock import patch
+ from mock import patch, Mock
# The urlopen() method is in a different location depending on if we're using
# python 2.x or 3.x. The 2to3 converter accounts for this in imports, but not
@@ -111,6 +110,13 @@ FALLBACK_ENTRY = b"""\
"""
+def _urlopen_mock(data):
+ urlopen_mock = Mock()
+ urlopen_mock().read.return_value = data
+ urlopen_mock().info().getheader.return_value = 'identity'
+ return urlopen_mock
+
+
class TestDescriptorDownloader(unittest.TestCase):
def test_gzip_url_override(self):
query = stem.descriptor.remote.Query(TEST_RESOURCE, start = False)
@@ -139,14 +145,12 @@ class TestDescriptorDownloader(unittest.TestCase):
query = stem.descriptor.remote.Query(TEST_RESOURCE, compression = Compression.LZMA, start = False)
self.assertEqual([Compression.PLAINTEXT], query.compression)
- @patch(URL_OPEN)
- def test_query_download(self, urlopen_mock):
+ @patch(URL_OPEN, _urlopen_mock(TEST_DESCRIPTOR))
+ def test_query_download(self):
"""
Check Query functionality when we successfully download a descriptor.
"""
- urlopen_mock.return_value = io.BytesIO(TEST_DESCRIPTOR)
-
query = stem.descriptor.remote.Query(
TEST_RESOURCE,
'server-descriptor 1.0',
@@ -167,17 +171,12 @@ class TestDescriptorDownloader(unittest.TestCase):
self.assertEqual('9695DFC35FFEB861329B9F1AB04C46397020CE31', desc.fingerprint)
self.assertEqual(TEST_DESCRIPTOR.strip(), desc.get_bytes())
- self.assertEqual(1, urlopen_mock.call_count)
-
- @patch(URL_OPEN)
- def test_query_with_malformed_content(self, urlopen_mock):
+ @patch(URL_OPEN, _urlopen_mock(b'some malformed stuff'))
+ def test_query_with_malformed_content(self):
"""
Query with malformed descriptor content.
"""
- descriptor_content = b'some malformed stuff'
- urlopen_mock.return_value = io.BytesIO(descriptor_content)
-
query = stem.descriptor.remote.Query(
TEST_RESOURCE,
'server-descriptor 1.0',
@@ -215,10 +214,8 @@ class TestDescriptorDownloader(unittest.TestCase):
self.assertRaises(socket.timeout, query.run)
self.assertEqual(3, urlopen_mock.call_count)
- @patch(URL_OPEN)
- def test_can_iterate_multiple_times(self, urlopen_mock):
- urlopen_mock.return_value = io.BytesIO(TEST_DESCRIPTOR)
-
+ @patch(URL_OPEN, _urlopen_mock(TEST_DESCRIPTOR))
+ def test_can_iterate_multiple_times(self):
query = stem.descriptor.remote.Query(
TEST_RESOURCE,
'server-descriptor 1.0',
@@ -243,9 +240,8 @@ class TestDescriptorDownloader(unittest.TestCase):
self.assertTrue(len(fallback_directories) > 10)
self.assertEqual('5.39.92.199', fallback_directories['0BEA4A88D069753218EAAAD6D22EA87B9A1319D6'].address)
- @patch(URL_OPEN)
- def test_fallback_directories_from_remote(self, urlopen_mock):
- urlopen_mock.return_value = io.BytesIO(FALLBACK_DIR_CONTENT)
+ @patch(URL_OPEN, _urlopen_mock(FALLBACK_DIR_CONTENT))
+ def test_fallback_directories_from_remote(self):
fallback_directories = stem.descriptor.remote.FallbackDirectory.from_remote()
header = OrderedDict((('type', 'fallback'), ('version', '2.0.0'), ('timestamp', '20170526090242')))
@@ -328,19 +324,16 @@ class TestDescriptorDownloader(unittest.TestCase):
self.assertEqual(expected, stem.descriptor.remote.FallbackDirectory.from_cache(tmp.name))
- @patch(URL_OPEN)
- def test_fallback_directories_from_remote_empty(self, urlopen_mock):
- urlopen_mock.return_value = io.BytesIO(b'')
+ @patch(URL_OPEN, _urlopen_mock(b''))
+ def test_fallback_directories_from_remote_empty(self):
self.assertRaisesRegexp(IOError, 'did not have any content', stem.descriptor.remote.FallbackDirectory.from_remote)
- @patch(URL_OPEN)
- def test_fallback_directories_from_remote_no_header(self, urlopen_mock):
- urlopen_mock.return_value = io.BytesIO(b'\n'.join(FALLBACK_DIR_CONTENT.splitlines()[1:]))
+ @patch(URL_OPEN, _urlopen_mock(b'\n'.join(FALLBACK_DIR_CONTENT.splitlines()[1:])))
+ def test_fallback_directories_from_remote_no_header(self):
self.assertRaisesRegexp(IOError, 'does not have a type field indicating it is fallback directory metadata', stem.descriptor.remote.FallbackDirectory.from_remote)
- @patch(URL_OPEN)
- def test_fallback_directories_from_remote_malformed_header(self, urlopen_mock):
- urlopen_mock.return_value = io.BytesIO(FALLBACK_DIR_CONTENT.replace(b'version=2.0.0', b'version'))
+ @patch(URL_OPEN, _urlopen_mock(FALLBACK_DIR_CONTENT.replace(b'version=2.0.0', b'version')))
+ def test_fallback_directories_from_remote_malformed_header(self):
self.assertRaisesRegexp(IOError, 'Malformed fallback directory header line: /\* version \*/', stem.descriptor.remote.FallbackDirectory.from_remote)
def test_fallback_directories_from_str(self):