1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
# SPDX-License-Identifier: AGPL-3.0-or-later
"""
Tests for letsencrypt module.
"""
from unittest.mock import call, patch
import pytest
from plinth.modules.names.components import DomainType
from .. import on_domain_added, on_domain_removed
@pytest.fixture(name='domain_types')
def fixture_domain_types():
"""Create a domain types required for tests."""
DomainType('domain-type-tor', 'Tor Onion Service', 'tor:index',
can_have_certificate=False)
DomainType('domain-type-test', 'Test Domain Type', 'test:index')
@pytest.mark.usefixtures('domain_types')
def test_add_onion_domain():
"""Test that .onion domains are ignored when added/removed."""
assert not on_domain_added('test', 'domain-type-tor', 'ddddd.onion')
assert not on_domain_removed('test', 'domain-type-tor', 'ddddd.onion')
@patch('plinth.modules.letsencrypt.get_status')
@patch('plinth.modules.letsencrypt.certificate_obtain')
@pytest.mark.usefixtures('load_cfg')
@pytest.mark.parametrize('domain,status_input,obtain,result', [
('domain1.tld', {
'certificate_available': True,
'validity': 'not-valid'
}, True, True),
('domain2.tld', {
'certificate_available': False,
'validity': 'valid'
}, True, True),
('domain3.tld', {
'certificate_available': True,
'validity': 'valid'
}, False, False),
('', {
'certificate_available': False,
'validity': 'valid'
}, False, True),
])
def test_add_valid_domain(certificate_obtain, get_status, domain, status_input,
obtain, result):
"""Test adding a domain that can have certificates."""
get_status.return_value = {'domains': {domain: status_input}}
assert result == on_domain_added('test', 'domain-type-test', domain)
if obtain:
certificate_obtain.assert_has_calls([call(domain)])
else:
certificate_obtain.assert_not_called()
@patch('plinth.modules.letsencrypt.certificate_revoke')
@pytest.mark.usefixtures('load_cfg')
@pytest.mark.parametrize('domain,revoke,result', [
('domain1.tld', True, True),
('', False, True),
])
def test_remove_domain(certificate_revoke, domain, revoke, result):
"""Test removing a domain that can certificates."""
assert result == on_domain_removed('test', 'domain-type-test', domain)
if revoke:
certificate_revoke.assert_has_calls(
[call(domain, really_revoke=False)])
else:
certificate_revoke.assert_not_called()
|