Fix relaxed body canoncalization & introduce further unit tests for both simple and relaxed mode

This commit is contained in:
Matthew Palmer
2017-10-25 13:06:00 +01:00
parent 939c3f8bba
commit 6de4fa79cd
2 changed files with 49 additions and 2 deletions
+9 -2
View File
@@ -48,6 +48,13 @@ def unfold_header_value(content):
return re.sub(b"\r\n", b"", content) return re.sub(b"\r\n", b"", content)
def correct_empty_body(content):
if content == b"\r\n":
return ""
else:
return content
class Simple: class Simple:
"""Class that represents the "simple" canonicalization algorithm.""" """Class that represents the "simple" canonicalization algorithm."""
@@ -85,8 +92,8 @@ class Relaxed:
# Remove all trailing WSP at end of lines. # Remove all trailing WSP at end of lines.
# Compress non-line-ending WSP to single space. # Compress non-line-ending WSP to single space.
# Ignore all empty lines at the end of the message body. # Ignore all empty lines at the end of the message body.
return strip_trailing_lines( return correct_empty_body(strip_trailing_lines(
compress_whitespace(strip_trailing_whitespace(body))) compress_whitespace(strip_trailing_whitespace(body))))
class CanonicalizationPolicy: class CanonicalizationPolicy:
+40
View File
@@ -53,6 +53,26 @@ class TestSimpleAlgorithmBody(BaseCanonicalizationTest):
b'Foo \tbar \r\n', b'Foo \tbar \r\n',
b'Foo \tbar \r\n\r\n') b'Foo \tbar \r\n\r\n')
def test_adds_crlf(self):
self.assertCanonicalForm(
b'Foo bar\r\n',
b'Foo bar')
def test_empty_body(self):
self.assertCanonicalForm(
b'\r\n',
b'')
def test_single_crlf_body(self):
self.assertCanonicalForm(
b'\r\n',
b'\r\n')
def test_multiple_crlf_body(self):
self.assertCanonicalForm(
b'\r\n',
b'\r\n\r\n')
class TestRelaxedAlgorithmHeaders(BaseCanonicalizationTest): class TestRelaxedAlgorithmHeaders(BaseCanonicalizationTest):
@@ -98,6 +118,26 @@ class TestRelaxedAlgorithmBody(BaseCanonicalizationTest):
b'Foo\r\nbar\r\n', b'Foo\r\nbar\r\n',
b'Foo\r\nbar\r\n\r\n\r\n') b'Foo\r\nbar\r\n\r\n\r\n')
def test_adds_crlf(self):
self.assertCanonicalForm(
b'Foo bar\r\n',
b'Foo bar')
def test_empty_body(self):
self.assertCanonicalForm(
b'',
b'')
def test_single_crlf_body(self):
self.assertCanonicalForm(
b'',
b'\r\n')
def test_multiple_crlf_body(self):
self.assertCanonicalForm(
b'',
b'\r\n\r\n')
class TestCanonicalizationPolicyFromCValue(unittest.TestCase): class TestCanonicalizationPolicyFromCValue(unittest.TestCase):