better auth tests, refactoring

This commit is contained in:
Devaev Maxim 2019-04-11 04:18:02 +03:00
parent c59f8bdaf1
commit 060140d654
13 changed files with 100 additions and 29 deletions

20
tests/apps/__init__.py Normal file
View File

@ -0,0 +1,20 @@
# ========================================================================== #
# #
# KVMD - The main Pi-KVM daemon. #
# #
# Copyright (C) 2018 Maxim Devaev <mdevaev@gmail.com> #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
# #
# ========================================================================== #

43
tests/auth/__init__.py Normal file
View File

@ -0,0 +1,43 @@
# ========================================================================== #
# #
# KVMD - The main Pi-KVM daemon. #
# #
# Copyright (C) 2018 Maxim Devaev <mdevaev@gmail.com> #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
# #
# ========================================================================== #
import contextlib
from typing import AsyncGenerator
from typing import Any
from kvmd.yamlconf import make_config
from kvmd.plugins.auth import BaseAuthService
from kvmd.plugins.auth import get_auth_service_class
# =====
@contextlib.asynccontextmanager
async def get_configured_auth_service(name: str, **kwargs: Any) -> AsyncGenerator[BaseAuthService, None]:
service_class = get_auth_service_class(name)
config = make_config(kwargs, service_class.get_options())
service = service_class(**config._unpack()) # pylint: disable=protected-access
try:
yield service
finally:
await service.cleanup()

View File

@ -26,7 +26,7 @@ import passlib.apache
import pytest
from kvmd.plugins.auth import get_auth_service_class
from . import get_configured_auth_service
# =====
@ -38,18 +38,15 @@ async def test_ok__htpasswd_service(tmpdir) -> None: # type: ignore
htpasswd.set_password("admin", "foo")
htpasswd.save()
service = get_auth_service_class("htpasswd")(path=path)
async with get_configured_auth_service("htpasswd", file=path) as service:
assert (await service.login("admin", "foo"))
assert not (await service.login("user", "foo"))
assert (await service.login("admin", "foo"))
assert not (await service.login("user", "foo"))
htpasswd.set_password("admin", "bar")
htpasswd.set_password("user", "bar")
htpasswd.save()
htpasswd.set_password("admin", "bar")
htpasswd.set_password("user", "bar")
htpasswd.save()
assert (await service.login("admin", "bar"))
assert (await service.login("user", "bar"))
assert not (await service.login("admin", "foo"))
assert not (await service.login("user", "foo"))
await service.cleanup()
assert (await service.login("admin", "bar"))
assert (await service.login("user", "bar"))
assert not (await service.login("admin", "foo"))
assert not (await service.login("user", "foo"))

View File

@ -26,7 +26,7 @@ import aiohttp.web
import pytest
from kvmd.plugins.auth import get_auth_service_class
from . import get_configured_auth_service
# =====
@ -53,17 +53,8 @@ async def _auth_server_port_fixture(aiohttp_server) -> AsyncGenerator[int, None]
# =====
@pytest.mark.asyncio
async def test_ok__http_service(auth_server_port: int) -> None:
service = get_auth_service_class("http")(
url="http://localhost:%d/auth_post" % (auth_server_port),
verify=False,
post=True,
user="",
passwd="",
timeout=5.0,
)
assert not (await service.login("admin", "foo"))
assert not (await service.login("user", "foo"))
assert (await service.login("admin", "foobar"))
await service.cleanup()
url = "http://localhost:%d/auth_post" % (auth_server_port)
async with get_configured_auth_service("http", url=url) as service:
assert not (await service.login("admin", "foo"))
assert not (await service.login("user", "foo"))
assert (await service.login("admin", "foobar"))

View File

@ -0,0 +1,20 @@
# ========================================================================== #
# #
# KVMD - The main Pi-KVM daemon. #
# #
# Copyright (C) 2018 Maxim Devaev <mdevaev@gmail.com> #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
# #
# ========================================================================== #