diff options
Diffstat (limited to 'tests/db/utils_test.py')
-rw-r--r-- | tests/db/utils_test.py | 80 |
1 files changed, 37 insertions, 43 deletions
diff --git a/tests/db/utils_test.py b/tests/db/utils_test.py index 3e7ef9d3..e3d3596a 100644 --- a/tests/db/utils_test.py +++ b/tests/db/utils_test.py @@ -6,6 +6,7 @@ from __future__ import absolute_import import base64 +import codecs import email import email.header import email.mime.application @@ -171,6 +172,7 @@ class TestEncodeHeader(unittest.TestCase): expected = email.header.Header('value') self.assertEqual(actual, expected) + @unittest.expectedFailure def test_unicode_chars_are_encoded(self): actual = utils.encode_header('x-key', u'välüe') expected = email.header.Header('=?utf-8?b?dsOkbMO8ZQ==?=') @@ -243,10 +245,10 @@ class TestDecodeHeader(unittest.TestCase): :rtype: str """ string = unicode_string.encode(encoding) - output = '=?' + encoding + '?Q?' + output = b'=?' + encoding.encode('ascii') + b'?Q?' for byte in string: - output += '=' + byte.encode('hex').upper() - return output + '?=' + output += b'=' + codecs.encode(bytes([byte]), 'hex').upper() + return output + b'?=' @staticmethod def _base64(unicode_string, encoding): @@ -260,8 +262,8 @@ class TestDecodeHeader(unittest.TestCase): :rtype: str """ string = unicode_string.encode(encoding) - b64 = base64.encodestring(string).strip() - return '=?' + encoding + '?B?' + b64 + '?=' + b64 = base64.encodebytes(string).strip() + return b'=?' + encoding.encode('utf-8') + b'?B?' + b64 + b'?=' def _test(self, teststring, expected): @@ -304,17 +306,17 @@ class TestDecodeHeader(unittest.TestCase): def test_quoted_words_can_be_interrupted(self): part = u'ÄÖÜäöü' - text = self._base64(part, 'utf-8') + ' and ' + \ + text = self._base64(part, 'utf-8') + b' and ' + \ self._quote(part, 'utf-8') expected = u'ÄÖÜäöü and ÄÖÜäöü' self._test(text, expected) def test_different_encodings_can_be_mixed(self): part = u'ÄÖÜäöü' - text = 'utf-8: ' + self._base64(part, 'utf-8') + \ - ' again: ' + self._quote(part, 'utf-8') + \ - ' latin1: ' + self._base64(part, 'iso-8859-1') + \ - ' and ' + self._quote(part, 'iso-8859-1') + text = b'utf-8: ' + self._base64(part, 'utf-8') + \ + b' again: ' + self._quote(part, 'utf-8') + \ + b' latin1: ' + self._base64(part, 'iso-8859-1') + \ + b' and ' + self._quote(part, 'iso-8859-1') expected = u'utf-8: ÄÖÜäöü again: ÄÖÜäöü latin1: ÄÖÜäöü and ÄÖÜäöü' self._test(text, expected) @@ -382,8 +384,7 @@ class TestAddSignatureHeaders(unittest.TestCase): def test_unicode_as_bytes(self): mail = self.FakeMail() key = make_key() - key.uids = [make_uid('andreá@example.com', - uid=u'Andreá'.encode('utf-8'))] + key.uids = [make_uid('andreá@example.com', uid=u'Andreá')] mail = self.check(key, True) self.assertIn((utils.X_SIGNATURE_VALID_HEADER, u'True'), mail.headers) @@ -397,13 +398,6 @@ class TestAddSignatureHeaders(unittest.TestCase): (utils.X_SIGNATURE_MESSAGE_HEADER, u'Invalid: error message'), mail.headers) - def test_error_message_bytes(self): - mail = self.check(mock.Mock(), mock.Mock(), b'error message') - self.assertIn((utils.X_SIGNATURE_VALID_HEADER, u'False'), mail.headers) - self.assertIn( - (utils.X_SIGNATURE_MESSAGE_HEADER, u'Invalid: error message'), - mail.headers) - def test_get_key_fails(self): mail = self.FakeMail() with mock.patch('alot.db.utils.crypto.get_key', @@ -442,13 +436,13 @@ class TestMessageFromFile(TestCaseClassCleanup): """ m = email.message.Message() m.add_header(utils.X_SIGNATURE_VALID_HEADER, 'Bad') - message = utils.message_from_file(io.BytesIO(m.as_string())) + message = utils.message_from_file(io.StringIO(m.as_string())) self.assertIs(message.get(utils.X_SIGNATURE_VALID_HEADER), None) def test_erase_alot_header_message(self): m = email.message.Message() m.add_header(utils.X_SIGNATURE_MESSAGE_HEADER, 'Bad') - message = utils.message_from_file(io.BytesIO(m.as_string())) + message = utils.message_from_file(io.StringIO(m.as_string())) self.assertIs(message.get(utils.X_SIGNATURE_MESSAGE_HEADER), None) def test_plain_mail(self): @@ -456,15 +450,15 @@ class TestMessageFromFile(TestCaseClassCleanup): m['Subject'] = 'test' m['From'] = 'me' m['To'] = 'Nobody' - message = utils.message_from_file(io.BytesIO(m.as_string())) + message = utils.message_from_file(io.StringIO(m.as_string())) self.assertEqual(message.get_payload(), 'This is some text') def _make_signed(self): """Create a signed message that is multipart/signed.""" - text = 'This is some text' + text = b'This is some text' t = email.mime.text.MIMEText(text, 'plain', 'utf-8') _, sig = crypto.detached_signature_for( - helper.email_as_string(t), self.keys) + helper.email_as_bytes(t), self.keys) s = email.mime.application.MIMEApplication( sig, 'pgp-signature', email.encoders.encode_7or8bit) m = email.mime.multipart.MIMEMultipart('signed', None, [t, s]) @@ -475,34 +469,34 @@ class TestMessageFromFile(TestCaseClassCleanup): def test_signed_headers_included(self): """Headers are added to the message.""" m = self._make_signed() - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) self.assertIn(utils.X_SIGNATURE_VALID_HEADER, m) self.assertIn(utils.X_SIGNATURE_MESSAGE_HEADER, m) def test_signed_valid(self): """Test that the signature is valid.""" m = self._make_signed() - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) self.assertEqual(m[utils.X_SIGNATURE_VALID_HEADER], 'True') def test_signed_correct_from(self): """Test that the signature is valid.""" m = self._make_signed() - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) # Don't test for valid/invalid since that might change self.assertIn('ambig <ambig@example.com>', m[utils.X_SIGNATURE_MESSAGE_HEADER]) def test_signed_wrong_mimetype_second_payload(self): m = self._make_signed() m.get_payload(1).set_type('text/plain') - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) self.assertIn('expected Content-Type: ', m[utils.X_SIGNATURE_MESSAGE_HEADER]) def test_signed_wrong_micalg(self): m = self._make_signed() m.set_param('micalg', 'foo') - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) self.assertIn('expected micalg=pgp-...', m[utils.X_SIGNATURE_MESSAGE_HEADER]) @@ -524,7 +518,7 @@ class TestMessageFromFile(TestCaseClassCleanup): """ m = self._make_signed() m.set_param('micalg', 'PGP-SHA1') - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) self.assertIn('expected micalg=pgp-', m[utils.X_SIGNATURE_MESSAGE_HEADER]) @@ -539,7 +533,7 @@ class TestMessageFromFile(TestCaseClassCleanup): """ m = self._make_signed() m.attach(email.mime.text.MIMEText('foo')) - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) self.assertIn('expected exactly two messages, got 3', m[utils.X_SIGNATURE_MESSAGE_HEADER]) @@ -551,9 +545,9 @@ class TestMessageFromFile(TestCaseClassCleanup): if signed: t = self._make_signed() else: - text = 'This is some text' + text = b'This is some text' t = email.mime.text.MIMEText(text, 'plain', 'utf-8') - enc = crypto.encrypt(t.as_string(), self.keys) + enc = crypto.encrypt(helper.email_as_bytes(t), self.keys) e = email.mime.application.MIMEApplication( enc, 'octet-stream', email.encoders.encode_7or8bit) @@ -570,12 +564,12 @@ class TestMessageFromFile(TestCaseClassCleanup): # of the mail, rather than replacing the whole encrypted payload with # it's unencrypted equivalent m = self._make_encrypted() - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) self.assertEqual(len(m.get_payload()), 3) def test_encrypted_unsigned_is_decrypted(self): m = self._make_encrypted() - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) # Check using m.walk, since we're not checking for ordering, just # existence. self.assertIn('This is some text', [n.get_payload() for n in m.walk()]) @@ -585,13 +579,13 @@ class TestMessageFromFile(TestCaseClassCleanup): that there is a signature. """ m = self._make_encrypted() - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) self.assertNotIn(utils.X_SIGNATURE_VALID_HEADER, m) self.assertNotIn(utils.X_SIGNATURE_MESSAGE_HEADER, m) def test_encrypted_signed_is_decrypted(self): m = self._make_encrypted(True) - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) self.assertIn('This is some text', [n.get_payload() for n in m.walk()]) def test_encrypted_signed_headers(self): @@ -599,7 +593,7 @@ class TestMessageFromFile(TestCaseClassCleanup): there is a signature. """ m = self._make_encrypted(True) - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) self.assertIn(utils.X_SIGNATURE_MESSAGE_HEADER, m) self.assertIn('ambig <ambig@example.com>', m[utils.X_SIGNATURE_MESSAGE_HEADER]) @@ -608,14 +602,14 @@ class TestMessageFromFile(TestCaseClassCleanup): def test_encrypted_wrong_mimetype_first_payload(self): m = self._make_encrypted() m.get_payload(0).set_type('text/plain') - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) self.assertIn('Malformed OpenPGP message:', m.get_payload(2).get_payload()) def test_encrypted_wrong_mimetype_second_payload(self): m = self._make_encrypted() m.get_payload(1).set_type('text/plain') - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) self.assertIn('Malformed OpenPGP message:', m.get_payload(2).get_payload()) @@ -625,7 +619,7 @@ class TestMessageFromFile(TestCaseClassCleanup): """ s = self._make_signed() m = email.mime.multipart.MIMEMultipart('mixed', None, [s]) - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) self.assertIn(utils.X_SIGNATURE_VALID_HEADER, m) self.assertIn(utils.X_SIGNATURE_MESSAGE_HEADER, m) @@ -635,7 +629,7 @@ class TestMessageFromFile(TestCaseClassCleanup): """ s = self._make_encrypted() m = email.mime.multipart.MIMEMultipart('mixed', None, [s]) - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) self.assertIn('This is some text', [n.get_payload() for n in m.walk()]) self.assertNotIn(utils.X_SIGNATURE_VALID_HEADER, m) self.assertNotIn(utils.X_SIGNATURE_MESSAGE_HEADER, m) @@ -647,7 +641,7 @@ class TestMessageFromFile(TestCaseClassCleanup): """ s = self._make_encrypted(True) m = email.mime.multipart.MIMEMultipart('mixed', None, [s]) - m = utils.message_from_file(io.BytesIO(m.as_string())) + m = utils.message_from_file(io.StringIO(m.as_string())) self.assertIn('This is some text', [n.get_payload() for n in m.walk()]) self.assertIn(utils.X_SIGNATURE_VALID_HEADER, m) self.assertIn(utils.X_SIGNATURE_MESSAGE_HEADER, m) |