add CLI test

Signed-off-by: Florian Brandes <florian.brandes@posteo.de>
This commit is contained in:
2024-07-09 18:57:58 +02:00
parent 81fa631d16
commit d9053e36bc
3 changed files with 44 additions and 6 deletions

View File

@@ -46,6 +46,7 @@
isort.settings.flags = "--profile black";
pylint.enable = false; # doesn't work correctly with module imports in flake
detect-private-keys.enable = true;
detect-private-keys.excludes = [ "tests/" ];
};
};
app = self.packages.${system}.smtprd-ng;

View File

@@ -400,11 +400,16 @@ class SMTPServer(Controller):
return True
def main() -> int:
"""Main routine
def parse_args(args=None) -> argparse.ArgumentParser.parse_args:
"""Parse arguments
Returns:
int: exit code
Parameters
----------
args : List of strings
Returns
-------
argparse.ArgumentParser.parse_args : Namespace of arguments
"""
parser = argparse.ArgumentParser(
description=__doc__.strip(),
@@ -417,9 +422,21 @@ def main() -> int:
default="./config.ini",
help="configuration file",
)
args = parser.parse_args()
setlocale(LC_ALL, "C") # for strftime
return parser.parse_args(args)
def main(args=None) -> int:
"""Main routine
Returns:
int: exit code
"""
args = parse_args(args)
setlocale(LC_ALL, "C") # for strftime
if len(args.config) == 0:
raise OSError("No config file supplied")
if not Path(args.config).is_file():
raise OSError("Config file not found: " + str(args.config))
try:
config: Config = Config.from_ini(args.config)
except RuntimeError as e:

View File

@@ -19,12 +19,14 @@
Tests for smtprd_ng
"""
# pylint: disable=protected-access
# pylint: disable=unused-argument
import configparser
import email
import email.message
from pathlib import Path
import pytest
from M2Crypto import BIO, SMIME, X509
from smtprd_ng import smtprd
@@ -134,3 +136,21 @@ def test_client_sign():
p7, data = SMIME.smime_load_pkcs7_bio(buf)
v = s.verify(p7, data)
assert "Test to sign" in v.decode()
def test_cli_no_config_file(capsys):
"""Test whether config file parameter is supplied"""
test_args = ["--config", ""]
with pytest.raises(Exception) as e_info:
smtprd.main(test_args)
assert e_info.typename == "OSError"
assert str(e_info.value) == "No config file supplied"
def test_cli_config_file_not_found(capsys):
"""Test whether config file is found"""
test_args = ["--config", "doesnotexist.conf"]
with pytest.raises(Exception) as e_info:
smtprd.main(test_args)
assert e_info.typename == "OSError"
assert str(e_info.value) == "Config file not found: doesnotexist.conf"