First tests!

This commit is contained in:
Ruben van Staveren 2022-03-10 11:22:04 +01:00
parent d7f8fcec88
commit 1494f1a5e0
Signed by: ruben
GPG Key ID: 886F6BECD477A93F
6 changed files with 97 additions and 0 deletions

13
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,13 @@
run tests:
stage: test
image: python:3.8
script:
- pip install pytest pytest-cov
- coverage run -m pytest
- coverage report
- coverage xml
artifacts:
reports:
cobertura: coverage.xml
tags:
- docker

5
setup.cfg Normal file
View File

@ -0,0 +1,5 @@
[tool:pytest]
testpaths = tests
[coverage:run]
branch = True
source = jail2ban

13
setup.py Normal file
View File

@ -0,0 +1,13 @@
from setuptools import find_packages, setup
setup(
name='jail2ban',
version='0.0.1',
packages=find_packages(),
include_package_data=True,
zip_safe=False,
install_requires=[
'flask',
'flask_httpauth',
],
)

28
tests/conftest.py Normal file
View File

@ -0,0 +1,28 @@
import pytest
from jail2ban import create_app
@pytest.fixture()
def app():
app = create_app()
app.config.update({
"TESTING": True,
"SECRET_KEY": 'Testing',
"AUTHFILE": 'tests/users-test.txt'
})
# other setup can go here
yield app
# clean up / reset resources here
@pytest.fixture()
def client(app):
return app.test_client()
@pytest.fixture()
def runner(app):
return app.test_cli_runner()

37
tests/test_register.py Normal file
View File

@ -0,0 +1,37 @@
import base64
from types import SimpleNamespace
pfctl_stdout_lines = b'''
block drop quick proto tcp from <f2b-sendmail-auth> to any port = submission
block drop quick proto tcp from <f2b-sendmail-auth> to any port = smtps
block drop quick proto tcp from <f2b-sendmail-auth> to any port = smtp
block drop quick proto tcp from <f2b-sshd> to any port = ssh
block drop quick proto tcp from <f2b-recidive> to any
'''
def test_request_unauth(client):
json_payload = {"port": "any port {pop3,pop3s,imap,imaps,submission,465,sieve}", "name": "dovecot", "protocol": "tcp"}
response = client.put("/register", json=json_payload)
assert response.json['error'] == 'Access Denied'
def test_request_example(client, mocker):
def noop():
pass
run_res = SimpleNamespace()
run_res.stdout = pfctl_stdout_lines
run_res.check_returncode = noop
mocker.patch('jail2ban.pfctl.run', return_value=run_res)
valid_credentials = base64.b64encode(b"test.example.com:testpassword").decode("utf-8")
json_payload = {"port": "any port {pop3,pop3s,imap,imaps,submission,465,sieve}", "name": "dovecot", "protocol": "tcp"}
response = client.put("/register",
json=json_payload,
headers={"Authorization": "Basic " + valid_credentials})
assert response.json['remote_user'] == 'test.example.com'

1
tests/users-test.txt Normal file
View File

@ -0,0 +1 @@
test.example.com:pbkdf2:sha256:260000$FttDzpIIvalJKmxV$a4d19e0b11fce6996f69cc5b03495533da8f9bd1275268827bddc53e9a78c881