fix: DNS split-horizon in DDNS mode, service access filter, health check, verbosity persistence
Unit Tests / test (push) Successful in 7m32s
Unit Tests / test (push) Successful in 7m32s
- DNS (critical): add _configured_dns_params() that returns (primary_domain, split_horizon_zones) from config_manager so all apply_all_dns_rules() callers pass the correct primary zone (e.g. 'pic.ngo') and split-horizon list (e.g. ['pic1.pic.ngo']) instead of the FQDN as the primary — fixes DNS_PROBE_FINISHED_BAD_CONFIG for all external domains when on VPN - firewall_manager: add split_horizon_zones param to apply_all_dns_rules() and forward it to generate_corefile() - Peers: filter service_access list to installed services only; peers.py derives valid services from config_manager.get_installed_services() with the email→mail ID mapping; Peers.jsx fetches from /api/store/installed and filters the checkboxes and defaults accordingly - Health check: fix file_manager→'files' ID mapping so files service health is checked when installed (was silently skipped due to 'file' vs 'files') - Verbosity persistence: move log_levels.json from non-mounted /app/api/config/ to CONFIG_DIR (/app/config/) which maps to config/api/ on the host; both load (managers.py) and save (routes/services.py) updated Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -144,7 +144,7 @@ class TestApplyAllDnsRulesPassesCellLinks(unittest.TestCase):
|
||||
cell_links=cell_links,
|
||||
)
|
||||
mock_gen.assert_called_once_with(
|
||||
[], '/tmp/fake_Corefile', 'cell', cell_links
|
||||
[], '/tmp/fake_Corefile', 'cell', cell_links, None
|
||||
)
|
||||
|
||||
def test_cell_links_none_forwarded_as_none(self):
|
||||
@@ -156,7 +156,7 @@ class TestApplyAllDnsRulesPassesCellLinks(unittest.TestCase):
|
||||
domain='cell',
|
||||
cell_links=None,
|
||||
)
|
||||
mock_gen.assert_called_once_with([], '/tmp/fake_Corefile', 'cell', None)
|
||||
mock_gen.assert_called_once_with([], '/tmp/fake_Corefile', 'cell', None, None)
|
||||
|
||||
def test_reload_called_on_success(self):
|
||||
with patch.object(firewall_manager, 'generate_corefile', return_value=True), \
|
||||
|
||||
@@ -333,12 +333,8 @@ class TestLogVerbosity(unittest.TestCase):
|
||||
def test_put_verbosity_returns_200_and_calls_set_level(self, mock_lm):
|
||||
mock_lm.get_service_levels.return_value = {'dns': 'DEBUG'}
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
# Endpoint builds: os.path.join(os.path.dirname(__file__), 'config', 'log_levels.json')
|
||||
# Patch dirname to return tmpdir so the full path becomes tmpdir/config/log_levels.json
|
||||
config_dir = os.path.join(tmpdir, 'config')
|
||||
os.makedirs(config_dir)
|
||||
with patch('app.auth_manager', MagicMock(spec=object)), \
|
||||
patch('app.os.path.dirname', return_value=tmpdir):
|
||||
patch.dict('os.environ', {'CONFIG_DIR': tmpdir}):
|
||||
r = self.client.put(
|
||||
'/api/logs/verbosity',
|
||||
data=json.dumps({'dns': 'DEBUG'}),
|
||||
|
||||
Reference in New Issue
Block a user