Loading .gitlab-ci.yml +16 −2 Changes for .gitlab-ci.yml: 16 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -13,8 +13,9 @@ style: script: - wget https://sre18.pages.rechenknecht.net/misc/pylintrc -O .pylintrc - pip3 install -r requirements.txt - pip3 install -r requirements-dev.txt - pip3 install pylint - pylint run.py tests util - pylint run.py tests util tools groupA: stage: test Loading Loading @@ -81,8 +82,21 @@ groupE: - results/group-e expire_in: 1 week postfix: stage: test services: - docker:dind script: - docker pull tozd/postfix - mkdir -p results - python3 run.py testing.marschke.me 9001 tozd/postfix 25 --wait-up 5 2>&1 | tee results/postfix artifacts: paths: - results/postfix expire_in: 1 week results: stage: aggregation script: - pip3 install tabulate - pip3 install -r requirements-dev.txt - python3 tools/result_aggregation.py requirements-dev.txt 0 → 100644 +1 −0 Changes for requirements-dev.txt: 1 added line, 0 removed lines. Original line number Diff line number Diff line tabulate tests/TestFuzzing.py +2 −4 Changes for tests/TestFuzzing.py: 2 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -26,15 +26,13 @@ class TestFuzzing(BaseTest): while True: try: self.client.recv(1) if self.client.recv(1) == b'': return except socket.timeout: break self.assertResponse([x for x in range(500, 510)], 'FAIL\r\n') def test_unrecognized_command(self): self.assertResponse(500, 'FAIL\r\n') def test_small_input(self): fuzzy_input = 'A' * 10**1 self.assertResponse([x for x in range(500, 510)], '{}\r\n'.format(fuzzy_input)) Loading tests/TestMail.py +9 −10 Changes for tests/TestMail.py: 9 added lines, 10 removed lines. Original line number Diff line number Diff line import subprocess from util import BaseTest Loading Loading @@ -88,19 +87,19 @@ class TestMail(BaseTest): def test_mail_save(self): self.assertResponse(250, b'HELO localDomain\r\n') self.assertResponse(250, b'MAIL FROM:<user0@test.de>\r\n') self.assertResponse(250, b'RCPT TO:<user1@localhost>\r\n') self.assertResponse(250, b'RCPT TO:<user2@localhost>\r\n') self.assertResponse(250, b'RCPT TO:<user1@server.marschke.me>\r\n') self.assertResponse(250, b'RCPT TO:<user2@server.marschke.me>\r\n') self.assertResponse(354, b'DATA\r\n') self.client.send(b'SOME_RANDOM_TEXT\r\n') self.client.send(b'SOME_RANDOM_TEXT\r\n') self.assertResponse(250, b'.\r\n') subprocess.check_output(['docker', 'exec', '{}'.format(self.test_server.docker_id.decode('utf-8')), 'grep', '-r', 'SOME_RANDOM_TEXT']) #subprocess.check_output(['docker', # 'exec', # '{}'.format(self.test_server.docker_id.decode('utf-8')), # 'grep', # '-r', # 'SOME_RANDOM_TEXT']) self.assertResponse(221, 'QUIT\r\n') Loading @@ -109,7 +108,7 @@ class TestMail(BaseTest): self.assertResponse(250, 'MAIL FROM:<leonard@marschke.me>\r\n') self.assertResponse(250, 'RCPT TO:<firstAddress@{}>\r\n'.format(self.test_server.domain)) for i in range(10**3): for i in range(800): self.assertResponse(250, 'RCPT TO:<address{}@{}>\r\n'.format(i, self.test_server.domain)) self.assertResponse(354, 'DATA\r\n' + \ Loading tests/TestSession.py +12 −11 Changes for tests/TestSession.py: 12 added lines, 11 removed lines. Original line number Diff line number Diff line Loading @@ -8,18 +8,18 @@ class TestSession(BaseTest): def test_ehlo(self): self.assertResponse(250, 'EHLO marschke.me\r\n') self.assertResponse(500, 'FAIL\r\n') self.assertResponse([500, 502], 'FAIL\r\n') def test_invalid_parameter_stability_0(self): self.assertResponse(250, b'HELO localhost\r\n') self.assertResponse(500, b'MAIL wrong input blabla\r\n') self.assertResponse(501, b'MAIL wrong input blabla\r\n') self.assertResponse(250, b'MAIL FROM:<correct.mail@test.de>\r\n') def test_invalid_parameter_stability_1(self): self.assertResponse(250, b'HELO localhost\r\n') self.assertResponse(250, b'MAIL FROM:<correct.mail@test.de>\r\n') self.assertResponse(500, b'RCPT wrong input blabla\r\n') self.assertResponse(250, b'RCPT TO:<correct@localhost>\r\n') self.assertResponse(501, b'RCPT wrong input blabla\r\n') self.assertResponse(250, b'RCPT TO:<correct@server.marschke.me>\r\n') def test_help(self): self.assertResponse(250, b'HELP\r\n') Loading @@ -40,7 +40,7 @@ class TestSession(BaseTest): self.assertResponse(501, b'EHLO\r\n') def test_mail_no_ehlo(self): self.assertResponse(503, b'MAIL FROM:<correct.mail@test.de>\r\n') self.assertResponse([x for x in range(500, 510)], b'MAIL FROM:<correct.mail@test.de>\r\n') def test_mail_double_send(self): self.assertResponse(250, b'HELO localDomain\r\n') Loading @@ -50,7 +50,7 @@ class TestSession(BaseTest): def test_invalid_state_transition_03(self): self.assertResponse(250, b'HELO localhost\r\n') self.assertResponse(250, b'MAIL FROM:<leonard@marschke.me>\r\n') self.assertResponse(503, b'DATA\r\n') self.assertResponse([503, 554], b'DATA\r\n') self.assertResponse(250, b'RSET\r\n') def test_invalid_state_transition_04(self): Loading @@ -59,15 +59,16 @@ class TestSession(BaseTest): def test_reset_operation(self): self.assertResponse(250, b'HELO localhost\r\n') self.assertResponse(250, b'MAIL FROM:<leonard@marschke.me>\r\n') self.assertResponse(250, b'RCPT TO:<firstAddress@localhost>\r\n') self.assertResponse(250, b'RCPT TO:<firstAddress@server.marschke.me>\r\n') self.assertResponse(250, b'RSET\r\n') self.assertResponse(503, b'DATA\r\n') def test_reset_operation_parameter(self): self.assertResponse(250, b'HELO localhost\r\n') self.assertResponse(250, b'MAIL FROM:<leonard@marschke.me>\r\n') self.assertResponse(250, b'RCPT TO:<firstAddress@localhost>\r\n') self.assertResponse(250, b'RSET MAIL FROM:<leonard@marschke.me>\r\n') self.assertResponse(250, b'RCPT TO:<firstAddress@server.marschke.me>\r\n') self.assertResponse(501, b'RSET MAIL FROM:<leonard@marschke.me>\r\n') self.assertResponse(250, b'RSET\r\n') self.assertResponse(503, b'DATA\r\n') def test_noop_operation(self): Loading @@ -81,7 +82,7 @@ class TestSession(BaseTest): self.assertResponse(252, b'VRFY leonard@marschke.me\r\n') def test_multiple_token_wrong(self): self.assertResponse(500, b'VERFY BLA BLUB') self.assertResponse([500, 502], b'VERFY BLA BLUB\r\n') def test_token_wrong(self): self.assertResponse(500, b'VRFZ\r\n') Loading @@ -99,7 +100,7 @@ class TestSession(BaseTest): self.assertResponse(250, b'HELO marschke.me\r\n') def test_invalid_state_transition_01(self): self.assertResponse(503, b'RCPT TO:<firstAddress@localhost>\r\n') self.assertResponse(503, b'RCPT TO:<firstAddress@server.marschke.me>\r\n') def test_invalid_state_transition_02(self): self.assertResponse(503, b'DATA\r\n') Loading
.gitlab-ci.yml +16 −2 Changes for .gitlab-ci.yml: 16 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -13,8 +13,9 @@ style: script: - wget https://sre18.pages.rechenknecht.net/misc/pylintrc -O .pylintrc - pip3 install -r requirements.txt - pip3 install -r requirements-dev.txt - pip3 install pylint - pylint run.py tests util - pylint run.py tests util tools groupA: stage: test Loading Loading @@ -81,8 +82,21 @@ groupE: - results/group-e expire_in: 1 week postfix: stage: test services: - docker:dind script: - docker pull tozd/postfix - mkdir -p results - python3 run.py testing.marschke.me 9001 tozd/postfix 25 --wait-up 5 2>&1 | tee results/postfix artifacts: paths: - results/postfix expire_in: 1 week results: stage: aggregation script: - pip3 install tabulate - pip3 install -r requirements-dev.txt - python3 tools/result_aggregation.py
requirements-dev.txt 0 → 100644 +1 −0 Changes for requirements-dev.txt: 1 added line, 0 removed lines. Original line number Diff line number Diff line tabulate
tests/TestFuzzing.py +2 −4 Changes for tests/TestFuzzing.py: 2 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -26,15 +26,13 @@ class TestFuzzing(BaseTest): while True: try: self.client.recv(1) if self.client.recv(1) == b'': return except socket.timeout: break self.assertResponse([x for x in range(500, 510)], 'FAIL\r\n') def test_unrecognized_command(self): self.assertResponse(500, 'FAIL\r\n') def test_small_input(self): fuzzy_input = 'A' * 10**1 self.assertResponse([x for x in range(500, 510)], '{}\r\n'.format(fuzzy_input)) Loading
tests/TestMail.py +9 −10 Changes for tests/TestMail.py: 9 added lines, 10 removed lines. Original line number Diff line number Diff line import subprocess from util import BaseTest Loading Loading @@ -88,19 +87,19 @@ class TestMail(BaseTest): def test_mail_save(self): self.assertResponse(250, b'HELO localDomain\r\n') self.assertResponse(250, b'MAIL FROM:<user0@test.de>\r\n') self.assertResponse(250, b'RCPT TO:<user1@localhost>\r\n') self.assertResponse(250, b'RCPT TO:<user2@localhost>\r\n') self.assertResponse(250, b'RCPT TO:<user1@server.marschke.me>\r\n') self.assertResponse(250, b'RCPT TO:<user2@server.marschke.me>\r\n') self.assertResponse(354, b'DATA\r\n') self.client.send(b'SOME_RANDOM_TEXT\r\n') self.client.send(b'SOME_RANDOM_TEXT\r\n') self.assertResponse(250, b'.\r\n') subprocess.check_output(['docker', 'exec', '{}'.format(self.test_server.docker_id.decode('utf-8')), 'grep', '-r', 'SOME_RANDOM_TEXT']) #subprocess.check_output(['docker', # 'exec', # '{}'.format(self.test_server.docker_id.decode('utf-8')), # 'grep', # '-r', # 'SOME_RANDOM_TEXT']) self.assertResponse(221, 'QUIT\r\n') Loading @@ -109,7 +108,7 @@ class TestMail(BaseTest): self.assertResponse(250, 'MAIL FROM:<leonard@marschke.me>\r\n') self.assertResponse(250, 'RCPT TO:<firstAddress@{}>\r\n'.format(self.test_server.domain)) for i in range(10**3): for i in range(800): self.assertResponse(250, 'RCPT TO:<address{}@{}>\r\n'.format(i, self.test_server.domain)) self.assertResponse(354, 'DATA\r\n' + \ Loading
tests/TestSession.py +12 −11 Changes for tests/TestSession.py: 12 added lines, 11 removed lines. Original line number Diff line number Diff line Loading @@ -8,18 +8,18 @@ class TestSession(BaseTest): def test_ehlo(self): self.assertResponse(250, 'EHLO marschke.me\r\n') self.assertResponse(500, 'FAIL\r\n') self.assertResponse([500, 502], 'FAIL\r\n') def test_invalid_parameter_stability_0(self): self.assertResponse(250, b'HELO localhost\r\n') self.assertResponse(500, b'MAIL wrong input blabla\r\n') self.assertResponse(501, b'MAIL wrong input blabla\r\n') self.assertResponse(250, b'MAIL FROM:<correct.mail@test.de>\r\n') def test_invalid_parameter_stability_1(self): self.assertResponse(250, b'HELO localhost\r\n') self.assertResponse(250, b'MAIL FROM:<correct.mail@test.de>\r\n') self.assertResponse(500, b'RCPT wrong input blabla\r\n') self.assertResponse(250, b'RCPT TO:<correct@localhost>\r\n') self.assertResponse(501, b'RCPT wrong input blabla\r\n') self.assertResponse(250, b'RCPT TO:<correct@server.marschke.me>\r\n') def test_help(self): self.assertResponse(250, b'HELP\r\n') Loading @@ -40,7 +40,7 @@ class TestSession(BaseTest): self.assertResponse(501, b'EHLO\r\n') def test_mail_no_ehlo(self): self.assertResponse(503, b'MAIL FROM:<correct.mail@test.de>\r\n') self.assertResponse([x for x in range(500, 510)], b'MAIL FROM:<correct.mail@test.de>\r\n') def test_mail_double_send(self): self.assertResponse(250, b'HELO localDomain\r\n') Loading @@ -50,7 +50,7 @@ class TestSession(BaseTest): def test_invalid_state_transition_03(self): self.assertResponse(250, b'HELO localhost\r\n') self.assertResponse(250, b'MAIL FROM:<leonard@marschke.me>\r\n') self.assertResponse(503, b'DATA\r\n') self.assertResponse([503, 554], b'DATA\r\n') self.assertResponse(250, b'RSET\r\n') def test_invalid_state_transition_04(self): Loading @@ -59,15 +59,16 @@ class TestSession(BaseTest): def test_reset_operation(self): self.assertResponse(250, b'HELO localhost\r\n') self.assertResponse(250, b'MAIL FROM:<leonard@marschke.me>\r\n') self.assertResponse(250, b'RCPT TO:<firstAddress@localhost>\r\n') self.assertResponse(250, b'RCPT TO:<firstAddress@server.marschke.me>\r\n') self.assertResponse(250, b'RSET\r\n') self.assertResponse(503, b'DATA\r\n') def test_reset_operation_parameter(self): self.assertResponse(250, b'HELO localhost\r\n') self.assertResponse(250, b'MAIL FROM:<leonard@marschke.me>\r\n') self.assertResponse(250, b'RCPT TO:<firstAddress@localhost>\r\n') self.assertResponse(250, b'RSET MAIL FROM:<leonard@marschke.me>\r\n') self.assertResponse(250, b'RCPT TO:<firstAddress@server.marschke.me>\r\n') self.assertResponse(501, b'RSET MAIL FROM:<leonard@marschke.me>\r\n') self.assertResponse(250, b'RSET\r\n') self.assertResponse(503, b'DATA\r\n') def test_noop_operation(self): Loading @@ -81,7 +82,7 @@ class TestSession(BaseTest): self.assertResponse(252, b'VRFY leonard@marschke.me\r\n') def test_multiple_token_wrong(self): self.assertResponse(500, b'VERFY BLA BLUB') self.assertResponse([500, 502], b'VERFY BLA BLUB\r\n') def test_token_wrong(self): self.assertResponse(500, b'VRFZ\r\n') Loading @@ -99,7 +100,7 @@ class TestSession(BaseTest): self.assertResponse(250, b'HELO marschke.me\r\n') def test_invalid_state_transition_01(self): self.assertResponse(503, b'RCPT TO:<firstAddress@localhost>\r\n') self.assertResponse(503, b'RCPT TO:<firstAddress@server.marschke.me>\r\n') def test_invalid_state_transition_02(self): self.assertResponse(503, b'DATA\r\n')