[tor-commits] [bridgedb/develop] Fix most autoresponder tests
phw at torproject.org
phw at torproject.org
Wed Feb 19 18:27:17 UTC 2020
commit 5aa0adcbb2725011ecd7fd11eb94d0bc2c30ab42
Author: Damian Johnson <atagar at torproject.org>
Date: Tue Jan 14 16:12:15 2020 -0800
Fix most autoresponder tests
Low hanging fruit to get all the autoresponder tests aside from
'getMailFrom_plus_address' passing. This last test involves API
differences between the rfc822 and email modules.
Errors this resolve are the usual byte/unicode differences...
Traceback (most recent call last):
File "/home/atagar/Desktop/tor/bridgedb/bridgedb/test/test_email_autoresponder.py", line 256, in test_EmailResponse_write
response.write(self.body)
File "/home/atagar/Desktop/tor/bridgedb/bridgedb/distributors/email/autoresponder.py", line 273, in write
self.mailfile.write(line.encode('utf8'))
builtins.TypeError: string argument expected, got 'bytes'
Indexing into an iterable...
Traceback (most recent call last):
File "/home/atagar/Desktop/tor/bridgedb/bridgedb/test/test_email_autoresponder.py", line 50, in setUp
self.ctx = _createMailServerContext(self.config)
File "/home/atagar/Desktop/tor/bridgedb/bridgedb/test/email_helpers.py", line 119, in _createMailServerContext
context = MailServerContext(config, distributor, Unscheduled())
File "/home/atagar/Desktop/tor/bridgedb/bridgedb/distributors/email/server.py", line 142, in __init__
self.gpg, self.gpgSignFunc = initializeGnuPG(config)
File "/home/atagar/Desktop/tor/bridgedb/bridgedb/crypto.py", line 318, in initializeGnuPG
for sub in primaryPK[0]['subkeys']:
builtins.TypeError: 'filter' object is not subscriptable
... and double encoding...
Traceback (most recent call last):
File "/home/atagar/Desktop/tor/bridgedb/bridgedb/test/test_email_autoresponder.py", line 251, in test_EmailResponse_read_three_bytes
self.assertEqual(contents, self.body[:3])
File "/usr/local/lib/python3.5/dist-packages/twisted/trial/_synctest.py", line 432, in assertEqual
super(_Assertions, self).assertEqual(first, second, msg)
File "/usr/lib/python3.5/unittest/case.py", line 820, in assertEqual
assertion_func(first, second, msg=msg)
File "/usr/lib/python3.5/unittest/case.py", line 1193, in assertMultiLineEqual
self.fail(self._formatMessage(msg, standardMsg))
twisted.trial.unittest.FailTest: "b'Peo'" != 'Peo'
- b'Peo'
+ Peo
Test results changed as follows...
before: FAILED (skips=109, failures=21, errors=283, successes=567)
after: FAILED (skips=109, failures=24, errors=225, successes=623)
---
bridgedb/crypto.py | 2 +-
bridgedb/distributors/email/autoresponder.py | 24 ++++++++++++++++--------
bridgedb/distributors/email/server.py | 3 ++-
bridgedb/test/test_email_autoresponder.py | 8 ++++----
4 files changed, 23 insertions(+), 14 deletions(-)
diff --git a/bridgedb/crypto.py b/bridgedb/crypto.py
index bd3d783..5b1912f 100644
--- a/bridgedb/crypto.py
+++ b/bridgedb/crypto.py
@@ -315,7 +315,7 @@ def initializeGnuPG(config):
if primarySK and primaryPK:
logging.info("Found GnuPG primary key with fingerprint: %s" % primary)
- for sub in primaryPK[0]['subkeys']:
+ for sub in list(primaryPK)[0]['subkeys']:
logging.info(" Subkey: %s Usage: %s" % (sub[0], sub[1].upper()))
else:
logging.warn("GnuPG key %s could not be found in %s!" % (primary, gpg.secring))
diff --git a/bridgedb/distributors/email/autoresponder.py b/bridgedb/distributors/email/autoresponder.py
index bc1c7b9..1d2b618 100644
--- a/bridgedb/distributors/email/autoresponder.py
+++ b/bridgedb/distributors/email/autoresponder.py
@@ -263,6 +263,9 @@ class EmailResponse(object):
:param str line: Something to append into the :data:`mailfile`.
"""
+
+ line = line.decode('utf-8') if isinstance(line, bytes) else line
+
if line.find('\r\n') != -1:
# If **line** contains newlines, send it to :meth:`writelines` to
# break it up so that we can replace them:
@@ -270,7 +273,7 @@ class EmailResponse(object):
self.writelines(line)
else:
line += self.delimiter
- self.mailfile.write(line.encode('utf8'))
+ self.mailfile.write(line)
self.mailfile.flush()
def writelines(self, lines):
@@ -283,7 +286,8 @@ class EmailResponse(object):
:type lines: :any:`str` or :any:`list`
:param lines: The lines to write to the :attr:`mailfile`.
"""
- if isinstance(lines, str):
+ if isinstance(lines, (str, bytes)):
+ lines = lines.decode('utf-8') if isinstance(lines, bytes) else lines
lines = lines.replace('\r\n', '\n')
for ln in lines.split('\n'):
self.write(ln)
@@ -310,20 +314,24 @@ class EmailResponse(object):
:kwargs: If given, the key will become the name of the header, and the
value will become the contents of that header.
"""
+
+ fromAddress = fromAddress.decode('utf-8') if isinstance(fromAddress, bytes) else fromAddress
+ toAddress = toAddress.decode('utf-8') if isinstance(toAddress, bytes) else toAddress
+
self.write("From: %s" % fromAddress)
self.write("To: %s" % toAddress)
if includeMessageID:
- self.write("Message-ID: %s" % smtp.messageid().encode('utf-8'))
+ self.write("Message-ID: %s" % smtp.messageid())
if inReplyTo:
- self.write("In-Reply-To: %s" % inReplyTo.encode('utf-8'))
- self.write("Content-Type: %s" % contentType.encode('utf-8'))
- self.write("Date: %s" % smtp.rfc822date().encode('utf-8'))
+ self.write("In-Reply-To: %s" % inReplyTo)
+ self.write("Content-Type: %s" % contentType)
+ self.write("Date: %s" % smtp.rfc822date().decode('utf-8'))
if not subject:
subject = '[no subject]'
if not subject.lower().startswith('re'):
subject = "Re: " + subject
- self.write("Subject: %s" % subject.encode('utf-8'))
+ self.write("Subject: %s" % subject)
if kwargs:
for headerName, headerValue in kwargs.items():
@@ -331,7 +339,7 @@ class EmailResponse(object):
headerName = headerName.replace(' ', '-')
headerName = headerName.replace('_', '-')
header = "%s: %s" % (headerName, headerValue)
- self.write(header.encode('utf-8'))
+ self.write(header)
# The first blank line designates that the headers have ended:
self.write(self.delimiter)
diff --git a/bridgedb/distributors/email/server.py b/bridgedb/distributors/email/server.py
index c1ce56f..0f96812 100644
--- a/bridgedb/distributors/email/server.py
+++ b/bridgedb/distributors/email/server.py
@@ -253,7 +253,8 @@ class SMTPMessage(object):
"""
rawMessage = io.StringIO()
for line in self.lines:
- rawMessage.writelines(line.decode('utf8') + '\n')
+ line = line.decode('utf-8') if isinstance(line, bytes) else line
+ rawMessage.writelines(line + '\n')
rawMessage.seek(0)
return rfc822.Message(rawMessage)
diff --git a/bridgedb/test/test_email_autoresponder.py b/bridgedb/test/test_email_autoresponder.py
index f59e5ef..c8e9624 100644
--- a/bridgedb/test/test_email_autoresponder.py
+++ b/bridgedb/test/test_email_autoresponder.py
@@ -235,7 +235,7 @@ a ball of timey-wimey, wibbly-warbly... stuff."""
response = autoresponder.EmailResponse()
response.write(self.body)
response.rewind()
- contents = str(response.read()).replace('\x00', '')
+ contents = response.read().replace(b'\x00', b'').decode('utf-8')
# The newlines in the email body should have been replaced with
# ``EmailResponse.delimiter``.
delimited = self.body.replace('\n', response.delimiter) \
@@ -247,7 +247,7 @@ a ball of timey-wimey, wibbly-warbly... stuff."""
response = autoresponder.EmailResponse()
response.write(self.body)
response.rewind()
- contents = str(response.read(3)).replace('\x00', '')
+ contents = response.read(3).replace(b'\x00', b'').decode('utf-8')
self.assertEqual(contents, self.body[:3])
def test_EmailResponse_write(self):
@@ -370,7 +370,7 @@ class SMTPAutoresponderTests(unittest.TestCase):
"""
self._getIncomingLines()
ours = Address(self.context.fromAddr)
- plus = '@'.join([ours.local + '+zh_cn', ours.domain])
+ plus = '@'.join([ours.local.decode('utf-8') + '+zh_cn', ours.domain.decode('utf-8')])
self.message.lines[1] = 'To: {0}'.format(plus)
self._setUpResponder()
recipient = str(self.responder.getMailFrom())
@@ -383,7 +383,7 @@ class SMTPAutoresponderTests(unittest.TestCase):
"""
self._getIncomingLines()
ours = Address(self.context.fromAddr)
- plus = '@'.join(['get' + ours.local + '+zh_cn', ours.domain])
+ plus = '@'.join(['get' + ours.local.decode('utf-8') + '+zh_cn', ours.domain.decode('utf-8')])
self.message.lines[1] = 'To: {0}'.format(plus)
self._setUpResponder()
recipient = str(self.responder.getMailFrom())
More information about the tor-commits
mailing list