Improve coverage.

This commit is contained in:
Antoine Nguyen
2018-01-13 09:53:42 +01:00
parent e0aa745f7e
commit 3cebf2db1a
4 changed files with 93 additions and 67 deletions
+2 -2
View File
@@ -201,13 +201,13 @@ class AdminParametersForm(param_forms.AdminParametersForm):
if storage_dir:
if not os.path.isdir(storage_dir):
raise forms.ValidationError(
ugettext_lazy("Directory not found")
ugettext_lazy("Directory not found.")
)
code, output = exec_cmd("which openssl")
if code:
raise forms.ValidationError(
ugettext_lazy(
"openssl not found, please make sure it is installed")
"openssl not found, please make sure it is installed.")
)
return storage_dir
@@ -5,6 +5,7 @@ from __future__ import print_function, unicode_literals
import os
from django.core.management.base import BaseCommand
from django.utils.encoding import smart_text
from modoboa.lib import sysutils
from modoboa.parameters import tools as param_tools
@@ -26,16 +27,16 @@ class ManageDKIMKeys(BaseCommand):
"openssl genrsa -out {} {}".format(pkey_path, key_size))
if code:
print("Failed to generate DKIM private key for domain {}: {}"
.format(domain.name, output))
.format(domain.name, smart_text(output)))
domain.dkim_private_key_path = pkey_path
code, output = sysutils.exec_cmd(
"openssl rsa -in {} -pubout".format(pkey_path))
if code:
print("Failed to generate DKIM public key for domain {}: {}"
.format(domain.name, output))
public_key = b""
for cpt, line in enumerate(output.splitlines()):
if cpt == 0 or line.startswith(b"-----"):
.format(domain.name, smart_text(output)))
public_key = ""
for cpt, line in enumerate(smart_text(output).splitlines()):
if cpt == 0 or line.startswith("-----"):
continue
public_key += line
domain.dkim_public_key = public_key
+24
View File
@@ -10,12 +10,15 @@ import tempfile
import dns.resolver
from mock import patch
from testfixtures import compare
from django.core.management import call_command
from django.urls import reverse
from django.utils.html import escape
from modoboa.core import factories as core_factories
from modoboa.core.models import User
from modoboa.core.tests.test_views import SETTINGS_SAMPLE
from modoboa.lib.tests import ModoTestCase
from . import utils
@@ -371,6 +374,21 @@ class DKIMTestCase(ModoTestCase):
def tearDown(self):
shutil.rmtree(self.workdir)
def test_global_settings(self):
"""Check validation rules."""
url = reverse("core:parameters")
settings = SETTINGS_SAMPLE.copy()
settings["admin-dkim_keys_storage_dir"] = "/wrong"
response = self.client.post(url, settings, format="json")
self.assertEqual(response.status_code, 400)
compare(response.json(), {
"form_errors": {"dkim_keys_storage_dir": ["Directory not found."]},
"prefix": "admin"
})
settings["admin-dkim_keys_storage_dir"] = self.workdir
response = self.client.post(url, settings, format="json")
self.assertEqual(response.status_code, 200)
def test_dkim_key_creation(self):
"""Test DKIM key creation."""
values = {
@@ -395,3 +413,9 @@ class DKIMTestCase(ModoTestCase):
call_command("modo", "manage_dkim_keys")
key_path = os.path.join(self.workdir, "{}.pem".format(values["name"]))
self.assertTrue(os.path.exists(key_path))
domain = Domain.objects.get(name=values["name"])
url = reverse("admin:domain_detail", args=[domain.pk])
response = self.client.get(url)
self.assertContains(
response, escape(domain.bind_format_dkim_public_key))
+61 -60
View File
@@ -15,6 +15,63 @@ from .. import factories
from .. import models
from .. import signals
SETTINGS_SAMPLE = {
"core-check_new_versions": "True",
"core-log_maximum_age": "365",
"core-ldap_auth_method": "searchbind",
"limits-deflt_domain_mailbox_aliases_limit": "0",
"core-send_statistics": "True",
"core-default_top_redirection": "user",
"core-sender_address": "noreply@modoboa.org",
"admin-auto_account_removal": "False",
"core-ldap_server_port": "389",
"core-rounds_number": "70000",
"core-ldap_bind_password": "",
"limits-deflt_domain_domain_aliases_limit": "0",
"core-secret_key": ":?j3]QPWo!.'_c4n",
"limits-deflt_domain_domain_admins_limit": "0",
"limits-enable_admin_limits": "True",
"core-ldap_bind_dn": "",
"core-enable_api_communication": "True",
"limits-deflt_user_domain_admins_limit": "0",
"limits-enable_domain_limits": "False",
"csrfmiddlewaretoken": "SGgMVZsA4TPqoiV786TMST6xgOlhAf4F",
"limits-deflt_user_mailboxes_limit": "0",
"core-password_scheme": "sha512crypt",
"core-items_per_page": "30",
"limits-deflt_user_mailbox_aliases_limit": "0",
"limits-deflt_domain_mailboxes_limit": "0",
"core-ldap_is_active_directory": "False",
"core-ldap_group_type": "posixgroup",
"limits-deflt_user_domain_aliases_limit": "0",
"core-top_notifications_check_interval": "30",
"core-ldap_password_attribute": "userPassword",
"admin-auto_create_domain_and_mailbox": "True",
"admin-enable_dnsbl_checks": "True",
"admin-default_domain_quota": "0",
"admin-default_mailbox_quota": "0",
"core-ldap_server_address": "localhost",
"core-authentication_type": "local",
"core-ldap_admin_groups": "",
"core-ldap_groups_search_base": "",
"admin-enable_mx_checks": "True",
"core-ldap_search_base": "",
"admin-valid_mxs": "",
"limits-deflt_user_domains_limit": "0",
"core-ldap_search_filter": "(mail=%(user)s)",
"core-ldap_secured": "none",
"core-ldap_user_dn_template": "",
"core-default_password": "Toto1000",
"limits-deflt_user_quota_limit": "0",
"core-hide_features_widget": "False",
"core-inactive_account_threshold": "30",
"admin-domains_must_have_authorized_mx": False,
"core-random_password_length": "8",
"admin-create_alias_on_mbox_rename": False,
"admin-dkim_keys_storage_dir": "",
"admin-dkim_default_key_length": 1024
}
def announcement(sender, location, **kwargs):
"""Simpler handler."""
@@ -106,63 +163,6 @@ class DashboardTestCase(ModoTestCase):
class SettingsTestCase(ModoTestCase):
"""Settings tests."""
settings_sample = {
"core-check_new_versions": "True",
"core-log_maximum_age": "365",
"core-ldap_auth_method": "searchbind",
"limits-deflt_domain_mailbox_aliases_limit": "0",
"core-send_statistics": "True",
"core-default_top_redirection": "user",
"core-sender_address": "noreply@modoboa.org",
"admin-auto_account_removal": "False",
"core-ldap_server_port": "389",
"core-rounds_number": "70000",
"core-ldap_bind_password": "",
"limits-deflt_domain_domain_aliases_limit": "0",
"core-secret_key": ":?j3]QPWo!.'_c4n",
"limits-deflt_domain_domain_admins_limit": "0",
"limits-enable_admin_limits": "True",
"core-ldap_bind_dn": "",
"core-enable_api_communication": "True",
"limits-deflt_user_domain_admins_limit": "0",
"limits-enable_domain_limits": "False",
"csrfmiddlewaretoken": "SGgMVZsA4TPqoiV786TMST6xgOlhAf4F",
"limits-deflt_user_mailboxes_limit": "0",
"core-password_scheme": "sha512crypt",
"core-items_per_page": "30",
"limits-deflt_user_mailbox_aliases_limit": "0",
"limits-deflt_domain_mailboxes_limit": "0",
"core-ldap_is_active_directory": "False",
"core-ldap_group_type": "posixgroup",
"limits-deflt_user_domain_aliases_limit": "0",
"core-top_notifications_check_interval": "30",
"core-ldap_password_attribute": "userPassword",
"admin-auto_create_domain_and_mailbox": "True",
"admin-enable_dnsbl_checks": "True",
"admin-default_domain_quota": "0",
"admin-default_mailbox_quota": "0",
"core-ldap_server_address": "localhost",
"core-authentication_type": "local",
"core-ldap_admin_groups": "",
"core-ldap_groups_search_base": "",
"admin-enable_mx_checks": "True",
"core-ldap_search_base": "",
"admin-valid_mxs": "",
"limits-deflt_user_domains_limit": "0",
"core-ldap_search_filter": "(mail=%(user)s)",
"core-ldap_secured": "none",
"core-ldap_user_dn_template": "",
"core-default_password": "Toto1000",
"limits-deflt_user_quota_limit": "0",
"core-hide_features_widget": "False",
"core-inactive_account_threshold": "30",
"admin-domains_must_have_authorized_mx": False,
"core-random_password_length": "8",
"admin-create_alias_on_mbox_rename": False,
"admin-dkim_keys_storage_dir": "",
"admin-dkim_default_key_length": 1024
}
def test_get_settings(self):
"""Test settings display."""
url = reverse("core:parameters")
@@ -173,10 +173,11 @@ class SettingsTestCase(ModoTestCase):
def test_save_settings(self):
"""Test settings save."""
url = reverse("core:parameters")
response = self.client.post(url, self.settings_sample, format="json")
settings = SETTINGS_SAMPLE.copy()
response = self.client.post(url, settings, format="json")
self.assertEqual(response.status_code, 200)
self.settings_sample["core-rounds_number"] = ""
response = self.client.post(url, self.settings_sample, format="json")
settings["core-rounds_number"] = ""
response = self.client.post(url, settings, format="json")
self.assertEqual(response.status_code, 400)
compare(response.json(), {
"form_errors": {"rounds_number": ["This field is required."]},