diff --git a/functional_tests/features/bind.feature b/functional_tests/features/bind.feature new file mode 100644 index 000000000..fc958eec5 --- /dev/null +++ b/functional_tests/features/bind.feature @@ -0,0 +1,52 @@ +# +# This file is part of FreedomBox. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +@apps @bind @backups +Feature: Bind Domain Name Server + Configure the Bind Domain Name Server. + +Background: + Given I'm a logged in user + Given the bind application is installed + +Scenario: Enable bind application + Given the bind application is disabled + When I enable the bind application + Then the bind service should be running + +Scenario: Disable bind application + Given the bind application is enabled + When I disable the bind application + Then the bind service should not be running + +Scenario: Set bind forwarders + Given the bind application is enabled + And bind forwarders are set to 1.1.1.1 + When I set bind forwarders to 1.1.1.1 1.0.0.1 + Then bind forwarders should be 1.1.1.1 1.0.0.1 + +Scenario: Enable bind DNSSEC + Given the bind application is enabled + And bind DNSSEC is disabled + When I enable bind DNSSEC + Then bind DNSSEC should be enabled + +Scenario: Disable bind DNSSEC + Given the bind application is enabled + And bind DNSSEC is disabled + When I disable bind DNSSEC + Then bind DNSSEC should be disabled diff --git a/functional_tests/step_definitions/system.py b/functional_tests/step_definitions/system.py index 5c3040882..331ad78c6 100644 --- a/functional_tests/step_definitions/system.py +++ b/functional_tests/step_definitions/system.py @@ -177,3 +177,35 @@ def pagekite_configure(browser, host, port, kite_name, kite_secret): def pagekite_assert_configured(browser, host, port, kite_name, kite_secret): assert (host, port, kite_name, kite_secret) == system.pagekite_get_configuration(browser) + + +@given(parsers.parse('bind forwarders are set to {forwarders}')) +def bind_given_set_forwarders(browser, forwarders): + system.bind_set_forwarders(browser, forwarders) + + +@when(parsers.parse('I set bind forwarders to {forwarders}')) +def bind_set_forwarders(browser, forwarders): + system.bind_set_forwarders(browser, forwarders) + + +@then(parsers.parse('bind forwarders should be {forwarders}')) +def bind_assert_forwarders(browser, forwarders): + assert system.bind_get_forwarders(browser) == forwarders + + +@given(parsers.parse('bind DNSSEC is {enable:w}')) +def bind_given_enable_dnssec(browser, enable): + should_enable = (enable == 'enabled') + system.bind_enable_dnssec(browser, should_enable) + + +@when(parsers.parse('I {enable:w} bind DNSSEC')) +def bind_enable_dnssec(browser, enable): + should_enable = (enable == 'enable') + system.bind_enable_dnssec(browser, should_enable) + + +@then(parsers.parse('bind DNSSEC should be {enabled:w}')) +def bind_assert_dnssec(browser, enabled): + assert system.bind_get_dnssec(browser) == (enabled == 'enabled') diff --git a/functional_tests/support/interface.py b/functional_tests/support/interface.py index 9de43331e..bd839e82c 100644 --- a/functional_tests/support/interface.py +++ b/functional_tests/support/interface.py @@ -26,7 +26,7 @@ from support import config from .service import wait_for_page_update sys_modules = [ - 'avahi', 'backups', 'cockpit', 'config', 'datetime', 'diagnostics', + 'avahi', 'backups', 'bind', 'cockpit', 'config', 'datetime', 'diagnostics', 'dynamicdns', 'firewall', 'letsencrypt', 'monkeysphere', 'names', 'networks', 'pagekite', 'power', 'snapshot', 'upgrades', 'users' ] diff --git a/functional_tests/support/system.py b/functional_tests/support/system.py index 2f9f46101..d7edb5a89 100644 --- a/functional_tests/support/system.py +++ b/functional_tests/support/system.py @@ -228,3 +228,33 @@ def pagekite_get_configuration(browser): int(browser.find_by_name('pagekite-server_port').value), browser.find_by_name('pagekite-kite_name').value, browser.find_by_name('pagekite-kite_secret').value) + + +def bind_set_forwarders(browser, forwarders): + """Set the forwarders list (space separated) in bind configuration.""" + nav_to_module(browser, 'bind') + browser.fill('forwarders', forwarders) + submit(browser, form_class='form-configuration') + + +def bind_get_forwarders(browser): + """Return the forwarders list (space separated) in bind configuration.""" + nav_to_module(browser, 'bind') + return browser.find_by_name('forwarders').first.value + + +def bind_enable_dnssec(browser, enable): + """Enable/disable DNSSEC in bind configuration.""" + nav_to_module(browser, 'bind') + if enable: + browser.check('enable_dnssec') + else: + browser.uncheck('enable_dnssec') + + submit(browser, form_class='form-configuration') + + +def bind_get_dnssec(browser): + """Return whether DNSSEC is enabled/disabled in bind configuration.""" + nav_to_module(browser, 'bind') + return browser.find_by_name('enable_dnssec').first.checked