File: test_bind.py

package info (click to toggle)
freedombox 26.2
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 82,976 kB
  • sloc: python: 48,504; javascript: 1,736; xml: 481; makefile: 290; sh: 167; php: 32
file content (88 lines) | stat: -rw-r--r-- 2,551 bytes parent folder | download | duplicates (6)
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
76
77
78
79
80
81
82
83
84
85
86
87
88
# SPDX-License-Identifier: AGPL-3.0-or-later
"""
Test actions for configuring bind
"""
from pathlib import Path

import pytest

from plinth.modules import bind


@pytest.fixture(name='configuration_file')
def fixture_configuration_file(tmp_path):
    """Setup the a bind configuration file temporary directory."""
    conf_file = tmp_path / 'named.conf.options'
    conf_file.write_text(bind.privileged.DEFAULT_CONFIG)
    old_config_file = bind.privileged.CONFIG_FILE
    bind.privileged.CONFIG_FILE = str(conf_file)
    yield
    bind.privileged.CONFIG_FILE = old_config_file


@pytest.fixture
def bind_zones_folder(tmp_path):
    """Setup the a bind configuration file temporary directory."""
    test_zone_file = """
;
; BIND data file for local loopback interface
;
$TTL	604800
@	IN	SOA	{name} root.localhost. (
			      2		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@	IN	NS	{name}
@	IN	A	{a_record}
@	IN	AAAA	{aaaa_record}
    """ # noqa

    old_zones_dir = bind.privileged.ZONES_DIR
    bind.privileged.ZONES_DIR = tmp_path
    zones_dir_path = Path(bind.privileged.ZONES_DIR)
    zones_dir_path.mkdir(exist_ok=True, parents=True)

    local_path = zones_dir_path / "local.zone"
    local_path.write_text(
        test_zone_file.format(name='localhost.', a_record="127.0.0.1",
                              aaaa_record="::1"))

    custom_zone_path = zones_dir_path / "custom.zone"
    custom_zone_path.write_text(
        test_zone_file.format(name='custom.domain.', a_record="10.10.10.1",
                              aaaa_record="fe80::c6e9:84ff:fe16:95da"))

    yield

    local_path.unlink()
    custom_zone_path.unlink()
    bind.privileged.ZONES_DIR = old_zones_dir


@pytest.mark.usefixtures('configuration_file')
def test_set_forwarders():
    """Test that setting forwarders works."""
    bind.privileged._set_forwarders('8.8.8.8 8.8.4.4')
    conf = bind.privileged.get_config()
    assert conf['forwarders'] == '8.8.8.8 8.8.4.4'

    bind.privileged._set_forwarders('')
    conf = bind.privileged.get_config()
    assert conf['forwarders'] == ''


@pytest.mark.usefixtures('bind_zones_folder')
def test_get_correct_served_domains():
    """
    Test that get_served_domains collects the right a/aaaa records from zone
    files
    """
    served_domains = bind.privileged.get_served_domains()

    assert served_domains['localhost.'] == ["127.0.0.1", "::1"]
    assert served_domains['custom.domain.'] == [
        "10.10.10.1", "fe80::c6e9:84ff:fe16:95da"
    ]