diff --git a/mdb/tests.py b/mdb/tests.py deleted file mode 100644 index b45e51a..0000000 --- a/mdb/tests.py +++ /dev/null @@ -1,80 +0,0 @@ -import io - -from django.conf import settings -from django.contrib.auth.models import User -from django.core.management import call_command -from django.test import TestCase -from django.urls import reverse -from rest_framework.authtoken.models import Token -from rest_framework.test import APITestCase - -from mdb.models import Host, OperatingSystem -from mdb.pxe import render_pxelinux_cfg - - -class MyAPITestCases(APITestCase): - fixtures = ['test_data'] - - def create_user_with_token(self): - self.user = User.objects.create(username='admin') - self.token = Token.objects.create(user=self.user) - self.host = Host.objects.first() - - def setUp(self): - self.create_user_with_token() - return super(MyAPITestCases, self).setUp() - - def test_validate_puppet_host_by_secret(self): - data = { - 'pxe_key': self.host.pxe_key, - 'certname': '{}.{}'.format(self.host.hostname, self.host.interface_set.first().domain.domain_name) - } - self.client.credentials(HTTP_AUTHORIZATION='Token {}'.format(self.token.key)) - res = self.client.post(reverse('api-validate-host-secret'), data, format='json') - self.assertEqual(res.status_code, 200, res.content) - self.assertFalse(Host.objects.get(pk=self.host.pk).pxe_installable) - - -class UnitTests(TestCase): - fixtures = ['test_data'] - - def test_render_pxeconfig(self): - host = Host.objects.first() - interface = host.interface_set.exclude(ip4address__isnull=True).first() - config = render_pxelinux_cfg(interface, host) - - self.assertIn(settings.MDB_PXE_INITRD, config) - self.assertIn(settings.MDB_PXE_KERNEL, config) - self.assertIn(settings.MDB_PXE_PRESEED_URL, config) - - def test_render_pxeconfig_with_os_pxe_config(self): - _os = OperatingSystem.objects.get(pk=2) # OS with all pxe vars set - Host.objects.filter(pk=Host.objects.first().pk).update(operating_system=_os) - host = Host.objects.first() - - interface = host.interface_set.exclude(ip4address__isnull=True).first() - config = render_pxelinux_cfg(interface, host) - - self.assertIn(_os.pxe_initrd, config) - self.assertIn(_os.pxe_kernel, config) - self.assertIn(_os.pxe_preseed_config_url, config) - - def test_host_as_pxe_files(self): - host = Host.objects.first() - self.assertEqual(len(host.as_pxe_files()), 1) - - -class RunManagementCommands(TestCase): - fixtures = ['test_data'] - - def test_zone_sync(self): - # expected_zone_file = '' - with io.BytesIO() as f: - call_command('zone-sync', debug=True, stdout=f) - # TODO check expected_zone_file - - def test_dhcp_sync(self): - # expected_dhcp_file = '' - with io.BytesIO() as f: - call_command('dhcp-sync', stdout=f) - # TODO check expected_dhcp_file diff --git a/tests/test_api.py b/tests/test_api.py new file mode 100644 index 0000000..3455241 --- /dev/null +++ b/tests/test_api.py @@ -0,0 +1,43 @@ +import pytest +from django.contrib.auth.models import User +from django.core.management import call_command +from django.urls import reverse +from rest_framework.authtoken.models import Token +from rest_framework.test import APIClient + +from mdb.models import Host + + +@pytest.fixture +def db_with_fixtures(db): + call_command("loaddata", "test_data", verbosity=0) + + +@pytest.fixture +def api_client(): + return APIClient() + + +@pytest.fixture +def user_with_token(db_with_fixtures): + user = User.objects.create(username='admin') + token = Token.objects.create(user=user) + return user, token + + +@pytest.fixture +def host(db_with_fixtures): + return Host.objects.first() + + +@pytest.mark.django_db +def test_validate_puppet_host_by_secret(api_client, user_with_token, host): + _, token = user_with_token + data = { + 'pxe_key': host.pxe_key, + 'certname': '{}.{}'.format(host.hostname, host.interface_set.first().domain.domain_name), + } + api_client.credentials(HTTP_AUTHORIZATION='Token {}'.format(token.key)) + res = api_client.post(reverse('api-validate-host-secret'), data, format='json') + assert res.status_code == 200, res.content + assert not Host.objects.get(pk=host.pk).pxe_installable diff --git a/tests/test_pxe.py b/tests/test_pxe.py new file mode 100644 index 0000000..07ed268 --- /dev/null +++ b/tests/test_pxe.py @@ -0,0 +1,45 @@ +import pytest +from django.conf import settings +from django.core.management import call_command + +from mdb.models import Host, OperatingSystem +from mdb.pxe import render_pxelinux_cfg + + +@pytest.fixture +def db_with_fixtures(db): + call_command("loaddata", "test_data", verbosity=0) + + +@pytest.fixture +def host(db_with_fixtures): + return Host.objects.first() + + +@pytest.mark.django_db +def test_render_pxeconfig(host): + interface = host.interface_set.exclude(ip4address__isnull=True).first() + config = render_pxelinux_cfg(interface, host) + + assert settings.MDB_PXE_INITRD in config + assert settings.MDB_PXE_KERNEL in config + assert settings.MDB_PXE_PRESEED_URL in config + + +@pytest.mark.django_db +def test_render_pxeconfig_with_os_pxe_config(host): + _os = OperatingSystem.objects.get(pk=2) # OS with all pxe vars set + Host.objects.filter(pk=host.pk).update(operating_system=_os) + host = Host.objects.first() + + interface = host.interface_set.exclude(ip4address__isnull=True).first() + config = render_pxelinux_cfg(interface, host) + + assert _os.pxe_initrd in config + assert _os.pxe_kernel in config + assert _os.pxe_preseed_config_url in config + + +@pytest.mark.django_db +def test_host_as_pxe_files(host): + assert len(host.as_pxe_files()) == 1