From 352a58996286e777be89209cd5bf342cff10ac7c Mon Sep 17 00:00:00 2001 From: Wlodek Wencel Date: Fri, 22 Aug 2014 14:43:54 +0200 Subject: [PATCH] lettuce DNS tests removed --- tests/lettuce/.gitignore | 2 - tests/lettuce/Makefile.am | 1 - tests/lettuce/README | 131 ---- tests/lettuce/README.tutorial | 157 ---- tests/lettuce/configurations/.gitignore | 5 - tests/lettuce/configurations/auth/.gitignore | 2 - .../auth/auth_badzone.config.orig | 38 - .../auth/auth_basic.config.orig | 22 - .../lettuce/configurations/bindctl/.gitignore | 1 - .../bindctl/bindctl.config.orig | 25 - .../bindctl_commands.config.orig | 37 - tests/lettuce/configurations/ddns/.gitignore | 2 - .../configurations/ddns/ddns.config.orig | 90 --- .../configurations/ddns/noddns.config.orig | 46 -- tests/lettuce/configurations/default.config | 16 - tests/lettuce/configurations/default_user.csv | 1 - .../configurations/example.org.config.orig | 35 - .../configurations/example.org.inmem.config | 45 -- .../configurations/example2.org.config | 36 - .../configurations/generate.config.orig | 35 - tests/lettuce/configurations/glue.config | 34 - .../inmemory_over_sqlite3/secondary.conf | 40 -- .../ixfr-out/testset1-config.db | 62 -- .../configurations/multi_instance/.gitignore | 1 - .../multi_instance/multi_auth.config.orig | 34 - .../lettuce/configurations/no_db_file.config | 36 - .../configurations/nsec3/nsec3_auth.config | 36 - .../nsec3/rfc5155-example.zone.signed | 72 -- .../configurations/resolver/.gitignore | 1 - .../resolver/resolver_basic.config.orig | 31 - tests/lettuce/configurations/root.config.orig | 40 -- .../lettuce/configurations/static.config.orig | 36 - tests/lettuce/configurations/xfrin/.gitignore | 4 - .../configurations/xfrin/inmem_slave.conf | 41 -- .../xfrin/retransfer_master.conf.orig | 45 -- .../xfrin/retransfer_master_diffs.conf | 47 -- .../xfrin/retransfer_master_nons.conf.orig | 48 -- .../xfrin/retransfer_master_v4.conf.orig | 45 -- .../xfrin/retransfer_slave.conf.orig | 34 - .../xfrin/retransfer_slave_diffs.conf | 41 -- .../xfrin/retransfer_slave_notify.conf.orig | 49 -- .../xfrin/retransfer_slave_notify_v4.conf | 49 -- .../lettuce/configurations/xfrout_master.conf | 41 -- tests/lettuce/data/.gitignore | 5 - tests/lettuce/data/commands/bad_command | 9 - tests/lettuce/data/commands/directives | 19 - tests/lettuce/data/commands/empty | 0 tests/lettuce/data/commands/nested | 2 - tests/lettuce/data/commands/nested1 | 2 - tests/lettuce/data/ddns/.gitignore | 1 - .../data/ddns/example.org.sqlite3.orig | Bin 15360 -> 0 bytes tests/lettuce/data/empty_db.sqlite3 | Bin 14336 -> 0 bytes tests/lettuce/data/example.com-broken | 11 - tests/lettuce/data/example.net-empty | 1 - tests/lettuce/data/example.org | 13 - tests/lettuce/data/example.org-nons.sqlite3 | Bin 15360 -> 0 bytes tests/lettuce/data/example.org.sqlite3 | Bin 15360 -> 0 bytes tests/lettuce/data/generate.zone | 4 - tests/lettuce/data/glue.sqlite3 | Bin 17408 -> 0 bytes tests/lettuce/data/inmem-xfrin | 7 - tests/lettuce/data/inmem-xfrin.sqlite3.orig | Bin 13312 -> 0 bytes tests/lettuce/data/ixfr-out/.gitignore | 1 - tests/lettuce/data/ixfr-out/zones.sqlite3 | Bin 468992 -> 0 bytes tests/lettuce/data/root.sqlite3.orig | Bin 22528 -> 0 bytes tests/lettuce/data/static.zone | 3 - .../data/xfrin-before-diffs.sqlite3.orig | Bin 15360 -> 0 bytes tests/lettuce/data/xfrin-diffs.sqlite3 | Bin 407552 -> 0 bytes tests/lettuce/data/xfrin-notify.sqlite3.orig | Bin 13312 -> 0 bytes tests/lettuce/features/.gitignore | 1 - tests/lettuce/features/auth_badzone.feature | 49 -- tests/lettuce/features/auth_basic.feature | 20 - .../lettuce/features/bindctl_commands.feature | 171 ----- tests/lettuce/features/ddns_system.feature | 179 ----- tests/lettuce/features/default.feature | 21 - tests/lettuce/features/example.feature | 225 ------ .../features/inmemory_over_sqlite3.feature | 43 -- .../lettuce/features/ixfr_out_bind10.feature | 209 ------ tests/lettuce/features/master_loader.feature | 50 -- tests/lettuce/features/msgq.feature | 18 - tests/lettuce/features/multi_instance.feature | 59 -- tests/lettuce/features/nsec3_auth.feature | 466 ------------ tests/lettuce/features/queries.feature | 494 ------------- .../features/resolver_basic.feature.disabled | 36 - tests/lettuce/features/stats_httpd.feature | 16 - tests/lettuce/features/terrain/.gitignore | 1 - .../features/terrain/bind10_control.py | 479 ------------ tests/lettuce/features/terrain/http.py | 41 -- tests/lettuce/features/terrain/loadzone.py | 106 --- tests/lettuce/features/terrain/nsupdate.py | 168 ----- tests/lettuce/features/terrain/querying.py | 349 --------- tests/lettuce/features/terrain/steps.py | 95 --- tests/lettuce/features/terrain/terrain.py | 460 ------------ tests/lettuce/features/terrain/transfer.py | 195 ----- tests/lettuce/features/xfrin_bind10.feature | 204 ------ .../features/xfrin_notify_handling.feature | 680 ------------------ tests/lettuce/features/xfrout_bind10.feature | 39 - tests/lettuce/run_lettuce.sh | 25 - tests/lettuce/run_python-tool.sh | 23 - tests/lettuce/setup_intree_bind10.sh.in | 53 -- tests/lettuce/tools/xfr-client.py | 103 --- 100 files changed, 6750 deletions(-) delete mode 100644 tests/lettuce/.gitignore delete mode 100644 tests/lettuce/Makefile.am delete mode 100644 tests/lettuce/README delete mode 100644 tests/lettuce/README.tutorial delete mode 100644 tests/lettuce/configurations/.gitignore delete mode 100644 tests/lettuce/configurations/auth/.gitignore delete mode 100644 tests/lettuce/configurations/auth/auth_badzone.config.orig delete mode 100644 tests/lettuce/configurations/auth/auth_basic.config.orig delete mode 100644 tests/lettuce/configurations/bindctl/.gitignore delete mode 100644 tests/lettuce/configurations/bindctl/bindctl.config.orig delete mode 100644 tests/lettuce/configurations/bindctl_commands.config.orig delete mode 100644 tests/lettuce/configurations/ddns/.gitignore delete mode 100644 tests/lettuce/configurations/ddns/ddns.config.orig delete mode 100644 tests/lettuce/configurations/ddns/noddns.config.orig delete mode 100644 tests/lettuce/configurations/default.config delete mode 100644 tests/lettuce/configurations/default_user.csv delete mode 100644 tests/lettuce/configurations/example.org.config.orig delete mode 100644 tests/lettuce/configurations/example.org.inmem.config delete mode 100644 tests/lettuce/configurations/example2.org.config delete mode 100644 tests/lettuce/configurations/generate.config.orig delete mode 100644 tests/lettuce/configurations/glue.config delete mode 100644 tests/lettuce/configurations/inmemory_over_sqlite3/secondary.conf delete mode 100644 tests/lettuce/configurations/ixfr-out/testset1-config.db delete mode 100644 tests/lettuce/configurations/multi_instance/.gitignore delete mode 100644 tests/lettuce/configurations/multi_instance/multi_auth.config.orig delete mode 100644 tests/lettuce/configurations/no_db_file.config delete mode 100644 tests/lettuce/configurations/nsec3/nsec3_auth.config delete mode 100644 tests/lettuce/configurations/nsec3/rfc5155-example.zone.signed delete mode 100644 tests/lettuce/configurations/resolver/.gitignore delete mode 100644 tests/lettuce/configurations/resolver/resolver_basic.config.orig delete mode 100644 tests/lettuce/configurations/root.config.orig delete mode 100644 tests/lettuce/configurations/static.config.orig delete mode 100644 tests/lettuce/configurations/xfrin/.gitignore delete mode 100644 tests/lettuce/configurations/xfrin/inmem_slave.conf delete mode 100644 tests/lettuce/configurations/xfrin/retransfer_master.conf.orig delete mode 100644 tests/lettuce/configurations/xfrin/retransfer_master_diffs.conf delete mode 100644 tests/lettuce/configurations/xfrin/retransfer_master_nons.conf.orig delete mode 100644 tests/lettuce/configurations/xfrin/retransfer_master_v4.conf.orig delete mode 100644 tests/lettuce/configurations/xfrin/retransfer_slave.conf.orig delete mode 100644 tests/lettuce/configurations/xfrin/retransfer_slave_diffs.conf delete mode 100644 tests/lettuce/configurations/xfrin/retransfer_slave_notify.conf.orig delete mode 100644 tests/lettuce/configurations/xfrin/retransfer_slave_notify_v4.conf delete mode 100644 tests/lettuce/configurations/xfrout_master.conf delete mode 100644 tests/lettuce/data/.gitignore delete mode 100644 tests/lettuce/data/commands/bad_command delete mode 100644 tests/lettuce/data/commands/directives delete mode 100644 tests/lettuce/data/commands/empty delete mode 100644 tests/lettuce/data/commands/nested delete mode 100644 tests/lettuce/data/commands/nested1 delete mode 100644 tests/lettuce/data/ddns/.gitignore delete mode 100644 tests/lettuce/data/ddns/example.org.sqlite3.orig delete mode 100644 tests/lettuce/data/empty_db.sqlite3 delete mode 100644 tests/lettuce/data/example.com-broken delete mode 100644 tests/lettuce/data/example.net-empty delete mode 100644 tests/lettuce/data/example.org delete mode 100644 tests/lettuce/data/example.org-nons.sqlite3 delete mode 100644 tests/lettuce/data/example.org.sqlite3 delete mode 100644 tests/lettuce/data/generate.zone delete mode 100644 tests/lettuce/data/glue.sqlite3 delete mode 100644 tests/lettuce/data/inmem-xfrin delete mode 100644 tests/lettuce/data/inmem-xfrin.sqlite3.orig delete mode 100644 tests/lettuce/data/ixfr-out/.gitignore delete mode 100644 tests/lettuce/data/ixfr-out/zones.sqlite3 delete mode 100644 tests/lettuce/data/root.sqlite3.orig delete mode 100644 tests/lettuce/data/static.zone delete mode 100644 tests/lettuce/data/xfrin-before-diffs.sqlite3.orig delete mode 100644 tests/lettuce/data/xfrin-diffs.sqlite3 delete mode 100644 tests/lettuce/data/xfrin-notify.sqlite3.orig delete mode 100644 tests/lettuce/features/.gitignore delete mode 100644 tests/lettuce/features/auth_badzone.feature delete mode 100644 tests/lettuce/features/auth_basic.feature delete mode 100644 tests/lettuce/features/bindctl_commands.feature delete mode 100644 tests/lettuce/features/ddns_system.feature delete mode 100644 tests/lettuce/features/default.feature delete mode 100644 tests/lettuce/features/example.feature delete mode 100644 tests/lettuce/features/inmemory_over_sqlite3.feature delete mode 100644 tests/lettuce/features/ixfr_out_bind10.feature delete mode 100644 tests/lettuce/features/master_loader.feature delete mode 100644 tests/lettuce/features/msgq.feature delete mode 100644 tests/lettuce/features/multi_instance.feature delete mode 100644 tests/lettuce/features/nsec3_auth.feature delete mode 100644 tests/lettuce/features/queries.feature delete mode 100644 tests/lettuce/features/resolver_basic.feature.disabled delete mode 100644 tests/lettuce/features/stats_httpd.feature delete mode 100644 tests/lettuce/features/terrain/.gitignore delete mode 100644 tests/lettuce/features/terrain/bind10_control.py delete mode 100644 tests/lettuce/features/terrain/http.py delete mode 100644 tests/lettuce/features/terrain/loadzone.py delete mode 100644 tests/lettuce/features/terrain/nsupdate.py delete mode 100644 tests/lettuce/features/terrain/querying.py delete mode 100644 tests/lettuce/features/terrain/steps.py delete mode 100644 tests/lettuce/features/terrain/terrain.py delete mode 100644 tests/lettuce/features/terrain/transfer.py delete mode 100644 tests/lettuce/features/xfrin_bind10.feature delete mode 100644 tests/lettuce/features/xfrin_notify_handling.feature delete mode 100644 tests/lettuce/features/xfrout_bind10.feature delete mode 100755 tests/lettuce/run_lettuce.sh delete mode 100755 tests/lettuce/run_python-tool.sh delete mode 100755 tests/lettuce/setup_intree_bind10.sh.in delete mode 100755 tests/lettuce/tools/xfr-client.py diff --git a/tests/lettuce/.gitignore b/tests/lettuce/.gitignore deleted file mode 100644 index f41154c82e..0000000000 --- a/tests/lettuce/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/output/ -/setup_intree_bind10.sh diff --git a/tests/lettuce/Makefile.am b/tests/lettuce/Makefile.am deleted file mode 100644 index 82f3e3aad1..0000000000 --- a/tests/lettuce/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -noinst_SCRIPTS = setup_intree_bind10.sh diff --git a/tests/lettuce/README b/tests/lettuce/README deleted file mode 100644 index f44ac9bf48..0000000000 --- a/tests/lettuce/README +++ /dev/null @@ -1,131 +0,0 @@ -BIND10 system testing with Lettuce -or: to BDD or not to BDD - -In this directory, we define a set of behavioral tests for BIND 10. Currently, -these tests are specific for BIND10, but we are keeping in mind that RFC-related -tests could be separated, so that we can test other systems as well. - -Prerequisites: -- BIND 10 must be compiled or installed (even when testing in-tree build; - see below) with both DNS and DHCP components enabled -- dig -- lettuce (http://lettuce.it) - -To install lettuce, if you have the python pip installation tool, simply do -pip install lettuce -See http://lettuce.it/intro/install.html - -Most systems have the pip tool in a separate package; on Debian-based systems -it is called python-pip. On FreeBSD the port is devel/py-pip. - -Running the tests ------------------ - -At this moment, we have a fixed port for local tests in our setups, port 56176. -This port must be free. (TODO: can we make this run-time discovered?). -Port 56175 is used for cmdctl, and must also be available. -(note, we will need to extend this to a range, or if possible, we will need to -do some on-the-fly available port finding) - -You can run the lettuce tests with the provided run_lettuce.sh script. - -By default it will use the build tree, but you can use an installed version -of bind10 by passing -I as the first argument of run_lettuce.sh - -The tool 'dig' must be in the default search path of your environment. If -you specified -I, so must the main BIND 10 programs. And, with or without --I, some BIND 10 programs still have to be installed as they are invoked -from test tools. Those include bindctl and b10-loadzone. - -Due to the default way lettuce prints its output, it is advisable to run it -in a terminal that is wide than the default. If you see a lot of lines twice -in different colors, the terminal is not wide enough. - -If you just want to run one specific feature test, use -run_lettuce.sh [-I] features/ - -To run a specific scenario from a feature, use -run_lettuce.sh [-I] features/ -s - -We have set up the tests to assume that lettuce is run from this directory, -so even if you specify a specific feature file, you should do it from this -directory. - -What to do when a test fails ----------------------------- - -First of all, look at the error it printed and see what step it occurred in. -If written well, the output should explain most of what went wrong. - -The stacktrace that is printed is *not* of bind10, but of the testing -framework; this helps in finding more information about what exactly the test -tried to achieve when it failed (as well as help debug the tests themselves). - -Furthermore, if any scenario fails, the output from long-running processes -will be stored in the directory output/. The name of the files will be ---.stdout and ---.stderr -Where spaces and other non-standard characters are replaced by an underscore. -The process name is either the standard name for said process (e.g. 'bind10'), -or the name given to it by the test ('when i run bind10 as '). - -These files *will* be overwritten or deleted if the same scenarios are run -again, so if you want to inspect them after a failed test, either do so -immediately or move the files. - -If you want to keep these output files even for successful runs, you can -specify the environment variable LETTUCE_KEEP_OUTPUT=1. The files will -still be overwritten by subsequent runs, but they will not automatically be -deleted. - -Adding and extending tests --------------------------- - -If you want to add tests, it is advisable to first go through the examples to -see what is possible, and read the documentation on http://www.lettuce.it - -There is also a README.tutorial file here. - -We have a couple of conventions to keep things manageable. - -Configuration files go into the configurations/ directory. -Data files go into the data/ directory. -Step definition go into the features/terrain/ directory (the name terrain is -chosen for the same reason Lettuce chose terrain.py, this is the place the -tests 'live' in). -Feature definitions go directly into the features/ directory. - -These directories are currently not divided further; we may want to consider -this as the set grows. Due to a (current?) limitation of Lettuce, for -feature files this is currently not possible; the python files containing -steps and terrain must be below or at the same level of the feature files. - -Long-running processes should be started through the world.RunningProcesses -instance. If you want to add a process (e.g. bind9), create start, stop and -control steps in terrain/_control.py, and let it use the -RunningProcesses API (defined in terrain.py). See bind10_control.py for an -example. - -For sending queries and checking the results, steps have been defined in -terrain/querying.py. These use dig and store the results split up into text -strings. This is intentionally not parsed through our own library (as that way -we might run into a 'symmetric bug'). If you need something more advanced from -query results, define it here. - -Some very general steps are defined in terrain/steps.py. -Initialization code, cleanup code, and helper classes are defined in -terrain/terrain.py. - -To find the right steps, case insensitive matching is used. Parameters taken -from the steps are case-sensitive though. So a step defined as -'do foo with value (bar)' will be matched when using -'Do Foo with value xyz', but xyz will be taken as given. - -If you need to add steps that are very particular to one test, create a new -file with a name relevant for that test in terrain. We may want to consider -creating a specific subdirectory for these, but at this moment it is unclear -whether we need to. - -We should try to keep steps as general as possible, while not making them to -complex and error-prone. - diff --git a/tests/lettuce/README.tutorial b/tests/lettuce/README.tutorial deleted file mode 100644 index 7d1c801217..0000000000 --- a/tests/lettuce/README.tutorial +++ /dev/null @@ -1,157 +0,0 @@ -Quick tutorial and overview ---------------------------- - -Lettuce is a framework for doing Behaviour Driven Development (BDD). - -The idea behind BDD is that you first write down your requirements in -the form of scenarios, then implement their behaviour. - -We do not plan on doing full BDD, but such a system should also help -us make system tests. And, hopefully, being able to better identify -what exactly is going wrong when a test fails. - -Lettuce is a python implementation of the Cucumber framework, which is -a ruby system. So far we chose lettuce because we already need python -anyway, so chances are higher that any system we want to run it on -supports it. It only supports a subset of cucumber, but more cucumber -features are planned. As I do not know much details of cucumber, I -can't really say what is there and what is not. - -A slight letdown is that the current version does not support python 3. -However, as long as the tool-calling glue is python2, this should not -cause any problems, since these aren't unit tests; We do not plan to use -our libraries directly, but only through the runnable scripts and -executables. - ------ - -Features, Scenarios, Steps. - -Lettuce makes a distinction between features, scenarios, and steps. - -Features are general, well, features. Each 'feature' has its own file -ending in .feature. A feature file contains a description and a number -of scenarios. Each scenario tests one or more particular parts of the -feature. Each scenario consists of a number of steps. - -So let's open up a simple one. - --- example.feature -Feature: showing off BIND 10 - This is to show BIND 10 running and that it answer queries - - Scenario: Starting bind10 - # steps go here --- - -I have predefined a number of steps we can use, as we build test we -will need to expand these, but we will look at them shortly. - -This file defines a feature, just under the feature name we can -provide a description of the feature. - -The one scenario we have has no steps, so if we run it we should -see something like: - --- output -> ./run_lettuce.sh -Feature: showing off BIND 10 - This is to show BIND 10 running and that it answer queries - - Scenario: Starting bind10 - -1 feature (1 passed) -1 scenario (1 passed) -0 step (0 passed) --- - -Let's first add some steps that send queries. - --- - A query for www.example.com should have rcode REFUSED - A query for www.example.org should have rcode NOERROR --- - -Since we didn't start any bind10, dig will time out and the result -should be an error saying it got no answer. Errors are in the -form of stack traces (trigger by failed assertions), so we can find -out easily where in the tests they occurred. Especially when the total -set of steps gets bigger we might need that. - -So let's add a step that starts bind10. - --- - When I start bind10 with configuration example.org.config --- - -This is not good enough; it will start the process, but setting up -b10-auth may take a few moments, so we need to add a step to wait for -it to be started before we continue. - --- - Then wait for bind10 auth to start --- - -And let's run the tests again. - --- -> ./run_lettuce.sh - -Feature: showing off BIND 10 - This is to show BIND 10 running and that it answer queries - - Scenario: Starting bind10 - When I start bind10 with configuration example.org.config - Then wait for bind10 auth to start - A query for www.example.com should have rcode REFUSED - A query for www.example.org should have rcode NOERROR - -1 feature (1 passed) -1 scenario (1 passed) -4 steps (4 passed) -(finished within 2 seconds) --- - -So take a look at one of those steps, let's pick the first one. - -A step is defined through a python decorator, which in essence is a regular -expression; lettuce searches through all defined steps to find one that -matches. These are 'partial' matches (unless specified otherwise in the -regular expression itself), so if the step is defined with "do foo bar", the -scenario can add words for readability "When I do foo bar". - -Each captured group will be passed as an argument to the function we define. -For bind10, I defined a configuration file, a cmdctl port, and a process -name. The first two should be self-evident, and the process name is an -optional name we give it, should we want to address it in the rest of the -tests. This is most useful if we want to start multiple instances. In the -next step (the wait for auth to start), I added a 'of '. So if we -define the bind10 'as b10_second_instance', we can specify that one here as -'of b10_second_instance'. - --- - When I start bind10 with configuration second.config - with cmdctl port 12345 as b10_second_instance --- -(line wrapped for readability) - -But notice how we needed two steps, which we probably always need (but -not entirely always)? We can also combine steps; for instance: - --- -@step('have bind10 running(?: with configuration ([\w.]+))?') -def have_bind10_running(step, config_file): - step.given('start bind10 with configuration ' + config_file) - step.given('wait for bind10 auth to start') --- - -Now we can replace the two steps with one: - --- - Given I have bind10 running --- - -That's it for the quick overview. For some more examples, with comments, -take a look at features/example.feature. You can read more about lettuce and -its features on http://www.lettuce.it, and if you plan on adding tests and -scenarios, please consult the last section of the main README first. diff --git a/tests/lettuce/configurations/.gitignore b/tests/lettuce/configurations/.gitignore deleted file mode 100644 index f534cf654b..0000000000 --- a/tests/lettuce/configurations/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -/bindctl_commands.config -/example.org.config -/generate.config -/root.config -/static.config diff --git a/tests/lettuce/configurations/auth/.gitignore b/tests/lettuce/configurations/auth/.gitignore deleted file mode 100644 index 8165b69711..0000000000 --- a/tests/lettuce/configurations/auth/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/auth_badzone.config -/auth_basic.config diff --git a/tests/lettuce/configurations/auth/auth_badzone.config.orig b/tests/lettuce/configurations/auth/auth_badzone.config.orig deleted file mode 100644 index 02e2186956..0000000000 --- a/tests/lettuce/configurations/auth/auth_badzone.config.orig +++ /dev/null @@ -1,38 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [{ - "severity": "DEBUG", - "name": "*", - "debuglevel": 99 - }] - }, - "Auth": { - "listen_on": [{ - "port": 56176, - "address": "127.0.0.1" - }] - }, - "data_sources": { - "classes": { - "IN": [ - { - "type": "MasterFiles", - "cache-enable": true, - "params": { - "example.org": "data/example.org", - "example.com": "data/example.com-broken", - "example.net": "data/example.net-empty", - "example.info": "data/example.info-doesnt-exist" - } - } - ] - } - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/auth/auth_basic.config.orig b/tests/lettuce/configurations/auth/auth_basic.config.orig deleted file mode 100644 index e94e73a77b..0000000000 --- a/tests/lettuce/configurations/auth/auth_basic.config.orig +++ /dev/null @@ -1,22 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "listen_on": [ { - "port": 56176, - "address": "127.0.0.1" - } ] - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/bindctl/.gitignore b/tests/lettuce/configurations/bindctl/.gitignore deleted file mode 100644 index e14ae76759..0000000000 --- a/tests/lettuce/configurations/bindctl/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bindctl.config diff --git a/tests/lettuce/configurations/bindctl/bindctl.config.orig b/tests/lettuce/configurations/bindctl/bindctl.config.orig deleted file mode 100644 index 51615cb547..0000000000 --- a/tests/lettuce/configurations/bindctl/bindctl.config.orig +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "database_file": "data/example.org.sqlite3", - "listen_on": [ { - "port": 56176, - "address": "127.0.0.1" - } ] - }, - "data_sources": { - "classes": {} - }, - "Init": { - "components": { - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/bindctl_commands.config.orig b/tests/lettuce/configurations/bindctl_commands.config.orig deleted file mode 100644 index 1b560add21..0000000000 --- a/tests/lettuce/configurations/bindctl_commands.config.orig +++ /dev/null @@ -1,37 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "database_file": "data/example.org.sqlite3", - "listen_on": [ { - "port": 56176, - "address": "127.0.0.1" - } ] - }, - "data_sources": { - "classes": {} - }, - "StatsHttpd": { - "listen_on": [ { - "port": 47811, - "address": "127.0.0.1" - } ] - }, - "Init": { - "components": { - "b10-auth": { "kind": "dispensable", "special": "auth" }, - "b10-xfrin": { "address": "Xfrin", "kind": "dispensable" }, - "b10-xfrout": { "address": "Xfrout", "kind": "dispensable" }, - "b10-zonemgr": { "address": "Zonemgr", "kind": "dispensable" }, - "b10-stats": { "address": "Stats", "kind": "dispensable" }, - "b10-stats-httpd": { "address": "StatsHttpd", "kind": "dispensable" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/ddns/.gitignore b/tests/lettuce/configurations/ddns/.gitignore deleted file mode 100644 index f4f3945b61..0000000000 --- a/tests/lettuce/configurations/ddns/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/ddns.config -/noddns.config diff --git a/tests/lettuce/configurations/ddns/ddns.config.orig b/tests/lettuce/configurations/ddns/ddns.config.orig deleted file mode 100644 index c3bf319782..0000000000 --- a/tests/lettuce/configurations/ddns/ddns.config.orig +++ /dev/null @@ -1,90 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ - { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } - ] - }, - "Zonemgr": { - "secondary_zones": [ - { - "class": "IN", - "name": "secondary.org" - } - ] - }, - "Auth": { - "database_file": "data/ddns/example.org.sqlite3", - "listen_on": [ - { - "port": 56176, - "address": - "127.0.0.1" - } - ] - }, - "data_sources": { - "classes": { - "IN": [ - { - "type": "sqlite3", - "params": { - "database_file": "data/ddns/example.org.sqlite3" - } - } - ] - } - }, - "Init": { - "components": { - "b10-xfrout": { - "kind": "dispensable", - "address": "Xfrout" - }, - "b10-zonemgr": { - "kind": "dispensable", - "address": "ZoneMgr" - }, - "b10-ddns": { - "kind": "dispensable", - "address": "DDNS" - }, - "b10-auth": { - "kind": "needed", - "special": "auth" - }, - "b10-cmdctl": { - "kind": "needed", - "special": "cmdctl" - } - } - }, - "DDNS": { - "zones": [ - { - "origin": "example.org.", - "update_acl": [ - { - "action": "ACCEPT", - "from": "127.0.0.1" - } - ], - "class": "IN" - }, - { - "origin": "secondary.org.", - "update_acl": [ - { - "action": "ACCEPT", - "from": "127.0.0.1" - } - ], - "class": "IN" - } - ] - } -} diff --git a/tests/lettuce/configurations/ddns/noddns.config.orig b/tests/lettuce/configurations/ddns/noddns.config.orig deleted file mode 100644 index 2b3f9cabaf..0000000000 --- a/tests/lettuce/configurations/ddns/noddns.config.orig +++ /dev/null @@ -1,46 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ - { - "severity": "DEBUG", - "name": "*", - "debuglevel": 99 - } - ] - }, - "DDNS": {"zones": []}, - "Auth": { - "database_file": "data/ddns/example.org.sqlite3", - "listen_on": [ - { - "port": 56176, - "address": "127.0.0.1" - } - ] - }, - "data_sources": { - "classes": { - "IN": [ - { - "type": "sqlite3", - "params": { - "database_file": "data/ddns/example.org.sqlite3" - }, - "cache-enable": true, - "cache-zones": [ - "example.org" - ] - } - ] - } - }, - "Init": { - "components": { - "b10-xfrout": {"kind": "dispensable"}, - "b10-auth": {"kind": "needed", "special": "auth"}, - "b10-zonemgr": {"kind": "dispensable", "address": "ZoneMgr" }, - "b10-cmdctl": {"kind": "needed", "special": "cmdctl"} - } - } -} diff --git a/tests/lettuce/configurations/default.config b/tests/lettuce/configurations/default.config deleted file mode 100644 index 2713def896..0000000000 --- a/tests/lettuce/configurations/default.config +++ /dev/null @@ -1,16 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "StatsHttpd": { - "listen_on": [ { - "port": 47811, - "address": "127.0.0.1" - } ] - } -} diff --git a/tests/lettuce/configurations/default_user.csv b/tests/lettuce/configurations/default_user.csv deleted file mode 100644 index e13e194eed..0000000000 --- a/tests/lettuce/configurations/default_user.csv +++ /dev/null @@ -1 +0,0 @@ -root,bind10 diff --git a/tests/lettuce/configurations/example.org.config.orig b/tests/lettuce/configurations/example.org.config.orig deleted file mode 100644 index 005096c544..0000000000 --- a/tests/lettuce/configurations/example.org.config.orig +++ /dev/null @@ -1,35 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "database_file": "data/example.org.sqlite3", - "listen_on": [ { - "port": 56176, - "address": "127.0.0.1" - } ] - }, - "data_sources": { - "classes": { - "IN": [ - { - "type": "sqlite3", - "params": { - "database_file": "data/example.org.sqlite3" - } - } - ] - } - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/example.org.inmem.config b/tests/lettuce/configurations/example.org.inmem.config deleted file mode 100644 index a7c4d9ffaf..0000000000 --- a/tests/lettuce/configurations/example.org.inmem.config +++ /dev/null @@ -1,45 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [{ - "severity": "DEBUG", - "name": "*", - "debuglevel": 99 - }] - }, - "Auth": { - "listen_on": [{ - "port": 56176, - "address": "127.0.0.1" - }] - }, - "data_sources": { - "classes": { - "IN": [ - { - "type": "MasterFiles", - "cache-enable": true, - "params": { - "example.org": "data/example.org" - } - }, - { - "type": "broken_libraries_should_be_skipped", - "cache-enable": false, - "params": { - } - } - ] - } - }, - "Stats": { - "poll-interval": 1 - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-stats": { "address": "Stats", "kind": "dispensable" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/example2.org.config b/tests/lettuce/configurations/example2.org.config deleted file mode 100644 index 0425860760..0000000000 --- a/tests/lettuce/configurations/example2.org.config +++ /dev/null @@ -1,36 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "severity": "DEBUG", - "name": "*", - "debuglevel": 99 - } - ] - }, - "Auth": { - "database_file": "data/example.org.sqlite3", - "listen_on": [ { - "port": 56177, - "address": "::1" - } ] - }, - "data_sources": { - "classes": { - "IN": [ - { - "type": "sqlite3", - "params": { - "database_file": "data/example.org.sqlite3" - } - } - ] - } - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/generate.config.orig b/tests/lettuce/configurations/generate.config.orig deleted file mode 100644 index a40d8c21d8..0000000000 --- a/tests/lettuce/configurations/generate.config.orig +++ /dev/null @@ -1,35 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [{ - "severity": "DEBUG", - "name": "*", - "debuglevel": 99 - }] - }, - "Auth": { - "listen_on": [{ - "port": 56176, - "address": "127.0.0.1" - }] - }, - "data_sources": { - "classes": { - "IN": [ - { - "type": "MasterFiles", - "cache-enable": true, - "params": { - "example.org": "data/generate.zone" - } - } - ] - } - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/glue.config b/tests/lettuce/configurations/glue.config deleted file mode 100644 index 13df1a431c..0000000000 --- a/tests/lettuce/configurations/glue.config +++ /dev/null @@ -1,34 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [{ - "severity": "DEBUG", - "name": "*", - "debuglevel": 99 - }] - }, - "Auth": { - "listen_on": [{ - "port": 56176, - "address": "127.0.0.1" - }] - }, - "data_sources": { - "classes": { - "IN": [ - { - "type": "sqlite3", - "params": { - "database_file": "data/glue.sqlite3" - } - } - ] - } - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/inmemory_over_sqlite3/secondary.conf b/tests/lettuce/configurations/inmemory_over_sqlite3/secondary.conf deleted file mode 100644 index f49498a376..0000000000 --- a/tests/lettuce/configurations/inmemory_over_sqlite3/secondary.conf +++ /dev/null @@ -1,40 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "listen_on": [ { - "port": 56176, - "address": "127.0.0.1" - } ] - }, - "data_sources": { - "classes": { - "IN": [ - { - "type": "sqlite3", - "params": { - "database_file": "data/example.org.sqlite3" - }, - "cache-enable": true, - "cache-zones": [ - "example.org" - ] - } - ] - } - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-xfrin": { "address": "Xfrin", "kind": "dispensable" }, - "b10-zonemgr": { "address": "Zonemgr", "kind": "dispensable" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/ixfr-out/testset1-config.db b/tests/lettuce/configurations/ixfr-out/testset1-config.db deleted file mode 100644 index 9623d8e77d..0000000000 --- a/tests/lettuce/configurations/ixfr-out/testset1-config.db +++ /dev/null @@ -1,62 +0,0 @@ -{ - "Xfrin": { - "zones": [ - { - "class": "IN", - "name": "example.com.", - "master_addr": "178.18.82.80" - } - ] - }, - "version": 3, - "Logging": { - "loggers": - [ - { - "debuglevel": 99, - "severity": "DEBUG", - "output_options": [ - { - "output": "stderr", - "flush": true - } - ], - "name": "*" - } - ] - }, - "Auth": { - "database_file": "data/ixfr-out/zones.sqlite3", - "listen_on": [ - { - "port": 56176, - "address": "::" - }, - { - "port": 56176, - "address": "0.0.0.0" - } - ] - }, - "data_sources": { - "classes": { - "IN": [ - { - "type": "sqlite3", - "params": { - "database_file": "data/ixfr-out/zones.sqlite3" - } - } - ] - } - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-xfrin": { "address": "Xfrin", "kind": "dispensable" }, - "b10-xfrout": { "address": "Xfrout", "kind": "dispensable" }, - "b10-zonemgr": { "address": "Zonemgr", "kind": "dispensable" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/multi_instance/.gitignore b/tests/lettuce/configurations/multi_instance/.gitignore deleted file mode 100644 index 9509290dcd..0000000000 --- a/tests/lettuce/configurations/multi_instance/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/multi_auth.config diff --git a/tests/lettuce/configurations/multi_instance/multi_auth.config.orig b/tests/lettuce/configurations/multi_instance/multi_auth.config.orig deleted file mode 100644 index 5d9ca6849a..0000000000 --- a/tests/lettuce/configurations/multi_instance/multi_auth.config.orig +++ /dev/null @@ -1,34 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "database_file": "data/test_nonexistent_db.sqlite3", - "listen_on": [ { - "port": 56176, - "address": "127.0.0.1" - } ] - }, - "data_sources": { - "classes": { - "IN": [{ - "type": "sqlite3", - "params": { - "database_file": "data/test_nonexistent_db.sqlite3" - } - }] - } - }, - "Init": { - "components": { - "b10-auth-2": {"kind": "dispensable", "special": "auth"}, - "b10-auth": {"kind": "dispensable", "special": "auth"}, - "b10-cmdctl": {"kind": "needed", "special": "cmdctl"} - } - } -} diff --git a/tests/lettuce/configurations/no_db_file.config b/tests/lettuce/configurations/no_db_file.config deleted file mode 100644 index 3229238d45..0000000000 --- a/tests/lettuce/configurations/no_db_file.config +++ /dev/null @@ -1,36 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "severity": "DEBUG", - "name": "*", - "debuglevel": 99 - } - ] - }, - "Auth": { - "database_file": "data/test_nonexistent_db.sqlite3", - "listen_on": [ { - "port": 56176, - "address": "127.0.0.1" - } ] - }, - "data_sources": { - "classes": { - "IN": [ - { - "type": "sqlite3", - "params": { - "database_file": "data/test_nonexistent_db.sqlite3" - } - } - ] - } - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/nsec3/nsec3_auth.config b/tests/lettuce/configurations/nsec3/nsec3_auth.config deleted file mode 100644 index d2a0643132..0000000000 --- a/tests/lettuce/configurations/nsec3/nsec3_auth.config +++ /dev/null @@ -1,36 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ - { - "severity": "DEBUG", - "name": "*", "debuglevel": 99 - } - ] - }, - "Auth": { - "datasources": [ - {"zones": [{"origin": "example.", "file": "configurations/nsec3/rfc5155-example.zone.signed"}], "type": "memory"}], - "listen_on": [{"port": 56176, "address": "0.0.0.0"} - ] - }, - "data_sources": { - "classes": { - "IN": [ - { - "type": "MasterFiles", - "cache-enable": true, - "params": { - "example.": "configurations/nsec3/rfc5155-example.zone.signed" - } - } - ] - } - }, - "Init": { - "components": { - "b10-auth": {"kind": "needed", "special": "auth"}, - "b10-cmdctl": {"kind": "needed", "special": "cmdctl"} - } - } -} diff --git a/tests/lettuce/configurations/nsec3/rfc5155-example.zone.signed b/tests/lettuce/configurations/nsec3/rfc5155-example.zone.signed deleted file mode 100644 index 4120224162..0000000000 --- a/tests/lettuce/configurations/nsec3/rfc5155-example.zone.signed +++ /dev/null @@ -1,72 +0,0 @@ -;; The example NSEC3-signed zone used in RFC5155. - -example. 3600 IN SOA ns1.example. bugs.x.w.example. 1 3600 300 3600000 3600 -example. 3600 IN RRSIG SOA 7 1 3600 20150420235959 20051021000000 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8iq4ZLlYWfUUbbAS41pG+6 8z81q1xhkYAcEyHdVI2LmKusbZsT0Q== -example. 3600 IN NS ns1.example. -example. 3600 IN NS ns2.example. -example. 3600 IN RRSIG NS 7 1 3600 20150420235959 20051021000000 40430 example. PVOgtMK1HHeSTau+HwDWC8Ts+6C8qtqd4pQJqOtdEVgg+MA+ai4fWDEh u3qHJyLcQ9tbD2vvCnMXjtz6SyObxA== -example. 3600 IN MX 1 xx.example. -example. 3600 IN RRSIG MX 7 1 3600 20150420235959 20051021000000 40430 example. GgQ1A9xs47k42VPvpL/a1BWUz/6XsnHkjotw9So8MQtZtl2wJBsnOQsa oHrRCrRbyriEl/GZn9Mto/Kx+wBo+w== -example. 3600 IN DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LUsAD0QPWU+wzt89epO6tH zkMBVDkC7qphQO2hTY4hHn9npWFRw5BYubE= -example. 3600 IN DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJj7IommWSpJABVfW8Q0rO vXdM6kzt+TAu92L9AbsUdblMFin8CVF3n4s= -example. 3600 IN RRSIG DNSKEY 7 1 3600 20150420235959 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31uzMZ/U/FpsUb8aC6QZS+ sTsJXnLnz7flGOsmMGQZf3bH+QsCtg== -example. 3600 IN NSEC3PARAM 1 0 12 AABBCCDD -example. 3600 IN RRSIG NSEC3PARAM 7 1 3600 20150420235959 20051021000000 40430 example. C1Gl8tPZNtnjlrYWDeeUV/sGLCyy/IHie2rerN05XSA3Pq0U3+4VvGWY WdUMfflOdxqnXHwJTLQsjlkynhG6Cg== -2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. 3600 IN A 192.0.2.127 -2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. 3600 IN RRSIG A 7 2 3600 20150420235959 20051021000000 40430 example. h6c++bzhRuWWt2bykN6mjaTNBcXNq5UuL5EdK+iDP4eY8I0kSiKaCjg3 tC1SQkeloMeub2GWk8p6xHMPZumXlw== -a.example. 3600 IN NS ns1.a.example. -a.example. 3600 IN NS ns2.a.example. -a.example. 3600 IN DS 58470 5 1 3079F1593EBAD6DC121E202A8B766A6A4837206C -a.example. 3600 IN RRSIG DS 7 2 3600 20150420235959 20051021000000 40430 example. XacFcQVHLVzdoc45EJhN616zQ4mEXtE8FzUhM2KWjfy1VfRKD9r1MeVG wwoukOKgJxBPFsWoo722vZ4UZ2dIdA== -ns1.a.example. 3600 IN A 192.0.2.5 -ns2.a.example. 3600 IN A 192.0.2.6 -ai.example. 3600 IN A 192.0.2.9 -ai.example. 3600 IN RRSIG A 7 2 3600 20150420235959 20051021000000 40430 example. hVe+wKYMlObTRPhX0NL67GxeZfdxqr/QeR6FtfdAj5+FgYxyzPEjIzvK Wy00hWIl6wD3Vws+rznEn8sQ64UdqA== -ai.example. 3600 IN HINFO "KLH-10" "ITS" -ai.example. 3600 IN RRSIG HINFO 7 2 3600 20150420235959 20051021000000 40430 example. Yi42uOq43eyO6qXHNvwwfFnIustWgV5urFcxenkLvs6pKRh00VBjODmf 3Z4nMO7IOl6nHSQ1v0wLHpEZG7Xj2w== -ai.example. 3600 IN AAAA 2001:db8::f00:baa9 -ai.example. 3600 IN RRSIG AAAA 7 2 3600 20150420235959 20051021000000 40430 example. LcdxKaCB5bGZwPDg+3JJ4O02zoMBrjxqlf6WuaHQZZfTUpb9Nf2nxFGe 2XRPfR5tpJT6GdRGcHueLuXkMjBArQ== -c.example. 3600 IN NS ns1.c.example. -c.example. 3600 IN NS ns2.c.example. -ns1.c.example. 3600 IN A 192.0.2.7 -ns2.c.example. 3600 IN A 192.0.2.8 -ns1.example. 3600 IN A 192.0.2.1 -ns1.example. 3600 IN RRSIG A 7 2 3600 20150420235959 20051021000000 40430 example. bu6kx73n6XEunoVGuRfAgY7EF/AJqHy7hj0jkiqJjB0dOrx3wuz9SaBe GfqWIdn/uta3SavN4FRvZR9SCFHF5Q== -ns2.example. 3600 IN A 192.0.2.2 -ns2.example. 3600 IN RRSIG A 7 2 3600 20150420235959 20051021000000 40430 example. ktQ3TqE0CfRfki0Rb/Ip5BM0VnxelbuejCC4zpLbFKA/7eD7UNAwxMgx JPtbdST+syjYSJaj4IHfeX6n8vfoGA== -*.w.example. 3600 IN MX 1 ai.example. -*.w.example. 3600 IN RRSIG MX 7 2 3600 20150420235959 20051021000000 40430 example. CikebjQwGQPwijVcxgcZcSJKtfynugtlBiKb9FcBTrmOoyQ4InoWVudh CWsh/URX3lc4WRUMivEBP6+4KS3ldA== -x.w.example. 3600 IN MX 1 xx.example. -x.w.example. 3600 IN RRSIG MX 7 3 3600 20150420235959 20051021000000 40430 example. IrK3tq/tHFIBF0scHiE/1IwMAvckS/55hAVvQyxTFbkAdDloP3NbZzu+ yoSsr3b3OX6qbBpY7WCtwwekLKRAwQ== -x.y.w.example. 3600 IN MX 1 xx.example. -x.y.w.example. 3600 IN RRSIG MX 7 4 3600 20150420235959 20051021000000 40430 example. MqSt5HqJIN8+SLlzTOImrh5h9Xa6gDvAW/GnnbdPc6Z7nXvCpLPJj/5l Cwx3VuzVOjkbvXze8/8Ccl2Zn2hbug== -xx.example. 3600 IN A 192.0.2.10 -xx.example. 3600 IN RRSIG A 7 2 3600 20150420235959 20051021000000 40430 example. T35hBWEZ017VC5u2c4OriKyVn/pu+fVK4AlXYOxJ6iQylfV2HQIKjv6b 7DzINB3aF/wjJqgXpQvhq+Ac6+ZiFg== -xx.example. 3600 IN HINFO "KLH-10" "TOPS-20" -xx.example. 3600 IN RRSIG HINFO 7 2 3600 20150420235959 20051021000000 40430 example. KimG+rDd+7VA1zRsu0ITNAQUTRlpnsmqWrihFRnU+bRa93v2e5oFNFYC s3Rqgv62K93N7AhW6Jfqj/8NzWjvKg== -xx.example. 3600 IN AAAA 2001:db8::f00:baaa -xx.example. 3600 IN RRSIG AAAA 7 2 3600 20150420235959 20051021000000 40430 example. IXBcXORITNwd8h3gNwyxtYFvAupS/CYWufVeuBUX0O25ivBCULjZjpDx FSxfohb/KA7YRdxENzYfMItpILl/Xw== -0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. 3600 IN NSEC3 1 1 12 AABBCCDD 2T7B4G4VSA5SMI47K61MV5BV1A22BOJR NS SOA MX RRSIG DNSKEY NSEC3PARAM -0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. 3600 IN RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKLIBHYH6blRxK9rC0bMJPw Q4mLIuw85H2EY762BOCXJZMnpuwhpA== -2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. 3600 IN NSEC3 1 1 12 AABBCCDD 2VPTU5TIMAMQTTGL4LUU9KG21E0AOR3S A RRSIG -2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. 3600 IN RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 40430 example. OmBvJ1Vgg1hCKMXHFiNeIYHK9XVW0iLDLwJN4TFoNxZuP03gAXEI634Y wOc4YBNITrj413iqNI6mRk/r1dOSUw== -2vptu5timamqttgl4luu9kg21e0aor3s.example. 3600 IN NSEC3 1 1 12 AABBCCDD 35MTHGPGCU1QG68FAB165KLNSNK3DPVL MX RRSIG -2vptu5timamqttgl4luu9kg21e0aor3s.example. 3600 IN RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 40430 example. KL1V2oFYghNV0Hm7Tf2vpJjM6l+0g1JCcVYGVfI0lKrhPmTsOA96cLEA Cgo1x8I7kApJX+obTuktZ+sdsZPY1w== -35mthgpgcu1qg68fab165klnsnk3dpvl.example. 3600 IN NSEC3 1 1 12 AABBCCDD B4UM86EGHHDS6NEA196SMVMLO4ORS995 NS DS RRSIG -35mthgpgcu1qg68fab165klnsnk3dpvl.example. 3600 IN RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQAynzo8EUWH+z6hEIBlUT PGj15eZll6VhQqgZXtAIR3chwgW+SA== -b4um86eghhds6nea196smvmlo4ors995.example. 3600 IN NSEC3 1 1 12 AABBCCDD GJEQE526PLBF1G8MKLP59ENFD789NJGI MX RRSIG -b4um86eghhds6nea196smvmlo4ors995.example. 3600 IN RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 40430 example. ZkPG3M32lmoHM6pa3D6gZFGB/rhL//Bs3Omh5u4m/CUiwtblEVOaAKKZ d7S959OeiX43aLX3pOv0TSTyiTxIZg== -gjeqe526plbf1g8mklp59enfd789njgi.example. 3600 IN NSEC3 1 1 12 AABBCCDD JI6NEOAEPV8B5O6K4EV33ABHA8HT9FGC A HINFO AAAA RRSIG -gjeqe526plbf1g8mklp59enfd789njgi.example. 3600 IN RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 40430 example. IVnezTJ9iqblFF97vPSmfXZ5Zozngx3KX3byLTZC4QBH2dFWhf6scrGF ZB980AfCxoD9qbbKDy+rdGIeRSVNyw== -ji6neoaepv8b5o6k4ev33abha8ht9fgc.example. 3600 IN NSEC3 1 1 12 AABBCCDD K8UDEMVP1J2F7EG6JEBPS17VP3N8I58H -ji6neoaepv8b5o6k4ev33abha8ht9fgc.example. 3600 IN RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 40430 example. gPkFp1s2QDQ6wQzcg1uSebZ61W33rUBDcTj72F3kQ490fEdp7k1BUIfb cZtPbX3YCpE+sIt0MpzVSKfTwx4uYA== -k8udemvp1j2f7eg6jebps17vp3n8i58h.example. 3600 IN NSEC3 1 1 12 AABBCCDD KOHAR7MBB8DC2CE8A9QVL8HON4K53UHI -k8udemvp1j2f7eg6jebps17vp3n8i58h.example. 3600 IN RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 40430 example. FtXGbvF0+wf8iWkyo73enAuVx03klN+pILBKS6qCcftVtfH4yVzsEZqu J27NHR7ruxJWDNMtOtx7w9WfcIg62A== -kohar7mbb8dc2ce8a9qvl8hon4k53uhi.example. 3600 IN NSEC3 1 1 12 AABBCCDD Q04JKCEVQVMU85R014C7DKBA38O0JI5R A RRSIG -kohar7mbb8dc2ce8a9qvl8hon4k53uhi.example. 3600 IN RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 40430 example. VrDXs2uVW21N08SyQIz88zml+y4ZCInTwgDr6zz43yAg+LFERjOrj3Oj ct51ac7Dp4eZbf9FQJazmASFKGxGXg== -q04jkcevqvmu85r014c7dkba38o0ji5r.example. 3600 IN NSEC3 1 1 12 AABBCCDD R53BQ7CC2UVMUBFU5OCMM6PERS9TK9EN A RRSIG -q04jkcevqvmu85r014c7dkba38o0ji5r.example. 3600 IN RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3ZxlMKimoPAyqletMlEWw LfFia7sdpSzn+ZlNNlkxWcLsIlMmUg== -r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. 3600 IN NSEC3 1 1 12 AABBCCDD T644EBQK9BIBCNA874GIVR6JOJ62MLHV MX RRSIG -r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. 3600 IN RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 40430 example. aupviViruXs4bDg9rCbezzBMf9h1ZlDvbW/CZFKulIGXXLj8B/fsDJar XVDA9bnUoRhEbKp+HF1FWKW7RIJdtQ== -t644ebqk9bibcna874givr6joj62mlhv.example. 3600 IN NSEC3 1 1 12 AABBCCDD 0P9MHAVEQVM6T7VBL5LOP2U3T2RP3TOM A HINFO AAAA RRSIG -t644ebqk9bibcna874givr6joj62mlhv.example. 3600 IN RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 40430 example. RAjGECB8P7O+F4Pa4Dx3tC0M+Z3KmlLKImcafb9XWwx+NWUNz7NBEDBQ HivIyKPVDkChcePIX1xPl1ATNa+8Dw== diff --git a/tests/lettuce/configurations/resolver/.gitignore b/tests/lettuce/configurations/resolver/.gitignore deleted file mode 100644 index 8d60553f57..0000000000 --- a/tests/lettuce/configurations/resolver/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/resolver_basic.config diff --git a/tests/lettuce/configurations/resolver/resolver_basic.config.orig b/tests/lettuce/configurations/resolver/resolver_basic.config.orig deleted file mode 100644 index 7f7004fb5f..0000000000 --- a/tests/lettuce/configurations/resolver/resolver_basic.config.orig +++ /dev/null @@ -1,31 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "severity": "DEBUG", - "name": "*", - "debuglevel": 99 - } ] - }, - "Resolver": { - "query_acl": [ { - "action": "REJECT", - "from": "127.0.0.1" - } ], - "listen_on": [ { - "port": 56176, - "address": "127.0.0.1" - } ] - }, - "Init": { - "components": { - "b10-resolver": { - "kind": "needed" - }, - "b10-cmdctl": { - "kind": "needed", - "special": "cmdctl" - } - } - } -} diff --git a/tests/lettuce/configurations/root.config.orig b/tests/lettuce/configurations/root.config.orig deleted file mode 100644 index 282b7d1075..0000000000 --- a/tests/lettuce/configurations/root.config.orig +++ /dev/null @@ -1,40 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "database_file": "data/root.sqlite3", - "listen_on": [ { - "port": 56176, - "address": "127.0.0.1" - } ] - }, - "data_sources": { - "classes": { - "IN": [ - { - "type": "sqlite3", - "cache-enable": false, - "params": { - "database_file": "data/root.sqlite3" - } - } - ] - } - }, - "Stats": { - "poll-interval": 60 - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-stats": { "address": "Stats", "kind": "dispensable" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/static.config.orig b/tests/lettuce/configurations/static.config.orig deleted file mode 100644 index 3f2049020a..0000000000 --- a/tests/lettuce/configurations/static.config.orig +++ /dev/null @@ -1,36 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [{ - "severity": "DEBUG", - "name": "*", - "debuglevel": 99 - }] - }, - "Auth": { - "listen_on": [{ - "port": 56176, - "address": "127.0.0.1" - }] - }, - "data_sources": { - "classes": { - "IN": [ - { - "type": "MasterFiles", - "cache-enable": true, - "params": { - "example.org": "data/example.org" - } - } - ] - } - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-stats": { "address": "Stats", "kind": "dispensable" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/xfrin/.gitignore b/tests/lettuce/configurations/xfrin/.gitignore deleted file mode 100644 index 0b03cd2f43..0000000000 --- a/tests/lettuce/configurations/xfrin/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/retransfer_master.conf -/retransfer_master_nons.conf -/retransfer_slave.conf -/retransfer_slave_notify.conf diff --git a/tests/lettuce/configurations/xfrin/inmem_slave.conf b/tests/lettuce/configurations/xfrin/inmem_slave.conf deleted file mode 100644 index 4f6ac1788e..0000000000 --- a/tests/lettuce/configurations/xfrin/inmem_slave.conf +++ /dev/null @@ -1,41 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "database_file": "data/inmem-xfrin.sqlite3", - "listen_on": [ { - "address": "::1", - "port": 56176 - } ] - }, - "data_sources": { - "classes": { - "IN": [ - { - "type": "sqlite3", - "params": { - "database_file": "data/inmem-xfrin.sqlite3" - }, - "cache-enable": true, - "cache-zones": [ - "example.org" - ] - } - ] - } - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-xfrin": { "address": "Xfrin", "kind": "dispensable" }, - "b10-zonemgr": { "address": "Zonemgr", "kind": "dispensable" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/xfrin/retransfer_master.conf.orig b/tests/lettuce/configurations/xfrin/retransfer_master.conf.orig deleted file mode 100644 index f3529fccfe..0000000000 --- a/tests/lettuce/configurations/xfrin/retransfer_master.conf.orig +++ /dev/null @@ -1,45 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "database_file": "data/example.org.sqlite3", - "listen_on": [ { - "address": "::1", - "port": 56177 - } ] - }, - "data_sources": { - "classes": { - "IN": [{ - "type": "sqlite3", - "params": { - "database_file": "data/example.org.sqlite3" - } - }] - } - }, - "Xfrout": { - "zone_config": [ { - "origin": "example.org" - } ], - "also_notify": [ { - "address": "::1", - "port": 56176 - } ] - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-xfrout": { "address": "Xfrout", "kind": "dispensable" }, - "b10-zonemgr": { "address": "Zonemgr", "kind": "dispensable" }, - "b10-stats": { "address": "Stats", "kind": "dispensable" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/xfrin/retransfer_master_diffs.conf b/tests/lettuce/configurations/xfrin/retransfer_master_diffs.conf deleted file mode 100644 index d25f69cd91..0000000000 --- a/tests/lettuce/configurations/xfrin/retransfer_master_diffs.conf +++ /dev/null @@ -1,47 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "database_file": "data/xfrin-diffs.sqlite3", - "listen_on": [ { - "address": "::1", - "port": 56177 - } ] - }, - "data_sources": { - "classes": { - "IN": [{ - "type": "sqlite3", - "params": { - "database_file": "data/xfrin-diffs.sqlite3" - } - }] - } - }, - "Xfrout": { - "zone_config": [ { - "origin": "example." - } ], - "also_notify": [ { - "address": "::1", - "port": 56176 - } ] - }, - "Stats": { - "poll-interval": 1 - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-xfrout": { "address": "Xfrout", "kind": "dispensable" }, - "b10-zonemgr": { "address": "Zonemgr", "kind": "dispensable" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/xfrin/retransfer_master_nons.conf.orig b/tests/lettuce/configurations/xfrin/retransfer_master_nons.conf.orig deleted file mode 100644 index ecb9e054c5..0000000000 --- a/tests/lettuce/configurations/xfrin/retransfer_master_nons.conf.orig +++ /dev/null @@ -1,48 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "database_file": "data/example.org-nons.sqlite3", - "listen_on": [ { - "address": "::1", - "port": 56177 - } ] - }, - "data_sources": { - "classes": { - "IN": [{ - "type": "sqlite3", - "params": { - "database_file": "data/example.org-nons.sqlite3" - } - }] - } - }, - "Xfrout": { - "zone_config": [ { - "origin": "example.org" - } ], - "also_notify": [ { - "address": "::1", - "port": 56176 - } ] - }, - "Stats": { - "poll-interval": 1 - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-xfrout": { "address": "Xfrout", "kind": "dispensable" }, - "b10-zonemgr": { "address": "Zonemgr", "kind": "dispensable" }, - "b10-stats": { "address": "Stats", "kind": "dispensable" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/xfrin/retransfer_master_v4.conf.orig b/tests/lettuce/configurations/xfrin/retransfer_master_v4.conf.orig deleted file mode 100644 index 5eca05fc22..0000000000 --- a/tests/lettuce/configurations/xfrin/retransfer_master_v4.conf.orig +++ /dev/null @@ -1,45 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "database_file": "data/example.org.sqlite3", - "listen_on": [ { - "address": "127.0.0.1", - "port": 56179 - } ] - }, - "data_sources": { - "classes": { - "IN": [{ - "type": "sqlite3", - "params": { - "database_file": "data/example.org.sqlite3" - } - }] - } - }, - "Xfrout": { - "zone_config": [ { - "origin": "example.org" - } ], - "also_notify": [ { - "address": "127.0.0.1", - "port": 56176 - } ] - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-xfrout": { "address": "Xfrout", "kind": "dispensable" }, - "b10-zonemgr": { "address": "Zonemgr", "kind": "dispensable" }, - "b10-stats": { "address": "Stats", "kind": "dispensable" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/xfrin/retransfer_slave.conf.orig b/tests/lettuce/configurations/xfrin/retransfer_slave.conf.orig deleted file mode 100644 index 6c32f48ded..0000000000 --- a/tests/lettuce/configurations/xfrin/retransfer_slave.conf.orig +++ /dev/null @@ -1,34 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "listen_on": [ { - "address": "::1", - "port": 56176 - } ] - }, - "data_sources": { - "classes": { - "IN": [{ - "type": "sqlite3", - "params": { - "database_file": "data/test_nonexistent_db.sqlite3" - } - }] - } - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-xfrin": { "address": "Xfrin", "kind": "dispensable" }, - "b10-zonemgr": { "address": "Zonemgr", "kind": "dispensable" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/xfrin/retransfer_slave_diffs.conf b/tests/lettuce/configurations/xfrin/retransfer_slave_diffs.conf deleted file mode 100644 index acaf9219f5..0000000000 --- a/tests/lettuce/configurations/xfrin/retransfer_slave_diffs.conf +++ /dev/null @@ -1,41 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "listen_on": [ { - "address": "::1", - "port": 56176 - } ] - }, - "Xfrin": { - "zones": [ { - "name": "example", - "master_addr": "::1", - "master_port": 56177 - } ] - }, - "data_sources": { - "classes": { - "IN": [{ - "type": "sqlite3", - "params": { - "database_file": "data/xfrin-before-diffs.sqlite3" - } - }] - } - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-xfrin": { "address": "Xfrin", "kind": "dispensable" }, - "b10-zonemgr": { "address": "Zonemgr", "kind": "dispensable" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/xfrin/retransfer_slave_notify.conf.orig b/tests/lettuce/configurations/xfrin/retransfer_slave_notify.conf.orig deleted file mode 100644 index 4076ea5ce6..0000000000 --- a/tests/lettuce/configurations/xfrin/retransfer_slave_notify.conf.orig +++ /dev/null @@ -1,49 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "listen_on": [ { - "address": "::1", - "port": 56176 - } ] - }, - "data_sources": { - "classes": { - "IN": [{ - "type": "sqlite3", - "params": { - "database_file": "data/xfrin-notify.sqlite3" - } - }] - } - }, - "Xfrin": { - "zones": [ { - "name": "example.org", - "master_addr": "::1", - "master_port": 56177, - "request_ixfr": "no" - } ] - }, - "Zonemgr": { - "secondary_zones": [ { - "name": "example.org", - "class": "IN" - } ] - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-xfrin": { "address": "Xfrin", "kind": "dispensable" }, - "b10-zonemgr": { "address": "Zonemgr", "kind": "dispensable" }, - "b10-stats": { "address": "Stats", "kind": "dispensable" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/xfrin/retransfer_slave_notify_v4.conf b/tests/lettuce/configurations/xfrin/retransfer_slave_notify_v4.conf deleted file mode 100644 index 5d44a002b4..0000000000 --- a/tests/lettuce/configurations/xfrin/retransfer_slave_notify_v4.conf +++ /dev/null @@ -1,49 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "listen_on": [ { - "address": "127.0.0.1", - "port": 56176 - } ] - }, - "data_sources": { - "classes": { - "IN": [{ - "type": "sqlite3", - "params": { - "database_file": "data/xfrin-notify.sqlite3" - } - }] - } - }, - "Xfrin": { - "zones": [ { - "name": "example.org", - "master_addr": "127.0.0.1", - "master_port": 56179, - "request_ixfr": "no" - } ] - }, - "Zonemgr": { - "secondary_zones": [ { - "name": "example.org", - "class": "IN" - } ] - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-xfrin": { "address": "Xfrin", "kind": "dispensable" }, - "b10-zonemgr": { "address": "Zonemgr", "kind": "dispensable" }, - "b10-stats": { "address": "Stats", "kind": "dispensable" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/configurations/xfrout_master.conf b/tests/lettuce/configurations/xfrout_master.conf deleted file mode 100644 index da5381cd21..0000000000 --- a/tests/lettuce/configurations/xfrout_master.conf +++ /dev/null @@ -1,41 +0,0 @@ -{ - "version": 3, - "Logging": { - "loggers": [ { - "debuglevel": 99, - "severity": "DEBUG", - "name": "*" - } ] - }, - "Auth": { - "database_file": "data/xfrout.sqlite3", - "listen_on": [ { - "address": "::1", - "port": 56176 - } ] - }, - "data_sources": { - "classes": { - "IN": [{ - "type": "sqlite3", - "params": { - "database_file": "data/xfrout.sqlite3" - } - }] - } - }, - "Xfrout": { - "zone_config": [ { - "origin": "example.org" - } ] - }, - "Init": { - "components": { - "b10-auth": { "kind": "needed", "special": "auth" }, - "b10-xfrout": { "address": "Xfrout", "kind": "dispensable" }, - "b10-zonemgr": { "address": "Zonemgr", "kind": "dispensable" }, - "b10-stats": { "address": "Stats", "kind": "dispensable" }, - "b10-cmdctl": { "special": "cmdctl", "kind": "needed" } - } - } -} diff --git a/tests/lettuce/data/.gitignore b/tests/lettuce/data/.gitignore deleted file mode 100644 index da78834b65..0000000000 --- a/tests/lettuce/data/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -/inmem-xfrin.sqlite3 -/root.sqlite3 -/test_nonexistent_db.sqlite3 -/xfrin-before-diffs.sqlite3 -/xfrin-notify.sqlite3 diff --git a/tests/lettuce/data/commands/bad_command b/tests/lettuce/data/commands/bad_command deleted file mode 100644 index 2daa7cbf8d..0000000000 --- a/tests/lettuce/data/commands/bad_command +++ /dev/null @@ -1,9 +0,0 @@ -!echo shouldshow -# just add something so the test can verify it's reverted -config add /Init/components b10-auth -config set /Init/components/b10-auth/kind needed -config set /Init/components/b10-auth/special auth -bad command -# this should not be reached -!echo shouldnotshow -config commit diff --git a/tests/lettuce/data/commands/directives b/tests/lettuce/data/commands/directives deleted file mode 100644 index 4fe10f514a..0000000000 --- a/tests/lettuce/data/commands/directives +++ /dev/null @@ -1,19 +0,0 @@ -# this is a comment: commentexample1 -!echo this is an echo: echoexample2 -!verbose on -# this is a comment with verbose on: verbosecommentexample3 -!verbose off -# this is a comment with verbose off again: commentexample4 -# empty lines and lines with only whitespace should be ignored - - - - - -# directives are case insensitive, and should handle whitespace -!ECHO echoexample5 -!eChO echoexample6 -!Verbose ON -# verbosecommentexample7 -!verBOSE off -# commentexample8 diff --git a/tests/lettuce/data/commands/empty b/tests/lettuce/data/commands/empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/lettuce/data/commands/nested b/tests/lettuce/data/commands/nested deleted file mode 100644 index c15369469d..0000000000 --- a/tests/lettuce/data/commands/nested +++ /dev/null @@ -1,2 +0,0 @@ -# include a different file -execute file data/commands/nested1 diff --git a/tests/lettuce/data/commands/nested1 b/tests/lettuce/data/commands/nested1 deleted file mode 100644 index 8f984d5a70..0000000000 --- a/tests/lettuce/data/commands/nested1 +++ /dev/null @@ -1,2 +0,0 @@ -# this is included by nested -!echo shouldshow diff --git a/tests/lettuce/data/ddns/.gitignore b/tests/lettuce/data/ddns/.gitignore deleted file mode 100644 index 60c9224777..0000000000 --- a/tests/lettuce/data/ddns/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/example.org.sqlite3 diff --git a/tests/lettuce/data/ddns/example.org.sqlite3.orig b/tests/lettuce/data/ddns/example.org.sqlite3.orig deleted file mode 100644 index 427fa24d57b1d8a50a194c9e04dd006c5221f214..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 15360 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 V0RR91AX&iw{{R5%9{_;l@dt!NY`_2j diff --git a/tests/lettuce/data/example.com-broken b/tests/lettuce/data/example.com-broken deleted file mode 100644 index ceef6c3497..0000000000 --- a/tests/lettuce/data/example.com-broken +++ /dev/null @@ -1,11 +0,0 @@ -example.com. 3600 IN SOA ns1.example.com. admin.example.com. 1234 3600 1800 2419200 7200 -example.com. 3600 IN NS ns1.example.com. -example.com. 3600 IN NS ns2.example.com. -example.com. 3600 IN MX 10 mail.example.com. -www.example.com. 3600 IN A 192.0.2.1 -ns1.example.com. 3600 IN A 192.0.2.3 -ns2.example.com. 3600 IN A 192.0.2.4 - -;; DNAME + NS (non-apex) throws ZoneDataUpdater::AddError -ns1.example.com. 3600 IN DNAME foo.example.com. -ns1.example.com. 3600 IN NS bar.example.com. diff --git a/tests/lettuce/data/example.net-empty b/tests/lettuce/data/example.net-empty deleted file mode 100644 index 8b13789179..0000000000 --- a/tests/lettuce/data/example.net-empty +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/lettuce/data/example.org b/tests/lettuce/data/example.org deleted file mode 100644 index 77f8f53152..0000000000 --- a/tests/lettuce/data/example.org +++ /dev/null @@ -1,13 +0,0 @@ -example.org. 3600 IN SOA ns1.example.org. admin.example.org. 1234 3600 1800 2419200 7200 -example.org. 3600 IN NS ns1.example.org. -example.org. 3600 IN NS ns2.example.org. -example.org. 3600 IN MX 10 mail.example.org. -www.example.org. 3600 IN A 192.0.2.1 -mail.example.org. 3600 IN A 192.0.2.10 -sub.example.org. 3600 IN NS ns.sub.example.org. -ns.sub.example.org. 3600 IN A 192.0.2.101 -dname.example.org. 3600 IN DNAME dname.example.info. -dname2.foo.example.org. 3600 IN DNAME dname2.example.info. -ns1.example.org. 3600 IN A 192.0.2.3 -ns2.example.org. 3600 IN A 192.0.2.4 -shell.example.org. 3600 IN SSHFP 2 1 123456789abcdef67890123456789abcdef67890 diff --git a/tests/lettuce/data/example.org-nons.sqlite3 b/tests/lettuce/data/example.org-nons.sqlite3 deleted file mode 100644 index 40ddbf69fd9d84af941e6fb96253d0685bf5cbd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 15360 zc-rk-O>7%Q6rS1H&5!fvkhZHTsF|j?iD~S3z4>Vyg1SlF)UAI~+X?9D6ck^MD2rf-@Kc07l8xrd$-cy2ypVHbGFHMuFo& z4?6I+aU zJm~XDod^WSg|MfnT)JApOlGCBo~2`%YgemMAtsj8qLqv$7R^NUs_f@b9cyFZTp}5Z zuS-@H=jN|Te-7etVBhzj3_?qIVVi{BDlvJ=qcWTSW*<@3wSIT^m&B9Hc(#DWuJw0tlbW;$wLi9gK8%|DJR@&4TOv6IOQY| z{r#j1N14@VV#N?cZq%qBa^$qPfi7lkZOu?pYEuiI?jv$G8|n2RV_C2 z=#i|YRWtN*rE+eq+=)u%c#Yg{d~db>eivJe8fO8r96&mtZcSs+{oQ9mqLwwzXE)41Y3qKnrn@77neYf5?yz7vf=gO$O3 z2yw7*{oz{BZ9s#k06e80P#?i8%bGrejuEx{R%ywHA!g?vXnjNiecvYp6Yywj0f_hbecjHjAoX&U`6-j5H zouxAjO_GarM?5nT!#KB+k|@nnH2aWGHIx?3XBA|w0^M=~K?7hv*HkKf&{BE&V8kM) z4>qQB=>vKv>4QoPsAL67ap`gb<>UY4)p@=4@&9crThP6n|G$GCp%2IoU>^BR|8J7% z|F`|W{^P_Ux%wg-f0v$Fs_&Qlf5BIZQ*zY?p<~%q7k(IUlDk(|SG#3UWAIY^uMT_; z;9Uw*5$ZeiH7S&$4NGG#8!O67lI*36xNx~@hn|X{pWj;XlVoA!$&$Vt6_=&o8_Wwi zy$PLO%dYjxPOS1>!%qEbx&rTLwJefz+}cLS z?(tG<9ebh^UeV#DRe%i!fawB6xyHWIR?m)h!fcBUQ?kQcG#Q&ygSQ%hYnioLAl-J72O@Rt9D2FcZFv(MpZXU zhEz-;746dd-vn*}bQ_(a{-oZaUW1R}k1z$>z!#+Y8BtGDBY+fibWkiq{|Yke8O>Kp zWG2#T?IufP_pHStG1@w)Y?H*P<_ZUeR%?ZExRVBPxY z#gLE~@;)qLNRYE*ow^_Qs~+c&K|gvJ)r8(JHKDYoBcRqDnMG>+pQ|3IQT}X}(%^%d z<3lz6PgVDSpk)4U8IaQ?lT6wp${vIb0Q#3G_HCwIP`+Hd=H-^s7M^jQ!{l(|Xmoyl zVIda7?#S@iz{J3GSQrfZy#vD+hdBTA;Mg=LxZPvH3n47vP$=x3klueloAYCmN&As< z`Ts|NoFa8BOf|D9w&Q`Cs}NWdUBKS+0;n$psvu z+Z<3RNK722+jwntJ~hG8ZT;GoTpmK{qV#|Hn$i343A}4QF8^t&Rp57jhRx0Fi7tEc EFU?`OPXGV_ diff --git a/tests/lettuce/data/example.org.sqlite3 b/tests/lettuce/data/example.org.sqlite3 deleted file mode 100644 index f79a4e27f11f69d9cabaebacd8647c636db6e7ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 15360 zc-rk-O-vg{6rS1Hgb2^j$|+J$RS#9vLwiV7srR;0oAy#Es&Yzu$*oa@B6ViH!0y_Mje)2Q`|vKF zH}l@izWMpyz6Y@@!E`=_=d-!xL>`NP1rUOB7y|%?$4kvZb0kkAFwOBeUh!`+uGnqC-RBerBp68m(3+51;+@Vl>9k*5U4rFN$f%HsTt|t-i5I-kZ+=`IuyqNe6{Eh#+J@6L<`) z;1)zPsEc{Re9gSaoP*EdcTj?_fm@_!s+1!GBZIo^H zSj3l+1edx2P9&Gp87)ijiv3s|^mwpvirl>Y!f7x0Jw$HkGcdUG;l;cS01gi`JQ(1T z6fL~2`E1r@G*DWnG_%>yhkYTxQrc*c&dg_B7X_kJ5QtK-sMJtju~w~0tLaS-(IkpY zGdRIzB$xEgtf4AeN1E8|K4KG>$K`bi9>M1(@=hnyLPk3+~z?7bPZb1N$=hLW^SEqJD{L0&U0WKxWmOlV5*;F1vy_HM{Jw~?h! zDr)6=s+IF<DWAS*$PK4(Ko7K3R@$l5EbVXSYvB}H6njW0a$i- z0K3rrg4~l@aiV5isu2fwg}pW6{VrULJ#cV#>tpSmx3^Pg^mP=1p7GP6i@r(!mC4Xx zd}wkcI1r4Cdnd%WH##oHBOyrlzZGGC{z5;Jy?zIMj8@ToG>a~w0fZ4Y&rOpK4jm~) zP2`07!^%mS`h&pDBN3K4AUsEq8)YBu+p!SHf2Xc-M|L%IS;`QJHiG+F3fo z&?Lo3cicY}H;i*DDT(ddl+8YDq#Cvt-N-7)txEcq69^gwjtkc9(g#h|rw@iLa{6Fx zLYF>ZcalD+#(+vzV7pejoIvIHKiN8O?|uA#%gUSh|B&GSec}N;L7x&2U>1c;{5Q$O ze+u>bmlG$2`ZA8cN8gz8-4y>z-cno?strQNGE|qo7zh;Z)$Be!qgT)9(K8%+hDhUo zb>IsC?=g^xGe4kjNntx$vosX5v66fw$tYb0!e!PDk&0-)xOw7d$iXO*BYiO;Ez<96 z+$+U?)4F~wyY5#8vFg2so#JY)3Uo9A)>2puH`VcuHn<=gN%062+l0$gElx23>#^W-q&vN#*v>bt>x}wWz!!{az6{jZxLr z)R2lPXwgCUzZHB0&|P$n`IGs8c?&*;Kf^3+244~O3!*M-1Aq*4wlX}&{toi1dCgl& zd@63UcaS5pW7=Y&4Le(zf|a&Zw~9r4HhYzExKjpkxakJ9{@-A&`iG44AJXUtd#(Ru zy<$j64EX?-F(fG3u}(dX2Q@$Epusr0IMswc*lt2u%|O6j4`dpt_5WJ)gAN$!XEgf3 zp6iEd{lC;aexty1G5@y+(4y)6nPk#_QQ-(Y1Yl@^;os*f1?4N%Yc@AcTlhys0h1pu zP9$b$=jM`0?2QkN^pEvV#(V>@P@sS4@}Ll!92l7td|vNJ1DvNP+w94m?9x3VprI(}~%UQZdGL*|91G_m{REI$n8zw|N60=&xd zLTL*n7jTqqc0ylCV&WLvENa;ssR^EKc57>jc?iW8^ndvp(I@a3yk{<#|1|AY;P+sL L&CTqIE_?DXpe_|7 diff --git a/tests/lettuce/data/generate.zone b/tests/lettuce/data/generate.zone deleted file mode 100644 index f558372401..0000000000 --- a/tests/lettuce/data/generate.zone +++ /dev/null @@ -1,4 +0,0 @@ -$ORIGIN example.org. -example.org. 3600 IN SOA ns1.example.org. admin.example.org. 12341 3600 1800 2419200 7200 -$GENERATE 1-2 @ NS ns$.example.org. -$GENERATE 1-4 host$ A 192.0.2.$ diff --git a/tests/lettuce/data/glue.sqlite3 b/tests/lettuce/data/glue.sqlite3 deleted file mode 100644 index a527de8e4380bfa38782c3c071882ee4b69d5744..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 17408 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%0DQxKL9MOkG|}GG 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 I@T~;@4^qPh3GD|0#Kw@g_u9{n z^X^SwqL#vZPyBA~JLkOP`|-{_=iGDU^ulZdZ5c{BvldT2)@D>zQ;7s^L^8D+O~<&;)eib#qfxfkvRa{W{pkaJMZL7K z^HDp!DdZZt-CyNDkNdo{UYIRa3dR@csMfRV*J;05-O-wFNhO>2%4vG* z-+mUkyk0MSF3l#KkywGdCcE{>ex~}svscKMbM^XN9#zi8&POjLGRmoV@)W-Tg-X3{ zZ{kRYK~zzH#g2vGeW0jmJNjlYOP=&$GvR6x`4xA0r=A{+*{!B+`! zZ#X+W0HCg85155pYOPvroT(c%y5gu6qrt8&Q zByjdbXEf}~2!wT2Qv)F~B;ojRvlRh&#fF3{yGBEg%6d=i+nJyZ8v-`k9SQ_kr$Vub&g)vVA)#pLPp}w?6qm<4J+Uu_O%C}Bh5{=` zOaXpq*brc}1q3xR7CL$1w5I+4J0Kqk5+w8j3_vIFj6yY@WcHs$_Yx#X=)EwYvo|+J z_vWw*y@%dH-$qpwMk9B;Uf(;j?(Dv4dGH9zF44S4KNd(z*=+>m4VFv|=$#e5JtShfIf0hdCQEau$z#J*OK@m;6&6 zvpv)MkQE3osi6P~5kkHZ^1R1`M@d^$)%9nPOmjSY->`*?-HdAtY|j!lc=1L$73J_Lm3pIGP|1C%UfQUf*`TUW-BK0u_G+50Eong|u%u~9 zm|P1Q-N~OOMgJJJ{|@8>$cJ7^in1jPm;%;j3qPN9pn9F6%5sqX#Td)_`u3W+0^8)9G_DZfCww+v|`aebt zJAN5o$7y^<+J9;PrTzc7+y4-)E-i#Kw*Th@?*i~H{D5fucd?sz053jp7r=3IVwh$5 zzk)eg{yzIz{(B{duJuA2Zp#YT;Nd3s%}oB@kD5t)#$~lYG(X=Zz@HrH^ZF;@1~VY7 zuD5JN>+VRG5$R^3W~4n{%#d945Cc64ukMmp+aYjVAh2eU$T0r$A(!{jNw__{OD64T zHdiTRcM6{n2=8X@{uVZ{t*P;E*GHSj3}Wm}sSpFKv!eS<2}2#^9ofv)H}5iu)n_V3 z?f$(Zyw^bP|4ES0yWp1kFF``D13lME4+M^o%R`q18UM@pU&jBv5&t9fIzX?Zf68T0 z!v8v)KfGh#o5kWJ#;2h*s}FW<0_-Hyz`qr`(_8;d=U6k^FR^H!C3slj?uzyq>LAg+ zIMuO7w#L>zQq4xBFWMyF$Nvz&1;|H&1PT8?usUOUrTaN|Z+fMLydH_@^K$=Bf`r}$ zss9or^tS%Hzy*L_Mt?*p_!0aDc!}IT@c67Zv$6l(jQ4#=+289^1^4Qhn>+?0c;nnG z{{Ik=j|2%4dIp@>163&Z|0GE0-Tgmm|7YNBV*l~q@cZ~r_zwOJ{w4ky{we+m{t>=~ ze~4ehFXAuZ0#4u%K8_veFX$KOZS)HII%=TLpmS&r9U*bU?}-oz4-~vu=e-Cs0{k?^ zbF$ou06#_XoDBQJ0{jVz=bTMAF2GMxJm-|cLlnVE;?Kj7O$ z*I&Y4CYt^@*6;-S2;D*NpdX+Yh@O8MMbHTZ;P2qC;m_ea@W=2?_jILrz* zE9kgmT!+-}yv;& sRw4m~tVIF}S#<;yvhD~dWQ7q>$QmP{kX1%NA?u8QLRK09g{&$60sTKAJ^%m! diff --git a/tests/lettuce/data/static.zone b/tests/lettuce/data/static.zone deleted file mode 100644 index 51525dbdc5..0000000000 --- a/tests/lettuce/data/static.zone +++ /dev/null @@ -1,3 +0,0 @@ -BIND. 3600 CH SOA BIND. BIND. 3 3600 300 36000 3600 -BIND. 3600 CH NS BIND. -VERSION.BIND. 3600 CH TXT "10" diff --git a/tests/lettuce/data/xfrin-before-diffs.sqlite3.orig b/tests/lettuce/data/xfrin-before-diffs.sqlite3.orig deleted file mode 100644 index 45bf77d22f7622e230d73327625926acc065b42c..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 15360 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

??b_7Dv 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

Vqz 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 P+`e&jB3~qal-v8iAe}0w diff --git a/tests/lettuce/data/xfrin-notify.sqlite3.orig b/tests/lettuce/data/xfrin-notify.sqlite3.orig deleted file mode 100644 index 3c38322c08beb1e4f803c5dbd629adf75b1806ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 13312 zc-rk+OKclO7@pbj#)(4`hqPUxRAO2%sT03;H;=wzSO~8>Lva zwiZifsQv@+8bF_+x6uMR&i%-}$1QS4;HSjMa8Rtu0RTfGZU8j8cx%dy?{>L2n9nK| zU5r^BuvXkGSL`NHlCeCVNMP|aIZ3198HxN(kW*gj0&sGY6Tlc>tZ17hDYjaz#=Lqo z>P)xZ;7mqIt7d82p`dnpgh`gUKJWxz(PR4a%brw5 z9dYRmDkQpCA|}Pegs8+x`)HKwCnMRfac?k_cj@Cyj8MemWC$ntO|87)$w4b^-9H`a zqLbK9lIuN(=>;)?TbRd3w%bPcXlsmEwznH@x1D5f7jCzm{dQ|U|JMOI7#JAt6B#?SCodZM?*?xG^gcSz z{lLA-U4y^FFJTq-fe(rKU&2r~S-m(I9pD7s_bsSz)on2r77D$=ljPxbaxoAv976+K zqucPbdXa}|Z?MhB>1mJW>0+0a{~LHv{s}MsP8&ZsZ2qVGW+EX;cHb4_24)3kKk

9HqO?y<&BcQvR>NMmR=~;^m4UgFLBd3RVk>rpiHGyY_G$o zwl9*If_hQS;Y_xGGjpj_1e1HFT5GZ68TEoPmnz^yxG~B31wnwf=I9t+s#Z!mJt13< z)Pzr!i#uGixnx?&UB_3{>k(|cBH)6$P}uEaI-5!v?K9bFC9g(st+=wG>H3~tJL4Kk zW`-iTSkd*;3ZBYlQ>v128~v?g$S({I!q*WUeXX=otrd0i$7hScG+)ZLT z(Y4`IuWz`J*NXLQ->{TYC1^N-YaeOMyaON-Rs&}Kx%D7?3Jw6 zJOt?b|2;qs1_p))8$lGZy+ZJY{sU+XpkLAF=o9n-dKbNkw$L)VOpFW+3@%$~C<>kX z3~>R;&}IK2aTLX2%l1IbDMZ<6h&T-+PQ$R%5FSL6&|?=!I)+5px|t*H=>H!2-dq9R zq54lV{WCDQ!jQVl-etmA7o7IEq5qbB#+V^hkDXa6)z)2B(U7~?Ne;d{9I20}2ORculdeEm_F$+w7mz}Fvg*hgG! z!!EWkwWSwq3O?ZzCL#Sdh1cS6+$V^w9_AA9n6FQUirdm8`1<1Zn&vvxeE', optional): this configuration - will be used. The path is relative to the base lettuce - directory. - cmdctl_port ('with cmdctl port ', optional): The port on which - b10-cmdctl listens for bindctl commands. Defaults to 56175. - msgq_sockfile ('with msgq socket file', optional): The msgq socket file - that will be used for internal communication - process_name ('as ', optional). This is the name that can be used - in the following steps of the scenario to refer to this - BIND 10 instance. Defaults to 'bind10'. - This call will block until BIND10_STARTUP_COMPLETE or BIND10_STARTUP_ERROR - is logged. In the case of the latter, or if it times out, the step (and - scenario) will fail. - It will also fail if there is a running process with the given process_name - already. - """ - args = [ 'bind10', '-v' ] - if config_file is not None: - args.append('-p') - args.append("configurations/") - args.append('-c') - args.append(config_file) - if cmdctl_port is None: - args.append('--cmdctl-port=56175') - else: - args.append('--cmdctl-port=' + cmdctl_port) - if process_name is None: - process_name = "bind10" - else: - args.append('-m') - args.append(process_name + '_msgq.socket') - - world.processes.add_process(step, process_name, args) - - # check output to know when startup has been completed - (message, line) = world.processes.wait_for_stderr_str(process_name, - ["BIND10_STARTUP_COMPLETE", - "BIND10_STARTUP_ERROR"]) - assert message == "BIND10_STARTUP_COMPLETE", "Got: " + str(line) - -@step('wait for bind10 auth (?:of (\w+) )?to start') -def wait_for_auth(step, process_name): - """Wait for b10-auth to run. This is done by blocking until the message - AUTH_SERVER_STARTED is logged. - Parameters: - process_name ('of ') string to look for - exactly ('exactly'): Make an exact match delimited by whitespace - """ - if stderr is None: - output = world.last_bindctl_stdout - else: - output = world.last_bindctl_stderr - found = False - if exactly is None: - if string in output: - found = True - else: - if re.search(r'^\s+' + string + r'\s+', output, re.IGNORECASE | re.MULTILINE) is not None: - found = True - if notv is None: - assert found == True, "'" + string +\ - "' was not found in bindctl output:\n" +\ - output - else: - assert not found, "'" + string +\ - "' was found in bindctl output:\n" +\ - output - -def parse_bindctl_output_as_data_structure(): - """Helper function for data-related command tests: evaluates the - last output of bindctl as a data structure that can then be - inspected. - If the bindctl output is not valid (json) data, this call will - fail with an assertion failure. - If it is valid, it is parsed and returned as whatever data - structure it represented. - """ - # strip any extra output after a character that commonly terminates a valid - # JSON expression, i.e., ']', '}' and '"'. (The extra output would - # contain 'Exit from bindctl' message, and depending on environment some - # other control-like characters...but why is this message even there?) - # Note that this filter is not perfect. For example, it cannot recognize - # a simple expression of true/false/null. - output = re.sub("(.*)([^]}\"]*$)", r"\1", world.last_bindctl_stdout) - try: - return json.loads(output) - except ValueError as ve: - assert False, "Last bindctl output does not appear to be a " +\ - "parseable data structure: '" + output + "': " + str(ve) - -def find_process_pid(step, process_name): - """Helper function to request the running processes from Init, and - return the pid of the process with the given process_name. - Fails with an assert if the response from b10-init is not valid JSON, - or if the process with the given name is not found. - """ - # show_processes output is a list of lists, where the inner lists - # are of the form [ pid, "name" ] - # Not checking data form; errors will show anyway (if these turn - # out to be too vague, we can change this) - step.given('send bind10 the command Init show_processes') - running_processes = parse_bindctl_output_as_data_structure() - - for process in running_processes: - if process[1] == process_name: - return process[0] - assert False, "Process named " + process_name +\ - " not found in output of Init show_processes"; - -@step("remember the pid of process ([\S]+)") -def remember_pid(step, process_name): - """Stores the PID of the process with the given name as returned by - Init show_processes command. - Fails if the process with the given name does not appear to exist. - Stores the component_name->pid value in the dict world.process_pids. - This should only be used by the related step - 'the pid of process should (not) have changed' - Arguments: - process name ('process ') the name of the component to store - the pid of. - """ - if world.process_pids is None: - world.process_pids = {} - world.process_pids[process_name] = find_process_pid(step, process_name) - -@step('pid of process ([\S]+) should not have changed') -def check_pid(step, process_name): - """Checks the PID of the process with the given name as returned by - Init show_processes command. - Fails if the process with the given name does not appear to exist. - Fails if the process with the given name exists, but has a different - pid than it had when the step 'remember the pid of process' was - called. - Fails if that step has not been called (since world.process_pids - does not exist). - """ - assert world.process_pids is not None, "No process pids stored" - assert process_name in world.process_pids, "Process named " +\ - process_name +\ - " was not stored" - pid = find_process_pid(step, process_name) - assert world.process_pids[process_name] == pid,\ - "Expected pid: " + str(world.process_pids[process_name]) +\ - " Got pid: " + str(pid) - -@step('set bind10 configuration (\S+) to (.*)(?: with cmdctl port (\d+))?') -def config_set_command(step, name, value, cmdctl_port): - """ - Run bindctl, set the given configuration to the given value, and commit it. - Parameters: - name ('configuration '): Identifier of the configuration to set - value ('to '): value to set it to. - cmdctl_port ('with cmdctl port ', optional): cmdctl port to send - the command to. Defaults to 56175. - Fails if cmdctl does not exit with status code 0. - """ - commands = ["config set " + name + " " + value, - "config commit", - "quit"] - run_bindctl(commands, cmdctl_port) - -@step('send bind10 the following commands(?: with cmdctl port (\d+))?') -def send_multiple_commands(step, cmdctl_port): - """ - Run bindctl, and send it the given multiline set of commands. - A quit command is always appended. - cmdctl_port ('with cmdctl port ', optional): cmdctl port to send - the command to. Defaults to 56175. - Fails if cmdctl does not exit with status code 0. - """ - commands = step.multiline.split("\n") - # Always add quit - commands.append("quit") - run_bindctl(commands, cmdctl_port) - -@step('remove bind10 configuration (\S+)(?: value (\S+))?(?: with cmdctl port (\d+))?') -def config_remove_command(step, name, value, cmdctl_port): - """ - Run bindctl, remove the given configuration item, and commit it. - Parameters: - name ('configuration '): Identifier of the configuration to remove - value ('value '): if name is a named set, use value to identify - item to remove - cmdctl_port ('with cmdctl port ', optional): cmdctl port to send - the command to. Defaults to 56175. - Fails if cmdctl does not exit with status code 0. - """ - cmd = "config remove " + name - if value is not None: - cmd = cmd + " " + value - commands = [cmd, - "config commit", - "quit"] - run_bindctl(commands, cmdctl_port) - -@step('send bind10(?: with cmdctl port (\d+))?( ignoring failure)? the command (.+)') -def send_command(step, cmdctl_port, ignore_failure, command): - """ - Run bindctl, send the given command, and exit bindctl. - Parameters: - command ('the command '): The command to send. - cmdctl_port ('with cmdctl port ', optional): cmdctl port to send - the command to. Defaults to 56175. - ignore_failure ('ignoring failure', optional): set to None if bindctl - is expected to succeed (normal case, which is the default); if it is - not None, it means bindctl is expected to fail (and it's acceptable). - - Fails if bindctl does not exit with status code 0 and ignore_failure - is not None. - - """ - commands = [command, - "quit"] - run_bindctl(commands, cmdctl_port, ignore_failure is not None) - -@step('bind10 module (\S+) should( not)? be running') -def module_is_running(step, name, not_str): - """ - Convenience step to check if a module is running; can only work with - default cmdctl port; sends a 'help' command with bindctl, then - checks if the output contains the given name. - Parameters: - name ('module '): The name of the module (case sensitive!) - not ('not'): Reverse the check (fail if it is running) - """ - if not_str is None: - not_str = "" - step.given('send bind10 the command help') - step.given('last bindctl output should' + not_str + ' contain ' + name + ' exactly') - -@step('Configure BIND10 to run DDNS') -def configure_ddns_on(step): - """ - Convenience compound step to enable the b10-ddns module. - """ - step.behave_as(""" - When I send bind10 the following commands - \"\"\" - config add Init/components b10-ddns - config set Init/components/b10-ddns/kind dispensable - config set Init/components/b10-ddns/address DDNS - config commit - \"\"\" - """) - -@step('Configure BIND10 to stop running DDNS') -def configure_ddns_off(step): - """ - Convenience compound step to disable the b10-ddns module. - """ - step.behave_as(""" - When I send bind10 the following commands - \"\"\" - config remove Init/components b10-ddns - config commit - \"\"\" - """) - -@step('query statistics(?: (\S+))? of bind10 module (\S+)(?: with cmdctl port (\d+))?') -def query_statistics(step, statistics, name, cmdctl_port): - """ - query statistics data via bindctl. - Parameters: - statistics ('statistics ', optional) : The queried statistics name. - name ('module '): The name of the module (case sensitive!) - cmdctl_port ('with cmdctl port ', optional): cmdctl port to send - the command to. - """ - port_str = ' with cmdctl port %s' % cmdctl_port \ - if cmdctl_port else '' - step.given('send bind10%s the command Stats show owner=%s%s'\ - % (port_str, name,\ - ' name=%s' % statistics if statistics else '')) - -@step('statistics counters are 0 in category (\S+)( except for the' + \ - ' following items)?') -def check_statistics_items(step, category, has_except_for): - """ - check the output of bindctl for statistics of specified counter. - Parameters: - category ('category '): The category of counter. - has_except_for ('except for the following items'): checks values of items - with the multiline part. - - Expected values of items are taken from the multiline part of the step in - the scenario. The multiline part has at most four columns: item_name, - item_value, min_value, and max_value. item_name is a relative name - to category. item_value is an expected value for - item_name. min_value and max_value are expected to be used when - item_value cannot be specified to be item_value. min_value is the - minimum value in the expected range, and max_value is the maximum - value in the expected range. Values would be examined if they are - in columns corresponding to these. - """ - - def flatten(dictionary, prefix=''): - h = {} - for k, v in dictionary.items(): - if type(v) is dict: - h.update(flatten(v, prefix+'.'+k)) - else: - h[prefix+'.'+k] = v - return h - - stats = flatten(parse_bindctl_output_as_data_structure()) - if has_except_for: - # fetch step tables in the scnario as hashes - for item in step.hashes: - name = category+'.'+item['item_name'] - assert stats.has_key(name), \ - 'Statistics item %s was not found' % (name) - found = stats[name] - if 'item_value' in item and item['item_value']: - value = item['item_value'] - assert int(found) == int(value), \ - 'Statistics item %s has unexpected value %s (expect %s)' % \ - (name, found, value) - if 'min_value' in item and item['min_value']: - value = item['min_value'] - assert float(value) <= float(found), \ - 'Statistics item %s has unexpected value %s (expect %s or greater than)' % \ - (name, found, value) - if 'max_value' in item and item['max_value']: - value = item['max_value'] - assert float(found) <= float(value), \ - 'Statistics item %s has unexpected value %s (expect %s or less than)' % \ - (name, found, value) - del(stats[name]) - for name, found in stats.items(): - assert int(found) == 0, \ - 'Statistics item %s has unexpected value %s (expect %s)' % \ - (name, found, 0) - -@step('check initial statistics(?:( not)? containing (\S+))? for (\S+)' - '( with cmdctl port \d+)?( except for the following items)?') -def check_init_statistics(step, notv, string, name, cmdctl_port, has_except_for): - """Checks the initial statistics for the module. Also checks a - string is contained or not contained in them. Statistics counters - other than zero can follow below. - Parameters: - notv ('not'): reverse the check (fail if string is found) - string ('containing ') string to look for - name ('module '): The name of the module (case sensitive!) - cmdctl_port ('with cmdctl port ', optional): cmdctl port to send - the command to. - has_except_for ('except for the following items'): checks values of items - with the multiline part. - """ - query_str = 'query statistics of bind10 module ' + name - if cmdctl_port: - query_str = query_str + cmdctl_port - notcontain_str = 'last bindctl output should%s contain "%s"' - check_str = 'statistics counters are 0 in category .' + name - if has_except_for: - check_str = check_str + has_except_for + "\n" \ - + step.represent_hashes() - step.given(query_str) - step.given(notcontain_str % (' not', 'error')) - if string is not None: - step.given(notcontain_str % (notv, string)) - step.given(check_str) diff --git a/tests/lettuce/features/terrain/http.py b/tests/lettuce/features/terrain/http.py deleted file mode 100644 index f1f72f57c0..0000000000 --- a/tests/lettuce/features/terrain/http.py +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright (C) 2013 Internet Systems Consortium. -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM -# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, -# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING -# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from lettuce import * -import urllib - -# Basic request -@step('request the URL (.*)') -def request_url(step, url): - """ - Performs one basic HTTP GET request. The resulting HTTPResponse object - will we placed in world.last_http_response - Parameters: - url: the full URL to query - """ - world.last_http_response = urllib.urlopen(url) - -@step('last http response status code should be ([0-9]+)') -def check_last_response_code(step, code): - """ - Checks whether the last call to request_url resulted in a response - with the given (numeric) status code - Fails if it does not, or if there never was a complete request_url - operation - """ - assert world.last_http_response != None, "No HTTP request made yet" - assert int(code) == world.last_http_response.getcode(),\ - code + " != " +\ - str(world.last_http_response.getcode()) diff --git a/tests/lettuce/features/terrain/loadzone.py b/tests/lettuce/features/terrain/loadzone.py deleted file mode 100644 index 32fc82b0be..0000000000 --- a/tests/lettuce/features/terrain/loadzone.py +++ /dev/null @@ -1,106 +0,0 @@ -# Copyright (C) 2013 Internet Systems Consortium. -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM -# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, -# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING -# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from lettuce import * -import subprocess -import tempfile - -def run_loadzone(zone, zone_file, db_file): - """Run b10-loadzone. - - It currently only works for an SQLite3-based data source, and takes - its DB file as a parameter. - - Parameters: - zone (str): the zone name - zone_file (str): master zone file for the zone; can be None to make an - empty zone. - db_file (str): SQLite3 DB file to load the zone into - - """ - sqlite_datasrc_cfg = '{"database_file": "' + db_file + '"}' - if zone_file is not None: - args = ['b10-loadzone', '-c', sqlite_datasrc_cfg, zone, zone_file] - else: - args = ['b10-loadzone', '-c', sqlite_datasrc_cfg, '-e', zone] - loadzone = subprocess.Popen(args, 1, None, None, - subprocess.PIPE, subprocess.PIPE) - (stdout, stderr) = loadzone.communicate() - result = loadzone.returncode - world.last_loadzone_stdout = stdout - world.last_loadzone_stderr = stderr - assert result == 0, "loadzone exit code: " + str(result) +\ - "\nstdout:\n" + str(stdout) +\ - "stderr:\n" + str(stderr) - -@step('load zone (\S+) to DB file (\S+) from (\S+)') -def load_zone_to_dbfile(step, zone, db_file, zone_file): - """Load a zone into a data source from a zone file. - - It currently only works for an SQLite3-based data source. Its - DB file name should be specified. - - Step definition: - load zone to DB file from - - """ - run_loadzone(zone, zone_file, db_file) - -@step('make empty zone (\S+) in DB file (\S+)') -def make_empty_zone_to_dbfile(step, zone, db_file): - """Make an empty zone into a data source. - - If a non-empty zone already exists in the data source, it will be emptied; - otherwise, a new empty zone will be created. - - It currently only works for an SQLite3-based data source. Its - DB file name should be specified. - - Step definition: - make empty zone to DB file - - """ - run_loadzone(zone, None, db_file) - -@step('load (\d+) records for zone (\S+) to DB file (\S+)') -def load_zone_rr_to_dbfile(step, num_records, zone, db_file): - """Load a zone with a specified number of RRs into a data source. - - It currently only works for an SQLite3-based data source. Its - DB file name should be specified. - - It creates the content of the zone dynamically so the total number of - RRs of the zone is the specified number, including mandatory SOA and NS. - - Step definition: - load zone to DB file from - - """ - num_records = int(num_records) - assert num_records >= 2, 'zone must have at least 2 RRs: SOA and NS' - num_records -= 2 - with tempfile.NamedTemporaryFile(mode='w', prefix='zone-file', - dir='data/', delete=True) as f: - filename = f.name - f.write('$TTL 3600\n') - f.write('$ORIGIN .\n') # so it'll work whether or not zone ends with . - f.write(zone + ' IN SOA . . 0 0 0 0 0\n') - f.write(zone + ' IN NS 0.' + zone + '\n') - count = 0 - while count < num_records: - f.write(str(count) + '.' + zone + ' IN A 192.0.2.1\n') - count += 1 - f.flush() - run_loadzone(zone, f.name, db_file) diff --git a/tests/lettuce/features/terrain/nsupdate.py b/tests/lettuce/features/terrain/nsupdate.py deleted file mode 100644 index 78e89eea83..0000000000 --- a/tests/lettuce/features/terrain/nsupdate.py +++ /dev/null @@ -1,168 +0,0 @@ -# Copyright (C) 2012 Internet Systems Consortium. -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM -# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, -# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING -# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from lettuce import * -import subprocess -import re - -def run_nsupdate(commands): - """Run nsupdate. - Parameters: - commands: a sequence of strings which will be sent. - update_address: address to send the update to - update_port: port to send the update to - zone: zone to update - - Appends 'send' and 'quit' as final commands. - - nsupdate's stdout and stderr streams are stored (as one multiline string - in world.last_nsupdate_stdout/stderr. - - The return code is stored in world.last_nsupdate_returncode - (it is not checked here, since a number of tests intentionally - result in a non-zero return code). - """ - commands.append('send') - commands.append('quit') - args = ['nsupdate' ] - nsupdate = subprocess.Popen(args, 1, None, subprocess.PIPE, - subprocess.PIPE, subprocess.PIPE) - for line in commands: - nsupdate.stdin.write(line + "\n") - (stdout, stderr) = nsupdate.communicate() - world.last_nsupdate_returncode = nsupdate.returncode - world.last_nsupdate_stdout = stdout - world.last_nsupdate_stderr = stderr - -@step('send a DDNS update for (\S+) with the following commands:') -def send_multiple_commands(step, zone): - """ - Run nsupdate, and send it the given multiline set of commands. - A send and quit command is always appended. - - This is the most 'raw' wrapper around the nsupdate call; every - command except the final send needs to be specified. Intended - for those tests that have unique properties. - """ - commands = step.multiline.split("\n") - run_nsupdate(commands, zone) - -@step('DDNS response should be ([A-Z]+)') -def check_ddns_response(step, response): - """ - Checks the result of the last call to nsupdate. - - If the given response argument is SUCCESS, it simply checks whether - the return code from nsupdate is 0 (there is no output in that case). - If not, it checks whether it is not 0, and if the given response string - matches a line 'update failed: ' in the stderr output of - nsupdate. - - Prints exit code, stdout and stderr streams of nsupdate if it fails. - """ - # For success, nsupdate is silent, only check result code 0 - if response == "SUCCESS": - assert 0 == world.last_nsupdate_returncode,\ - "nsupdate exit code: " + str(world.last_nsupdate_returncode) +\ - "\nstdout:\n" + str(world.last_nsupdate_stdout) +\ - "stderr:\n" + str(world.last_nsupdate_stderr) - else: - found = False - for line in world.last_nsupdate_stderr.split('\n'): - if line == "update failed: " + response: - found = True - assert found and (0 != world.last_nsupdate_returncode),\ - "Response " + response + " not found in nsupdate output\n" +\ - "nsupdate exit code: " + str(world.last_nsupdate_returncode) +\ - "\nstdout:\n" + str(world.last_nsupdate_stdout) +\ - "stderr:\n" + str(world.last_nsupdate_stderr) - - -# Individual steps to create a DDNS update packet through nsupdate -@step('Prepare a DDNS update(?: for (\S+))?(?: to (\S+)(?: port ([0-9]+)))?') -def prepare_update(step, zone, server, port): - """ - Prepares an nsupdate command that sets up an update to a server - for a zone. The update is not sent yet, but the commands - are stored in world.nsupdate_commands. - """ - commands = [] - if server is not None: - commands.append("server " + server) - else: - commands.append("server 127.0.0.1") - if port is not None: - commands[0] = commands[0] + " " + port - else: - commands[0] = commands[0] + " 56176" - if zone is not None: - commands.append("zone " + zone) - world.nsupdate_commands = commands - -@step('Add to the DDNS update: (.*)') -def add_line_to_ddns_update(step, line): - """ - Adds a single line to the prepared nsupdate. It is not sent yet. - The line must conform to nsupdate syntax. - """ - world.nsupdate_commands.append(line) - -@step('Add the following lines to the DDNS update:') -def add_lines_to_ddns_update(step, line): - """ - Adds multiple lines to the prepared nsupdate. It is not sent yet. - The lines must conform to nsupdate syntax. - """ - world.nsupdate_commands.extend(step.multiline.split('\n')) - -@step('Send the DDNS update') -def run_ddns_update(step): - """ - Runs the prepared nsupdate, see run_nsupdate() for more information. - """ - run_nsupdate(world.nsupdate_commands) - -@step('use DDNS to set the SOA SERIAL to ([0-9]+)') -def set_serial_to(step, new_serial): - """ - Convenience compound step; prepare an update for example.org, - which sets the SERIAL to the given value, and send it. - It makes no other changes, and has hardcoded values for the other - SOA rdata fields. - """ - step.given('Prepare a DDNS update') - step.given('add to the DDNS update: update add example.org 3600 IN SOA ns1.example.org. admin.example.org. ' + new_serial + ' 3600 1800 2419200 7200') - step.given('Send the DDNS update') - -@step('use DDNS to add a record (.*)') -def add_record(step, new_record): - """ - Convenience compound step; prepare an update for example.org, - which adds one record, then send it. - Apart from the update addition, the update will not contain anything else. - """ - step.given('Prepare a DDNS update') - step.given('add to the DDNS update: update add ' + new_record) - step.given('Send the DDNS update') - -@step('set DDNS ACL ([0-9]+) for ([0-9.]+) to ([A-Z]+)') -def set_ddns_acl_to(step, nr, address, action): - """ - Convenience step to update a single ACL for DDNS. - Replaces the ACL at the given index for the given - address, to the given action - """ - step.given('set bind10 configuration DDNS/zones[' + nr + ']/update_acl to [{"action": "' + action + '", "from": "' + address + '"}]') - step.given('last bindctl output should not contain Error') diff --git a/tests/lettuce/features/terrain/querying.py b/tests/lettuce/features/terrain/querying.py deleted file mode 100644 index 1ba0b9325c..0000000000 --- a/tests/lettuce/features/terrain/querying.py +++ /dev/null @@ -1,349 +0,0 @@ -# Copyright (C) 2011 Internet Systems Consortium. -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM -# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, -# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING -# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -# This script provides querying functionality -# The most important step is -# -# query for [type X] [class X] [to [:port]] should have rcode -# -# By default, it will send queries to 127.0.0.1:56176 unless specified -# otherwise. The rcode is always checked. If the result is not NO_ANSWER, -# the result will be stored in last_query_result, which can then be inspected -# more closely, for instance with the step -# -# "the last query response should have " -# -# Also see example.feature for some examples - -from lettuce import * -import subprocess -import re - -# -# define a class to easily access different parts -# We may consider using our full library for this, but for now -# simply store several parts of the response as text values in -# this structure. -# (this actually has the advantage of not relying on our own libraries -# to test our own, well, libraries) -# -# The following attributes are 'parsed' from the response, all as strings, -# and end up as direct attributes of the QueryResult object: -# opcode, rcode, id, flags, qdcount, ancount, nscount, adcount, -# edns_version, edns_flags, and edns_udp_size -# (flags and edns_flags are both one string with all flags, in the order -# in which they appear in the response message.) -# -# this will set 'rcode' as the result code, we 'define' one additional -# rcode, "NO_ANSWER", if the dig process returned an error code itself -# In this case none of the other attributes will be set. -# -# The different sections will be lists of strings, one for each RR in the -# section. The question section will start with ';', as per dig output -# -# See server_from_sqlite3.feature for various examples to perform queries -class QueryResult(object): - status_re = re.compile("opcode: ([A-Z])+, status: ([A-Z]+), id: ([0-9]+)") - edns_re = re.compile("; EDNS: version: ([0-9]+), flags: ([a-z ]*); udp: ([0-9]+)") - flags_re = re.compile("flags: ([a-z ]+); QUERY: ([0-9]+), ANSWER: " + - "([0-9]+), AUTHORITY: ([0-9]+), ADDITIONAL: ([0-9]+)") - - def __init__(self, name, qtype, qclass, address, port, - additional_args=None): - """ - Constructor. This fires of a query using dig. - Parameters: - name: The domain name to query - qtype: The RR type to query. Defaults to A if it is None. - qclass: The RR class to query. Defaults to IN if it is None. - address: The IP address to send the query to. - port: The port number to send the query to. - additional_args: List of additional arguments (e.g. '+dnssec'). - All parameters must be either strings or have the correct string - representation. - Only one query attempt will be made. - """ - args = [ 'dig', '+tries=1', '@' + str(address), '-p', str(port) ] - if qtype is not None: - args.append('-t') - args.append(str(qtype)) - if qclass is not None: - args.append('-c') - args.append(str(qclass)) - if additional_args is not None: - args.extend(additional_args) - args.append(name) - dig_process = subprocess.Popen(args, 1, None, None, subprocess.PIPE, - None) - result = dig_process.wait() - if result != 0: - self.rcode = "NO_ANSWER" - else: - self.rcode = None - parsing = "HEADER" - self.question_section = [] - self.answer_section = [] - self.authority_section = [] - self.additional_section = [] - self.line_handler = self.parse_header - for out in dig_process.stdout: - self.line_handler(out) - - def _check_next_header(self, line): - """ - Returns true if we found a next header, and sets the internal - line handler to the appropriate value. - """ - if line == ";; ANSWER SECTION:\n": - self.line_handler = self.parse_answer - elif line == ";; OPT PSEUDOSECTION:\n": - self.line_handler = self.parse_opt - elif line == ";; QUESTION SECTION:\n": - self.line_handler = self.parse_question - elif line == ";; AUTHORITY SECTION:\n": - self.line_handler = self.parse_authority - elif line == ";; ADDITIONAL SECTION:\n": - self.line_handler = self.parse_additional - elif line.startswith(";; Query time"): - self.line_handler = self.parse_footer - else: - return False - return True - - def parse_header(self, line): - """ - Parse the header lines of the query response. - Parameters: - line: The current line of the response. - """ - if not self._check_next_header(line): - status_match = self.status_re.search(line) - flags_match = self.flags_re.search(line) - if status_match is not None: - self.opcode = status_match.group(1) - self.rcode = status_match.group(2) - elif flags_match is not None: - self.flags = flags_match.group(1) - self.qdcount = flags_match.group(2) - self.ancount = flags_match.group(3) - self.nscount = flags_match.group(4) - self.adcount = flags_match.group(5) - - def parse_opt(self, line): - """ - Parse the header lines of the query response. - Parameters: - line: The current line of the response. - """ - if not self._check_next_header(line): - edns_match = self.edns_re.search(line) - if edns_match is not None: - self.edns_version = edns_match.group(1) - self.edns_flags = edns_match.group(2) - self.edns_udp_size = edns_match.group(3) - - def parse_question(self, line): - """ - Parse the question section lines of the query response. - Parameters: - line: The current line of the response. - """ - if not self._check_next_header(line): - if line != "\n": - self.question_section.append(line.strip()) - - def parse_answer(self, line): - """ - Parse the answer section lines of the query response. - Parameters: - line: The current line of the response. - """ - if not self._check_next_header(line): - if line != "\n": - self.answer_section.append(line.strip()) - - def parse_authority(self, line): - """ - Parse the authority section lines of the query response. - Parameters: - line: The current line of the response. - """ - if not self._check_next_header(line): - if line != "\n": - self.authority_section.append(line.strip()) - - def parse_additional(self, line): - """ - Parse the additional section lines of the query response. - Parameters: - line: The current line of the response. - """ - if not self._check_next_header(line): - if line != "\n": - self.additional_section.append(line.strip()) - - def parse_footer(self, line): - """ - Parse the footer lines of the query response. - Parameters: - line: The current line of the response. - """ - pass - -@step('A (dnssec )?(recursive )?query for ([\S]+) (?:type ([A-Z0-9]+) )?' + - '(?:class ([A-Z]+) )?(?:to ([^:]+|\[[0-9a-fA-F:]+\])(?::([0-9]+))? )?' + - 'should have rcode ([\w.]+)') -def query(step, dnssec, recursive, query_name, qtype, qclass, addr, port, - rcode): - """ - Run a query, check the rcode of the response, and store the query - result in world.last_query_result. - Parameters: - dnssec ('dnssec'): DO bit is set in the query. - Defaults to unset (no DNSSEC). - recursive ('recursive'): RD bit is set in the query. - Defaults to unset (no recursion). - query_name ('query for '): The domain name to query. - qtype ('type ', optional): The RR type to query. Defaults to A. - qclass ('class ', optional): The RR class to query. Defaults to IN. - addr ('to

', optional): The IP address of the nameserver to query. - Defaults to 127.0.0.1. - port (':', optional): The port number of the nameserver to query. - Defaults to 56176. - rcode ('should have rcode '): The expected rcode of the answer. - """ - if qtype is None: - qtype = "A" - if qclass is None: - qclass = "IN" - if addr is None: - addr = "127.0.0.1" - addr = re.sub(r"\[(.+)\]", r"\1", addr) # convert [IPv6_addr] to IPv6_addr - if port is None: - port = 56176 - additional_arguments = [] - if dnssec is not None: - additional_arguments.append("+dnssec") - else: - # some builds of dig add edns0 by default. This could muck up - # additional counts, so unless we need dnssec, explicitly - # disable edns0 - additional_arguments.append("+noedns") - # dig sets RD bit by default. - if recursive is None: - additional_arguments.append("+norecurse") - query_result = QueryResult(query_name, qtype, qclass, addr, port, - additional_arguments) - assert query_result.rcode == rcode,\ - "Expected: " + rcode + ", got " + query_result.rcode - world.last_query_result = query_result - -@step('The SOA serial for ([\S.]+) (?:at (\S+)(?::([0-9]+)) )?should be ([0-9]+)') -def query_soa(step, query_name, address, port, serial=None): - """ - Convenience function to check the SOA SERIAL value of the given zone at - the nameserver at the default address (127.0.0.1:56176). - Parameters: - query_name ('for '): The zone to find the SOA record for. - serial ('should be '): The expected value of the SOA SERIAL. - If the rcode is not NOERROR, or the answer section does not contain the - SOA record, this step fails. - """ - if address is None: - address = "127.0.0.1" - if port is None: - port = "56176" - query_result = QueryResult(query_name, "SOA", "IN", address, port) - assert "NOERROR" == query_result.rcode,\ - "Got " + query_result.rcode + ", expected NOERROR" - assert len(query_result.answer_section) == 1,\ - "Too few or too many answers in SOA response" - soa_parts = query_result.answer_section[0].split() - assert serial == soa_parts[6],\ - "Got SOA serial " + soa_parts[6] + ", expected " + serial - -@step('last query response should have (\S+) (.+)') -def check_last_query(step, item, value): - """ - Check a specific value in the reponse from the last successful query sent. - Parameters: - item: The item to check the value of - value: The expected value. - This performs a very simple direct string comparison of the QueryResult - member with the given item name and the given value. - Fails if the item is unknown, or if its value does not match the expected - value. - """ - assert world.last_query_result is not None - assert item in world.last_query_result.__dict__ - lq_val = world.last_query_result.__dict__[item] - assert str(value) == str(lq_val),\ - "Got: " + str(lq_val) + ", expected: " + str(value) - -@step('([a-zA-Z]+) section of the last query response should (exactly )?be') -def check_last_query_section(step, section, exact): - """ - Check the entire contents of the given section of the response of the last - query. - Parameters: - section ('
section'): The name of the section (QUESTION, ANSWER, - AUTHORITY or ADDITIONAL). - The expected response is taken from the multiline part of the step in the - scenario. Differing whitespace is ignored, the order of the lines is - ignored, and the comparison is case insensitive. - Fails if they do not match. - WARNING: Case insensitivity is not strictly correct; for instance the - data of TXT RRs would be case sensitive. But most other output is, so - currently the checks are always case insensitive. Should we decide - these checks do need to be case sensitive, we can either remove it - or make it optional (for the former, we'll need to update a number of - tests). - """ - response_string = None - if section.lower() == 'question': - response_string = "\n".join(world.last_query_result.question_section) - elif section.lower() == 'answer': - response_string = "\n".join(world.last_query_result.answer_section) - elif section.lower() == 'authority': - response_string = "\n".join(world.last_query_result.authority_section) - elif section.lower() == 'additional': - response_string = "\n".join(world.last_query_result.additional_section) - else: - assert False, "Unknown section " + section - - # Now mangle the data for 'conformance' - # This could be done more efficiently, but is done one - # by one on a copy of the original data, so it is clear - # what is done. Final error output is currently still the - # original unchanged multiline strings - - # replace whitespace of any length by one space - response_string = re.sub("[ \t]+", " ", response_string) - expect = re.sub("[ \t]+", " ", step.multiline) - # lowercase them unless we need to do an exact match - if exact is None: - response_string = response_string.lower() - expect = expect.lower() - # sort them - response_string_parts = response_string.split("\n") - response_string_parts.sort() - response_string = "\n".join(response_string_parts) - expect_parts = expect.split("\n") - expect_parts.sort() - expect = "\n".join(expect_parts) - - assert response_string.strip() == expect.strip(),\ - "Got:\n'" + response_string + "'\nExpected:\n'" + step.multiline +"'" - diff --git a/tests/lettuce/features/terrain/steps.py b/tests/lettuce/features/terrain/steps.py deleted file mode 100644 index e41bb6df95..0000000000 --- a/tests/lettuce/features/terrain/steps.py +++ /dev/null @@ -1,95 +0,0 @@ -# Copyright (C) 2011 Internet Systems Consortium. -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM -# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, -# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING -# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -# -# This file contains a number of common steps that are general and may be used -# By a lot of feature files. -# - -from lettuce import * -import os - -@step('stop process (\w+)') -def stop_a_named_process(step, process_name): - """ - Stop the process with the given name. - Parameters: - process_name ('process '): Name of the process to stop. - """ - world.processes.stop_process(process_name) - -@step('wait (?:(\d+) times )?for (new )?(\w+) stderr message (\S+)(?: not (\S+))?') -def wait_for_stderr_message(step, times, new, process_name, message, not_message): - """ - Block until the given message is printed to the given process's stderr - output. - Parameter: - times: Check for the string this many times. - new: (' new', optional): Only check the output from the process that has - not been covered in previous calls to this - function. See RunningProcess._wait_for_output_str - for details. - process_name (' stderr'): Name of the process to check the output of. - message ('message '): Output (part) to wait for. - not_message ('not '): Output (part) to wait for, and fail - Fails if the message is not found after 10 seconds. - """ - strings = [message] - if not_message is not None: - strings.append(not_message) - if times is None: - times = 1 - (found, line) = world.processes.wait_for_stderr_str(process_name, strings, new, int(times)) - if not_message is not None: - assert found != not_message, line - -@step('wait (?:(\d+) times )?for (new )?(\w+) stdout message (\w+)(?: not (\w+))?') -def wait_for_stdout_message(step, times, new, process_name, message, not_message): - """ - Block until the given message is printed to the given process's stdout - output. - Parameter: - times: Check for the string this many times. - new: (' new', optional): Only check the output from the process that has - not been covered in previous calls to this - function. See RunningProcess._wait_for_output_str - for details. - process_name (' stderr'): Name of the process to check the output of. - message ('message '): Output (part) to wait for, and succeed. - not_message ('not '): Output (part) to wait for, and fail - Fails if the message is not found after 10 seconds. - """ - strings = [message] - if not_message is not None: - strings.append(not_message) - if times is None: - times = 1 - (found, line) = world.processes.wait_for_stdout_str(process_name, strings, new, int(times)) - if not_message is not None: - assert found != not_message, line - -@step('the file (\S+) should (not )?exist') -def check_existence(step, file_name, should_not_exist): - """ - Check the existence of the given file. - Parameters: - file_name ('file '): File to check existence of. - should_not_exist ('not', optional): Whether it should or should not exist. - Fails if the file should exist and does not, or vice versa. - """ - if should_not_exist is None: - assert os.path.exists(file_name), file_name + " does not exist" - else: - assert not os.path.exists(file_name), file_name + " exists" diff --git a/tests/lettuce/features/terrain/terrain.py b/tests/lettuce/features/terrain/terrain.py deleted file mode 100644 index c9afb1776b..0000000000 --- a/tests/lettuce/features/terrain/terrain.py +++ /dev/null @@ -1,460 +0,0 @@ -# Copyright (C) 2011-2014 Internet Systems Consortium. -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM -# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, -# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING -# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -# -# This is the 'terrain' in which the lettuce lives. By convention, this is -# where global setup and teardown is defined. -# -# We declare some attributes of the global 'world' variables here, so the -# tests can safely assume they are present. -# -# We also use it to provide scenario invariants, such as resetting data. -# - -from lettuce import * -import subprocess -import os -import shutil -import re -import sys -import time - -# lettuce cannot directly pass commands to the terrain, so we need to -# use environment variables to influence behaviour -KEEP_OUTPUT = 'LETTUCE_KEEP_OUTPUT' - -# In order to make sure we start all tests with a 'clean' environment, -# We perform a number of initialization steps, like restoring configuration -# files, and removing generated data files. - -# This approach may not scale; if so we should probably provide specific -# initialization steps for scenarios. But until that is shown to be a problem, -# It will keep the scenarios cleaner. - -# This is a list of files that are freshly copied before each scenario -# The first element is the original, the second is the target that will be -# used by the tests that need them -copylist = [ - ["configurations/bindctl_commands.config.orig", - "configurations/bindctl_commands.config"], - ["configurations/example.org.config.orig", - "configurations/example.org.config"], - ["configurations/generate.config.orig", - "configurations/generate.config"], - ["configurations/bindctl/bindctl.config.orig", - "configurations/bindctl/bindctl.config"], - ["configurations/auth/auth_basic.config.orig", - "configurations/auth/auth_basic.config"], - ["configurations/auth/auth_badzone.config.orig", - "configurations/auth/auth_badzone.config"], - ["configurations/resolver/resolver_basic.config.orig", - "configurations/resolver/resolver_basic.config"], - ["configurations/multi_instance/multi_auth.config.orig", - "configurations/multi_instance/multi_auth.config"], - ["configurations/ddns/ddns.config.orig", - "configurations/ddns/ddns.config"], - ["configurations/ddns/noddns.config.orig", - "configurations/ddns/noddns.config"], - ["configurations/xfrin/retransfer_master.conf.orig", - "configurations/xfrin/retransfer_master.conf"], - ["configurations/xfrin/retransfer_master_v4.conf.orig", - "configurations/xfrin/retransfer_master_v4.conf"], - ["configurations/xfrin/retransfer_master_nons.conf.orig", - "configurations/xfrin/retransfer_master_nons.conf"], - ["configurations/xfrin/retransfer_slave.conf.orig", - "configurations/xfrin/retransfer_slave.conf"], - ["configurations/xfrin/retransfer_slave_notify.conf.orig", - "configurations/xfrin/retransfer_slave_notify.conf"], - ["configurations/root.config.orig", - "configurations/root.config"], - ["configurations/static.config.orig", - "configurations/static.config"], - ["data/inmem-xfrin.sqlite3.orig", - "data/inmem-xfrin.sqlite3"], - ["data/root.sqlite3.orig", - "data/root.sqlite3"], - ["data/xfrin-before-diffs.sqlite3.orig", - "data/xfrin-before-diffs.sqlite3"], - ["data/xfrin-notify.sqlite3.orig", - "data/xfrin-notify.sqlite3"], - ["data/ddns/example.org.sqlite3.orig", - "data/ddns/example.org.sqlite3"], - ["data/empty_db.sqlite3", - "data/xfrout.sqlite3"] -] - -# This is a list of files that, if present, will be removed before a scenario -removelist = [ -"data/test_nonexistent_db.sqlite3" -] - -# When waiting for output data of a running process, use OUTPUT_WAIT_INTERVAL -# as the interval in which to check again if it has not been found yet. -# If we have waited OUTPUT_WAIT_MAX_INTERVALS times, we will abort with an -# error (so as not to hang indefinitely) -OUTPUT_WAIT_INTERVAL = 0.5 -OUTPUT_WAIT_MAX_INTERVALS = 120 - -# class that keeps track of one running process and the files -# we created for it. -class RunningProcess: - def __init__(self, step, process_name, args): - # set it to none first so destructor won't error if initializer did - """ - Initialize the long-running process structure, and start the process. - Parameters: - step: The scenario step it was called from. This is used for - determining the output files for redirection of stdout - and stderr. - process_name: The name to refer to this running process later. - args: Array of arguments to pass to Popen(). - """ - self.process = None - self.step = step - self.process_name = process_name - self.remove_files_on_exit = (os.environ.get(KEEP_OUTPUT) != '1') - self._check_output_dir() - self._create_filenames() - self._start_process(args) - - # used in _wait_for_output_str, map from (filename, (strings)) - # to a file offset. - self.__file_offsets = {} - - def _start_process(self, args): - """ - Start the process. - Parameters: - args: - Array of arguments to pass to Popen(). - """ - stderr_write = open(self.stderr_filename, "w") - stdout_write = open(self.stdout_filename, "w") - self.process = subprocess.Popen(args, 0, None, subprocess.PIPE, - stdout_write, stderr_write) - # open them again, this time for reading - self.stderr = open(self.stderr_filename, "r") - self.stdout = open(self.stdout_filename, "r") - - def mangle_filename(self, filebase, extension): - """ - Remove whitespace and non-default characters from a base string, - and return the substituted value. Whitespace is replaced by an - underscore. Any other character that is not an ASCII letter, a - number, a dot, or a hyphen or underscore is removed. - Parameter: - filebase: The string to perform the substitution and removal on - extension: An extension to append to the result value - Returns the modified filebase with the given extension - """ - filebase = re.sub("\s+", "_", filebase) - filebase = re.sub("[^a-zA-Z0-9.\-_]", "", filebase) - return filebase + "." + extension - - def _check_output_dir(self): - # We may want to make this overridable by the user, perhaps - # through an environment variable. Since we currently expect - # lettuce to be run from our lettuce dir, we shall just use - # the relative path 'output/' - """ - Make sure the output directory for stdout/stderr redirection - exists. - Fails if it exists but is not a directory, or if it does not - and we are unable to create it. - """ - self._output_dir = os.getcwd() + os.sep + "output" - if not os.path.exists(self._output_dir): - os.mkdir(self._output_dir) - assert os.path.isdir(self._output_dir),\ - self._output_dir + " is not a directory." - - def _create_filenames(self): - """ - Derive the filenames for stdout/stderr redirection from the - feature, scenario, and process name. The base will be - "--.[stdout|stderr]" - """ - filebase = self.step.scenario.feature.name + "-" +\ - self.step.scenario.name + "-" + self.process_name - self.stderr_filename = self._output_dir + os.sep +\ - self.mangle_filename(filebase, "stderr") - self.stdout_filename = self._output_dir + os.sep +\ - self.mangle_filename(filebase, "stdout") - - def stop_process(self): - """ - Stop this process by calling terminate(). Blocks until process has - exited. If remove_files_on_exit is True, redirected output files - are removed. - """ - if self.process is not None: - self.process.terminate() - self.process.wait() - self.process = None - if self.remove_files_on_exit: - self._remove_files() - - def _remove_files(self): - """ - Remove the files created for redirection of stdout/stderr output. - """ - os.remove(self.stderr_filename) - os.remove(self.stdout_filename) - - def _wait_for_output_str(self, filename, running_file, strings, only_new, - matches=1): - """ - Wait for a line of output in this process. This will (if - only_new is False) check all output from the process including - that may have been checked before. If only_new is True, it - only checks output that has not been covered in previous calls - to this method for the file (if there was no such previous call to - this method, it works same as the case of only_new=False). - - Care should be taken if only_new is to be set to True, as it may cause - counter-intuitive results. For example, assume the file is expected - to contain a line that has XXX and another line has YYY, but the - ordering is not predictable. If this method is called with XXX as - the search string, but the line containing YYY appears before the - target line, this method remembers the point in the file beyond - the line that has XXX. If a next call to this method specifies - YYY as the search string with only_new being True, the search will - fail. If the same string is expected to appear multiple times - and you want to catch the latest one, a more reliable way is to - specify the match number and set only_new to False, if the number - of matches is predictable. - - For each line in the output, the given strings array is checked. If - any output lines checked contains one of the strings in the strings - array, that string (not the line!) is returned. - Parameters: - filename: The filename to read previous output from, if applicable. - running_file: The open file to read new output from. - strings: Array of strings to look for. - only_new: See above. - matches: Check for the string this many times. - Returns a tuple containing the matched string, and the complete line - it was found in. - Fails if none of the strings was read after 10 seconds - (OUTPUT_WAIT_INTERVAL * OUTPUT_WAIT_MAX_INTERVALS). - """ - # Identify the start offset of search. if only_new=True, start from - # the farthest point we've reached in the file; otherwise start from - # the beginning. - if not filename in self.__file_offsets: - self.__file_offsets[filename] = 0 - offset = self.__file_offsets[filename] if only_new else 0 - running_file.seek(offset) - - match_count = 0 - wait_count = 0 - while wait_count < OUTPUT_WAIT_MAX_INTERVALS: - line = running_file.readline() - where = running_file.tell() - if line: - for string in strings: - if line.find(string) != -1: - match_count += 1 - if match_count >= matches: - # If we've gone further, update the recorded offset - if where > self.__file_offsets[filename]: - self.__file_offsets[filename] = where - return (string, line) - else: - wait_count += 1 - time.sleep(OUTPUT_WAIT_INTERVAL) - running_file.seek(where) - assert False, "Timeout waiting for process output: " + str(strings) - - def wait_for_stderr_str(self, strings, only_new = True, matches = 1): - """ - Wait for one of the given strings in this process's stderr output. - Parameters: - strings: Array of strings to look for. - only_new: See _wait_for_output_str. - matches: Check for the string this many times. - Returns a tuple containing the matched string, and the complete line - it was found in. - Fails if none of the strings was read after 10 seconds - (OUTPUT_WAIT_INTERVAL * OUTPUT_WAIT_MAX_INTERVALS). - """ - return self._wait_for_output_str(self.stderr_filename, self.stderr, - strings, only_new, matches) - - def wait_for_stdout_str(self, strings, only_new = True, matches = 1): - """ - Wait for one of the given strings in this process's stdout output. - Parameters: - strings: Array of strings to look for. - only_new: See _wait_for_output_str. - matches: Check for the string this many times. - Returns a tuple containing the matched string, and the complete line - it was found in. - Fails if none of the strings was read after 10 seconds - (OUTPUT_WAIT_INTERVAL * OUTPUT_WAIT_MAX_INTERVALS). - """ - return self._wait_for_output_str(self.stdout_filename, self.stdout, - strings, only_new, matches) - -# Container class for a number of running processes -# i.e. servers like bind10, etc -# one-shot programs like dig or bindctl are started and closed separately -class RunningProcesses: - def __init__(self): - """ - Initialize with no running processes. - """ - self.processes = {} - - def add_process(self, step, process_name, args): - """ - Start a process with the given arguments, and store it under the given - name. - Parameters: - step: The scenario step it was called from. This is used for - determining the output files for redirection of stdout - and stderr. - process_name: The name to refer to this running process later. - args: Array of arguments to pass to Popen(). - Fails if a process with the given name is already running. - """ - assert process_name not in self.processes,\ - "Process " + process_name + " already running" - self.processes[process_name] = RunningProcess(step, process_name, args) - - def get_process(self, process_name): - """ - Return the Process with the given process name. - Parameters: - process_name: The name of the process to return. - Fails if the process is not running. - """ - assert process_name in self.processes,\ - "Process " + name + " unknown" - return self.processes[process_name] - - def stop_process(self, process_name): - """ - Stop the Process with the given process name. - Parameters: - process_name: The name of the process to return. - Fails if the process is not running. - """ - assert process_name in self.processes,\ - "Process " + name + " unknown" - self.processes[process_name].stop_process() - del self.processes[process_name] - - def stop_all_processes(self): - """ - Stop all running processes. - """ - for process in self.processes.values(): - process.stop_process() - - def keep_files(self): - """ - Keep the redirection files for stdout/stderr output of all processes - instead of removing them when they are stopped later. - """ - for process in self.processes.values(): - process.remove_files_on_exit = False - - def wait_for_stderr_str(self, process_name, strings, only_new = True, matches = 1): - """ - Wait for one of the given strings in the given process's stderr output. - Parameters: - process_name: The name of the process to check the stderr output of. - strings: Array of strings to look for. - only_new: See _wait_for_output_str. - matches: Check for the string this many times. - Returns the matched string. - Fails if none of the strings was read after 10 seconds - (OUTPUT_WAIT_INTERVAL * OUTPUT_WAIT_MAX_INTERVALS). - Fails if the process is unknown. - """ - assert process_name in self.processes,\ - "Process " + process_name + " unknown" - return self.processes[process_name].wait_for_stderr_str(strings, - only_new, - matches) - - def wait_for_stdout_str(self, process_name, strings, only_new = True, matches = 1): - """ - Wait for one of the given strings in the given process's stdout output. - Parameters: - process_name: The name of the process to check the stdout output of. - strings: Array of strings to look for. - only_new: See _wait_for_output_str. - matches: Check for the string this many times. - Returns the matched string. - Fails if none of the strings was read after 10 seconds - (OUTPUT_WAIT_INTERVAL * OUTPUT_WAIT_MAX_INTERVALS). - Fails if the process is unknown. - """ - assert process_name in self.processes,\ - "Process " + process_name + " unknown" - return self.processes[process_name].wait_for_stdout_str(strings, - only_new, - matches) - -@before.each_scenario -def initialize(scenario): - """ - Global initialization for each scenario. - """ - # Keep track of running processes - world.processes = RunningProcesses() - - # Convenience variable to access the last query result from querying.py - world.last_query_result = None - - # Convenience variable to access the last HTTP response from http.py - world.last_http_response = None - - # For slightly better errors, initialize a process_pids for the relevant - # steps - world.process_pids = None - - # Some tests can modify the settings. If the tests fail half-way, or - # don't clean up, this can leave configurations or data in a bad state, - # so we copy them from originals before each scenario - for item in copylist: - shutil.copy(item[0], item[1]) - - for item in removelist: - if os.path.exists(item): - os.remove(item) - -@after.each_scenario -def cleanup(scenario): - """ - Global cleanup for each scenario. - """ - # Keep output files if the scenario failed - if not scenario.passed: - world.processes.keep_files() - # Stop any running processes we may have had around - world.processes.stop_all_processes() - -# Environment check -# Checks if LETTUCE_SETUP_COMPLETED is set in the environment -# If not, abort with an error to use the run-script -if 'LETTUCE_SETUP_COMPLETED' not in os.environ: - print("Environment check failure; LETTUCE_SETUP_COMPLETED not set") - print("Please use the run_lettuce.sh script. If you want to test an") - print("installed version of bind10 with these tests, use") - print("run_lettuce.sh -I [lettuce arguments]") - sys.exit(1) diff --git a/tests/lettuce/features/terrain/transfer.py b/tests/lettuce/features/terrain/transfer.py deleted file mode 100644 index 5f219911d1..0000000000 --- a/tests/lettuce/features/terrain/transfer.py +++ /dev/null @@ -1,195 +0,0 @@ -# Copyright (C) 2011 Internet Systems Consortium. -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM -# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, -# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING -# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -# This script provides transfer (ixfr/axfr) test functionality -# It provides steps to perform the client side of a transfer, -# and inspect the results. -# -# Like querying.py, it uses dig to do the transfers, and -# places its output in a result structure. It also uses a custom client -# implementation for less normal operations. -# -# This is done in a different file with different steps than -# querying, because the format of dig's output is -# very different than that of normal queries - -from lettuce import * -import subprocess -import re - -class TransferResult(object): - """This object stores transfer results, which is essentially simply - a list of RR strings. These are stored, as read from dig's output, - in the list 'records'. So for an IXFR transfer it contains - the exact result as returned by the server. - If this list is empty, the transfer failed for some reason (dig - does not really show error results well, unfortunately). - We may add some smarter inspection functionality to this class - later. - """ - def __init__(self, args): - """Perform the transfer by calling dig, and store the results. - args is the array of arguments to pass to Popen(), this - is passed as is since for IXFR and AXFR there can be very - different options""" - self.records = [] - - # Technically, using a pipe here can fail; since we don't expect - # large output right now, this works, but should we get a test - # where we do have a lot of output, this could block, and we will - # need to read the output in a different way. - dig_process = subprocess.Popen(args, 1, None, None, subprocess.PIPE, - None) - result = dig_process.wait() - assert result == 0 - for l in dig_process.stdout: - line = l.strip() - if len(line) > 0 and line[0] != ';': - self.records.append(line) - -def parse_addr_port(address, port): - if address is None: - address = "::1" # default address - # convert [IPv6_addr] to IPv6_addr: - address = re.sub(r"\[(.+)\]", r"\1", address) - if port is None: - port = 56176 # default port - return (address, port) - -@step('An AXFR transfer of ([\w.]+)(?: from ([\d.]+|\[[0-9a-fA-F:]+\])(?::([0-9]+))?)?') -def perform_axfr(step, zone_name, address, port): - """ - Perform an AXFR transfer, and store the result as an instance of - TransferResult in world.transfer_result. - - Step definition: - An AXFR transfer of [from
:] - - Address defaults to ::1 - Port defaults to 56176 - """ - (address, port) = parse_addr_port(address, port) - args = [ 'dig', 'AXFR', '@' + str(address), '-p', str(port), zone_name ] - world.transfer_result = TransferResult(args) - -@step('A customized AXFR transfer of ([\w.]+)(?: from ([\d.]+|\[[0-9a-fA-F:]+\])(?::([0-9]+))?)?(?: with pause of (\d+) seconds?)?') -def perform_custom_axfr(step, zone_name, address, port, delay): - """Checks AXFR transfer, and store the result in the form of internal - CustomTransferResult class, which is compatible with TransferResult. - - Step definition: - A customized AXFR transfer of [from
:] [with pause of second] - - If optional delay is specified (not None), it waits for the specified - seconds after sending the AXFR query before starting receiving - responses. This emulates a slower AXFR client. - - """ - - class CustomTransferResult: - """Store transfer result only on the number of received answer RRs. - - To be compatible with TransferResult it stores the result in the - 'records' attribute, which is a list. But its content is - meaningless; its only use is to be used with - check_transfer_result_count where its length is of concern. - - """ - def __init__(self): - self.records = [] - - # Build arguments and run xfr-client.py. On success, it simply dumps - # the number of received answer RRs to stdout. - (address, port) = parse_addr_port(address, port) - args = ['/bin/sh', 'run_python-tool.sh', 'tools/xfr-client.py', - '-s', address, '-p', str(port)] - if delay is not None: - args.extend(['-d', delay]) - args.append(zone_name) - client = subprocess.Popen(args, 1, None, None, subprocess.PIPE, - subprocess.PIPE) - (stdout, stderr) = client.communicate() - result = client.returncode - world.last_client_stdout = stdout - world.last_client_stderr = stderr - assert result == 0, "xfr-client exit code: " + str(result) +\ - "\nstdout:\n" + str(stdout) +\ - "stderr:\n" + str(stderr) - num_rrs = int(stdout.strip()) - - # Make the result object, storing dummy value (None) for the number of - # answer RRs in the records list. - world.transfer_result = CustomTransferResult() - world.transfer_result.records = [None for _ in range(0, num_rrs)] - -@step('An IXFR transfer of ([\w.]+) (\d+)(?: from ([^:]+)(?::([0-9]+))?)?(?: over (tcp|udp))?') -def perform_ixfr(step, zone_name, serial, address, port, protocol): - """ - Perform an IXFR transfer, and store the result as an instance of - TransferResult in world.transfer_result. - - Step definition: - An IXFR transfer of [from
:port] [over ] - - Address defaults to 127.0.0.1 - Port defaults to 56176 - If either tcp or udp is specified, only this protocol will be used. - """ - if address is None: - address = "127.0.0.1" - if port is None: - port = 56176 - args = [ 'dig', 'IXFR=' + str(serial), '@' + str(address), '-p', str(port), zone_name ] - if protocol is not None: - assert protocol == 'tcp' or protocol == 'udp', "Unknown protocol: " + protocol - if protocol == 'tcp': - args.append('+tcp') - elif protocol == 'udp': - args.append('+notcp') - world.transfer_result = TransferResult(args) - -@step('transfer result should have (\d+) rrs?') -def check_transfer_result_count(step, number_of_rrs): - """ - Check the number of rrs in the transfer result object created by - the AXFR transfer or IXFR transfer step. - - Step definition: - transfer result should have rr[s] - - Fails if the number of RRs is not equal to number - """ - assert int(number_of_rrs) == len(world.transfer_result.records),\ - "Got " + str(len(world.transfer_result.records)) +\ - " records, expected " + str(number_of_rrs) - -@step('full result of the last transfer should be') -def check_full_transfer_result(step): - """ - Check the complete output from the last transfer call. - - Step definition: - full result of the last transfer should be - - Whitespace is normalized in both the multiline value and the - output, but the order of the output is not. - Fails if there is any difference between the two. Prints - full output and expected value upon failure. - """ - records_string = "\n".join(world.transfer_result.records) - records_string = re.sub("[ \t]+", " ", records_string) - expect = re.sub("[ \t]+", " ", step.multiline) - assert records_string.strip() == expect.strip(),\ - "Got:\n'" + records_string + "'\nExpected:\n'" + expect + "'" diff --git a/tests/lettuce/features/xfrin_bind10.feature b/tests/lettuce/features/xfrin_bind10.feature deleted file mode 100644 index c3b5bdbbb1..0000000000 --- a/tests/lettuce/features/xfrin_bind10.feature +++ /dev/null @@ -1,204 +0,0 @@ -Feature: Xfrin - Tests for Xfrin, specific for BIND 10 behaviour. - - Scenario: Retransfer command - # Standard check to test (non-)existence of a file. - # This file is actually automatically created. - The file data/test_nonexistent_db.sqlite3 should not exist - - Given I have bind10 running with configuration xfrin/retransfer_master.conf with cmdctl port 56174 as master - And wait for master stderr message BIND10_STARTED_CC - And wait for master stderr message CMDCTL_STARTED - And wait for master stderr message AUTH_SERVER_STARTED - And wait for master stderr message XFROUT_STARTED - And wait for master stderr message ZONEMGR_STARTED - - And I have bind10 running with configuration xfrin/retransfer_slave.conf - And wait for bind10 stderr message BIND10_STARTED_CC - And wait for bind10 stderr message CMDCTL_STARTED - And wait for bind10 stderr message AUTH_SERVER_STARTED - And wait for bind10 stderr message XFRIN_STARTED - And wait for bind10 stderr message ZONEMGR_STARTED - - # Now we use the first step again to see if the file has been created. - # The DB currently doesn't know anything about the zone, so we install - # an empty zone for xfrin. - The file data/test_nonexistent_db.sqlite3 should exist - A query for www.example.org to [::1]:56176 should have rcode REFUSED - Then make empty zone example.org in DB file data/test_nonexistent_db.sqlite3 - - When I send bind10 the command Xfrin retransfer example.org IN ::1 56177 - # The data we receive contain a NS RRset that refers to three names in the - # example.org. zone. All these three are nonexistent in the data, producing - # 3 separate warning messages in the log. - And wait for new bind10 stderr message XFRIN_ZONE_WARN - And wait for new bind10 stderr message XFRIN_ZONE_WARN - And wait for new bind10 stderr message XFRIN_ZONE_WARN - # But after complaining, the zone data should be accepted. - Then wait for new bind10 stderr message XFRIN_TRANSFER_SUCCESS not XFRIN_XFR_PROCESS_FAILURE - # there's no guarantee this is logged before XFRIN_TRANSFER_SUCCESS, so - # we can't reliably use 'wait for new'. In this case this should be the - # only occurrence of this message, so this should be okay. - Then wait for bind10 stderr message ZONEMGR_RECEIVE_XFRIN_SUCCESS - A query for www.example.org to [::1]:56176 should have rcode NOERROR - - # The transferred zone should have 11 non-NSEC3 RRs and 1 NSEC3 RR. - # The following check will get these by AXFR, so the total # of RRs - # should be 13, counting the duplicated SOA. - # At this point we can confirm both in and out of AXFR for a zone - # containing an NSEC3 RR. - # We don't have to specify the address/port here; the defaults will work. - When I do an AXFR transfer of example.org - Then transfer result should have 13 rrs - - # Now try to offer another update. However, the validation of - # data should fail. The old version shoud still be available. - When I send bind10 the following commands with cmdctl port 56174: - """ - config set data_sources/classes/IN[0]/params/database_file data/example.org-nons.sqlite3 - config set Auth/database_file data/example.org-nons.sqlite3 - config commit - """ - Then I send bind10 the command Xfrin retransfer example.org IN ::1 56177 - And wait for new bind10 stderr message XFRIN_ZONE_INVALID - And wait for new bind10 stderr message XFRIN_INVALID_ZONE_DATA - # We can't use 'wait for new' here; see above. - Then wait for bind10 stderr message ZONEMGR_RECEIVE_XFRIN_FAILED - A query for example.org type NS to [::1]:56176 should have rcode NOERROR - And transfer result should have 13 rrs - - Scenario: Transfer with TSIG - # Similar setup to the test above, but this time, we add TSIG configuration - - # In order to check that the tests don't give false positives because config - # happens to be right (like no TSIG on either side), we take an existing - # non-TSIG config, add TSIG on the master side, see it fail, add TSIG - # on the slave side, then check again. - - Given I have bind10 running with configuration xfrin/retransfer_master.conf with cmdctl port 56174 as master - And wait for master stderr message AUTH_SERVER_STARTED - And wait for master stderr message XFROUT_STARTED - - And I have bind10 running with configuration xfrin/retransfer_slave.conf - And wait for bind10 stderr message CMDCTL_STARTED - And wait for bind10 stderr message XFRIN_STARTED - - # For xfrin make the data source aware of the zone (with empty data) - Then make empty zone example.org in DB file data/test_nonexistent_db.sqlite3 - - # Set slave config for 'automatic' xfrin - When I set bind10 configuration Xfrin/zones to [{"master_port": 56176, "name": "example.org", "master_addr": "::1"}] - - # Make sure it is fully open - When I send bind10 the command Xfrin retransfer example.org - Then wait for new bind10 stderr message XFRIN_TRANSFER_SUCCESS not XFRIN_XFR_PROCESS_FAILURE - # this can't be 'wait for new'; see above. - And wait for bind10 stderr message ZONEMGR_RECEIVE_XFRIN_SUCCESS - - # First to master, a transfer should then fail - When I send bind10 the following commands with cmdctl port 56174: - """ - config add tsig_keys/keys "example.key.:c2VjcmV0" - config set Xfrout/zone_config[0]/transfer_acl [{"action": "ACCEPT", "from": "::1", "key": "example.key."}] - config commit - """ - - # Transfer should fail - When I send bind10 the command Xfrin retransfer example.org - Then wait for new bind10 stderr message XFRIN_XFR_TRANSFER_PROTOCOL_VIOLATION not XFRIN_TRANSFER_SUCCESS - # Set client to use TSIG as well - When I send bind10 the following commands: - """ - config add tsig_keys/keys "example.key.:c2VjcmV0" - config set Xfrin/zones[0]/tsig_key "example.key." - config commit - """ - - # Transwer should succeed now - When I send bind10 the command Xfrin retransfer example.org - Then wait for new bind10 stderr message XFRIN_TRANSFER_SUCCESS not XFRIN_XFR_PROCESS_FAILURE - - Scenario: Validation fails - # In this test, the source data of the XFR is invalid (missing NS record - # at the origin). We check it is rejected after the transfer. - # - # We use abuse the fact that we do not check data when we read it from - # the sqlite3 database (unless we load into in-memory, which we don't - # do here). - The file data/test_nonexistent_db.sqlite3 should not exist - - Given I have bind10 running with configuration xfrin/retransfer_master_nons.conf with cmdctl port 56174 as master - And wait for master stderr message BIND10_STARTED_CC - And wait for master stderr message CMDCTL_STARTED - And wait for master stderr message AUTH_SERVER_STARTED - And wait for master stderr message XFROUT_STARTED - And wait for master stderr message ZONEMGR_STARTED - - And I have bind10 running with configuration xfrin/retransfer_slave.conf - And wait for bind10 stderr message BIND10_STARTED_CC - And wait for bind10 stderr message CMDCTL_STARTED - And wait for bind10 stderr message AUTH_SERVER_STARTED - And wait for bind10 stderr message XFRIN_STARTED - And wait for bind10 stderr message ZONEMGR_STARTED - - # Now we use the first step again to see if the file has been created, - # then install empty zone data - The file data/test_nonexistent_db.sqlite3 should exist - A query for www.example.org to [::1]:56176 should have rcode REFUSED - Then make empty zone example.org in DB file data/test_nonexistent_db.sqlite3 - - When I send bind10 the command Xfrin retransfer example.org IN ::1 56177 - # It should complain once about invalid data, then again that the whole - # zone is invalid and then reject it. - And wait for new bind10 stderr message XFRIN_ZONE_INVALID - And wait for new bind10 stderr message XFRIN_INVALID_ZONE_DATA - # This can't be 'wait for new' - Then wait for bind10 stderr message ZONEMGR_RECEIVE_XFRIN_FAILED - # The zone still doesn't exist as it is rejected. - # FIXME: This step fails. Probably an empty zone is created in the data - # source :-|. This should be REFUSED, not SERVFAIL. - A query for www.example.org to [::1]:56176 should have rcode SERVFAIL - - # TODO: - # * IXFR - generate an sqlite db that contains the journal. Check it was - # IXFR by logs. - # * IXFR->AXFR fallback if IXFR is not available (even rejected or - # something, not just the differences missing). - # * Retransfer with short refresh time (without notify). - Scenario: With differences - # We transfer from one bind10 to other, just like in the Retransfer command - # scenario. Just this time, the master contains the differences table - # and the slave has a previous version of the zone, so we use the IXFR. - - Given I have bind10 running with configuration xfrin/retransfer_master_diffs.conf with cmdctl port 56174 as master - And wait for master stderr message BIND10_STARTED_CC - And wait for master stderr message CMDCTL_STARTED - And wait for master stderr message AUTH_SERVER_STARTED - And wait for master stderr message XFROUT_STARTED - And wait for master stderr message ZONEMGR_STARTED - - And I have bind10 running with configuration xfrin/retransfer_slave_diffs.conf - And wait for bind10 stderr message BIND10_STARTED_CC - And wait for bind10 stderr message CMDCTL_STARTED - And wait for bind10 stderr message AUTH_SERVER_STARTED - And wait for bind10 stderr message XFRIN_STARTED - And wait for bind10 stderr message ZONEMGR_STARTED - - A query for example. type SOA to [::1]:56176 should have rcode NOERROR - The answer section of the last query response should be - """ - example. 3600 IN SOA ns1.example. hostmaster.example. 94 3600 900 7200 300 - """ - - # To invoke IXFR we need to use refresh command - When I send bind10 the command Xfrin refresh example. IN ::1 56177 - Then wait for new bind10 stderr message XFRIN_GOT_INCREMENTAL_RESP - Then wait for new bind10 stderr message XFRIN_IXFR_TRANSFER_SUCCESS not XFRIN_XFR_PROCESS_FAILURE - # This can't be 'wait for new' - Then wait for bind10 stderr message ZONEMGR_RECEIVE_XFRIN_SUCCESS - - A query for example. type SOA to [::1]:56176 should have rcode NOERROR - The answer section of the last query response should be - """ - example. 3600 IN SOA ns1.example. hostmaster.example. 100 3600 900 7200 300 - """ diff --git a/tests/lettuce/features/xfrin_notify_handling.feature b/tests/lettuce/features/xfrin_notify_handling.feature deleted file mode 100644 index 99bfbb4173..0000000000 --- a/tests/lettuce/features/xfrin_notify_handling.feature +++ /dev/null @@ -1,680 +0,0 @@ -Feature: Xfrin incoming notify handling - Tests for Xfrin incoming notify handling. They also test - statistics counters incremented, which are related to notifying - and transferring by Xfrout and receiveing by Xfrin. Some cases are - considered: Transferring is done via IPv4 or IPv6 transport. A - transfer request from Xfrin is rejected by Xfrout. The master - server or slave server is unreachable. - - Scenario: Handle incoming notify - Given I have bind10 running with configuration xfrin/retransfer_master.conf with cmdctl port 56174 as master - And wait for master stderr message BIND10_STARTED_CC - And wait for master stderr message CMDCTL_STARTED - And wait for master stderr message AUTH_SERVER_STARTED - And wait for master stderr message XFROUT_STARTED - And wait for master stderr message ZONEMGR_STARTED - And wait for master stderr message STATS_STARTING - - And I have bind10 running with configuration xfrin/retransfer_slave_notify.conf - And wait for bind10 stderr message BIND10_STARTED_CC - And wait for bind10 stderr message CMDCTL_STARTED - And wait for bind10 stderr message AUTH_SERVER_STARTED - And wait for bind10 stderr message XFRIN_STARTED - And wait for bind10 stderr message ZONEMGR_STARTED - - A query for www.example.org to [::1]:56176 should have rcode NXDOMAIN - - # - # Test1 for Xfrout statistics - # - check initial statistics not containing example.org for Xfrout with cmdctl port 56174 except for the following items - | item_name | min_value | max_value | - | socket.unixdomain.open | 0 | 1 | - # Note: .Xfrout.socket.unixdomain.open can be either expected to - # be 0 or 1 here. The reason is: if b10-xfrout has started up and is - # ready for a request from b10-stats, then b10-stats does request - # to b10-xfrout and the value results in 1. Otherwise if - # b10-xfrout is starting and isn't yet ready, then b10-stats - # doesn't request to b10-xfrout and the value still remains to be the - # default value(0). - - # - # Test2 for Xfrin statistics - # - check initial statistics not containing example.org for Xfrin except for the following items - | item_name | min_value | max_value | - | soa_in_progress | 0 | 1 | - | axfr_running | 0 | 1 | - # Note: soa_in_progress and axfr_running cannot be always a fixed value. The - # reason is same as the case of .Xfrout.socket.unixdomain.open. as described - # above. - - When I send bind10 with cmdctl port 56174 the command Xfrout notify example.org IN - Then wait for new master stderr message XFROUT_NOTIFY_COMMAND - Then wait for new bind10 stderr message AUTH_RECEIVED_NOTIFY - Then wait for new bind10 stderr message ZONEMGR_RECEIVE_NOTIFY - # Note: The following waits should be for *new* log messages, or - # they will match older log messages that were generated by AXFR - # during startup. - Then wait for new bind10 stderr message XFRIN_XFR_TRANSFER_STARTED - Then wait for new bind10 stderr message XFRIN_TRANSFER_SUCCESS not XFRIN_XFR_PROCESS_FAILURE - Then wait for new bind10 stderr message ZONEMGR_RECEIVE_XFRIN_SUCCESS - Then wait for new master stderr message NOTIFY_OUT_REPLY_RECEIVED - - A query for www.example.org to [::1]:56176 should have rcode NOERROR - # Make sure handling statistics command handling checked below is - # after this query - And wait for bind10 stderr message AUTH_SEND_NORMAL_RESPONSE - - # - # Test3 for Xfrout statistics - # - # check statistics change - # - - # wait until the last stats requesting is finished - When I query statistics zones of bind10 module Xfrout with cmdctl port 56174 - # note that this does not 100% guarantee the stats updated Xfrout - # statistics. But there doesn't seem to be a better log message that - # suggests this event. - wait for new master stderr message XFROUT_RECEIVED_GETSTATS_COMMAND - last bindctl output should not contain "error" - - When I query statistics zones of bind10 module Xfrout with cmdctl port 56174 - The statistics counters are 0 in category .Xfrout.zones.IN except for the following items - | item_name | item_value | - | _SERVER_.notifyoutv6 | 1 | - | _SERVER_.xfrreqdone | 1 | - | example.org..notifyoutv6 | 1 | - | example.org..xfrreqdone | 1 | - - When I query statistics socket of bind10 module Xfrout with cmdctl port 56174 - The statistics counters are 0 in category .Xfrout.socket.unixdomain except for the following items - | item_name | item_value | - | open | 1 | - | accept | 1 | - - # - # Test4 for Xfrin statistics - # - # check statistics change - # - - # wait until the last stats requesting is finished - When I query statistics zones of bind10 module Xfrin with cmdctl - wait for new bind10 stderr message XFRIN_RECEIVED_COMMAND - last bindctl output should not contain "error" - - When I query statistics of bind10 module Xfrin with cmdctl - The statistics counters are 0 in category .Xfrin except for the following items - | item_name | item_value | min_value | - | zones.IN._SERVER_.soaoutv6 | 1 | | - | zones.IN._SERVER_.axfrreqv6 | 1 | | - | zones.IN._SERVER_.xfrsuccess | 1 | | - | zones.IN._SERVER_.last_axfr_duration | | 0.0 | - | zones.IN.example.org..soaoutv6 | 1 | | - | zones.IN.example.org..axfrreqv6 | 1 | | - | zones.IN.example.org..xfrsuccess | 1 | | - | zones.IN.example.org..last_axfr_duration | | 0.0 | - | soa_in_progress | 0 | | - | axfr_running | 0 | | - | socket.ipv6.tcp.open | | 1 | - | socket.ipv6.tcp.close | | 1 | - | socket.ipv6.tcp.conn | | 1 | - | socket.ipv6.tcp.connfail | 0 | | - - # - # Test for handling incoming notify only in IPv4 - # - Scenario: Handle incoming notify (IPv4) - Given I have bind10 running with configuration xfrin/retransfer_master_v4.conf with cmdctl port 56174 as master - And wait for master stderr message BIND10_STARTED_CC - And wait for master stderr message CMDCTL_STARTED - And wait for master stderr message AUTH_SERVER_STARTED - And wait for master stderr message XFROUT_STARTED - And wait for master stderr message ZONEMGR_STARTED - And wait for master stderr message STATS_STARTING - - And I have bind10 running with configuration xfrin/retransfer_slave_notify_v4.conf - And wait for bind10 stderr message BIND10_STARTED_CC - And wait for bind10 stderr message CMDCTL_STARTED - And wait for bind10 stderr message AUTH_SERVER_STARTED - And wait for bind10 stderr message XFRIN_STARTED - And wait for bind10 stderr message ZONEMGR_STARTED - - A query for www.example.org to 127.0.0.1:56176 should have rcode NXDOMAIN - - # - # Test1 for Xfrout statistics - # - check initial statistics not containing example.org for Xfrout with cmdctl port 56174 except for the following items - | item_name | min_value | max_value | - | socket.unixdomain.open | 0 | 1 | - # Note: See above about .Xfrout.socket.unixdomain.open. - - # - # Test2 for Xfrin statistics - # - check initial statistics not containing example.org for Xfrin except for the following items - | item_name | min_value | max_value | - | soa_in_progress | 0 | 1 | - | axfr_running | 0 | 1 | - # Note: See above about soa_in_progress and axfr_running of Xfrin - - When I send bind10 with cmdctl port 56174 the command Xfrout notify example.org IN - Then wait for new master stderr message XFROUT_NOTIFY_COMMAND - Then wait for new bind10 stderr message AUTH_RECEIVED_NOTIFY - Then wait for new bind10 stderr message ZONEMGR_RECEIVE_NOTIFY - # Note: The following waits should be for *new* log messages, or - # they will match older log messages that were generated by AXFR - # during startup. - Then wait for new bind10 stderr message XFRIN_XFR_TRANSFER_STARTED - Then wait for new bind10 stderr message XFRIN_TRANSFER_SUCCESS not XFRIN_XFR_PROCESS_FAILURE - Then wait for new bind10 stderr message ZONEMGR_RECEIVE_XFRIN_SUCCESS - Then wait for new master stderr message NOTIFY_OUT_REPLY_RECEIVED - - A query for www.example.org to 127.0.0.1:56176 should have rcode NOERROR - # Make sure handling statistics command handling checked below is - # after this query - And wait for bind10 stderr message AUTH_SEND_NORMAL_RESPONSE - - # - # Test3 for Xfrout statistics - # - # check statistics change - # - - # wait until the last stats requesting is finished - When I query statistics zones of bind10 module Xfrout with cmdctl port 56174 - # note that this does not 100% guarantee the stats updated Xfrout - # statistics. But there doesn't seem to be a better log message that - # suggests this event. - wait for new master stderr message XFROUT_RECEIVED_GETSTATS_COMMAND - last bindctl output should not contain "error" - - When I query statistics zones of bind10 module Xfrout with cmdctl port 56174 - The statistics counters are 0 in category .Xfrout.zones.IN except for the following items - | item_name | item_value | - | _SERVER_.notifyoutv4 | 1 | - | _SERVER_.xfrreqdone | 1 | - | example.org..notifyoutv4 | 1 | - | example.org..xfrreqdone | 1 | - - When I query statistics socket of bind10 module Xfrout with cmdctl port 56174 - The statistics counters are 0 in category .Xfrout.socket.unixdomain except for the following items - | item_name | item_value | - | open | 1 | - | accept | 1 | - - # - # Test4 for Xfrin statistics - # - # check statistics change - # - - # wait until the last stats requesting is finished - When I query statistics zones of bind10 module Xfrin with cmdctl - wait for new bind10 stderr message XFRIN_RECEIVED_COMMAND - last bindctl output should not contain "error" - - When I query statistics of bind10 module Xfrin with cmdctl - The statistics counters are 0 in category .Xfrin except for the following items - | item_name | item_value | min_value | - | zones.IN._SERVER_.soaoutv4 | 1 | | - | zones.IN._SERVER_.axfrreqv4 | 1 | | - | zones.IN._SERVER_.xfrsuccess | 1 | | - | zones.IN._SERVER_.last_axfr_duration | | 0.0 | - | zones.IN.example.org..soaoutv4 | 1 | | - | zones.IN.example.org..axfrreqv4 | 1 | | - | zones.IN.example.org..xfrsuccess | 1 | | - | zones.IN.example.org..last_axfr_duration | | 0.0 | - | soa_in_progress | 0 | | - | axfr_running | 0 | | - | socket.ipv4.tcp.open | | 1 | - | socket.ipv4.tcp.close | | 1 | - | socket.ipv4.tcp.conn | | 1 | - | socket.ipv4.tcp.connfail | 0 | | - - # - # Test for Xfr request rejected - # - Scenario: Handle incoming notify (XFR request rejected) - Given I have bind10 running with configuration xfrin/retransfer_master.conf with cmdctl port 56174 as master - And wait for master stderr message BIND10_STARTED_CC - And wait for master stderr message CMDCTL_STARTED - And wait for master stderr message AUTH_SERVER_STARTED - And wait for master stderr message XFROUT_STARTED - And wait for master stderr message ZONEMGR_STARTED - And wait for master stderr message STATS_STARTING - - And I have bind10 running with configuration xfrin/retransfer_slave_notify.conf - And wait for bind10 stderr message BIND10_STARTED_CC - And wait for bind10 stderr message CMDCTL_STARTED - And wait for bind10 stderr message AUTH_SERVER_STARTED - And wait for bind10 stderr message XFRIN_STARTED - And wait for bind10 stderr message ZONEMGR_STARTED - - A query for www.example.org to [::1]:56176 should have rcode NXDOMAIN - - # - # Test1 for Xfrout statistics - # - check initial statistics not containing example.org for Xfrout with cmdctl port 56174 except for the following items - | item_name | min_value | max_value | - | socket.unixdomain.open | 0 | 1 | - # Note: See above about .Xfrout.socket.unixdomain.open. - - # - # Test2 for Xfrin statistics - # - check initial statistics not containing example.org for Xfrin except for the following items - | item_name | min_value | max_value | - | soa_in_progress | 0 | 1 | - | axfr_running | 0 | 1 | - # Note: See above about soa_in_progress and axfr_running of Xfrin - - # - # set transfer_acl rejection - # Local xfr requests from Xfrin module would be rejected here. - # - When I send bind10 the following commands with cmdctl port 56174 - """ - config set Xfrout/zone_config[0]/transfer_acl [{"action": "REJECT", "from": "::1"}] - config commit - """ - last bindctl output should not contain Error - Then wait for new master stderr message XFROUT_NEW_CONFIG_DONE - - When I send bind10 with cmdctl port 56174 the command Xfrout notify example.org IN - Then wait for new master stderr message XFROUT_NOTIFY_COMMAND - Then wait for new bind10 stderr message AUTH_RECEIVED_NOTIFY - Then wait for new bind10 stderr message ZONEMGR_RECEIVE_NOTIFY - # Note: The following waits should be for *new* log messages, or - # they will match older log messages that were generated by AXFR - # during startup. - Then wait for new bind10 stderr message XFRIN_XFR_TRANSFER_STARTED - Then wait for new bind10 stderr message XFRIN_XFR_TRANSFER_PROTOCOL_VIOLATION not XFRIN_TRANSFER_SUCCESS - Then wait for new bind10 stderr message ZONEMGR_RECEIVE_XFRIN_FAILED not ZONEMGR_RECEIVE_XFRIN_SUCCESS - Then wait for new master stderr message NOTIFY_OUT_REPLY_RECEIVED - - A query for www.example.org to [::1]:56176 should have rcode NXDOMAIN - - # - # Test3 for Xfrout statistics - # - # check statistics change - # - - # wait until the last stats requesting is finished - When I query statistics zones of bind10 module Xfrout with cmdctl port 56174 - wait for new master stderr message XFROUT_RECEIVED_GETSTATS_COMMAND - last bindctl output should not contain "error" - - When I query statistics zones of bind10 module Xfrout with cmdctl port 56174 - The statistics counters are 0 in category .Xfrout.zones.IN except for the following items - | item_name | item_value | min_value | max_value | - | _SERVER_.notifyoutv6 | 1 | | | - | _SERVER_.xfrrej | | 1 | 3 | - | example.org..notifyoutv6 | 1 | | | - | example.org..xfrrej | | 1 | 3 | - # Note: The above rejection counters might sometimes be increased - # up to 3. See this for details - # http://git.bind10.isc.org/~tester/builder/BIND10-lettuce/20120918210000-MacOS/logs/lettuce.out - - When I query statistics socket of bind10 module Xfrout with cmdctl port 56174 - The statistics counters are 0 in category .Xfrout.socket.unixdomain except for the following items - | item_name | item_value | - | open | 1 | - | accept | 1 | - - # - # Test4 for Xfrin statistics - # - # check statistics change - # - - # wait until the last stats requesting is finished - When I query statistics zones of bind10 module Xfrin with cmdctl - wait for new bind10 stderr message XFRIN_RECEIVED_COMMAND - last bindctl output should not contain "error" - - When I query statistics of bind10 module Xfrin with cmdctl - The statistics counters are 0 in category .Xfrin except for the following items - | item_name | item_value | min_value | - | zones.IN._SERVER_.soaoutv6 | | 1 | - | zones.IN._SERVER_.axfrreqv6 | | 1 | - | zones.IN._SERVER_.xfrfail | | 1 | - | zones.IN.example.org..soaoutv6 | | 1 | - | zones.IN.example.org..axfrreqv6 | | 1 | - | zones.IN.example.org..xfrfail | | 1 | - | soa_in_progress | | 0 | - | axfr_running | | 0 | - | socket.ipv6.tcp.open | | 1 | - | socket.ipv6.tcp.close | | 1 | - | socket.ipv6.tcp.conn | | 1 | - | socket.ipv6.tcp.connfail | 0 | | - - # - # Test for Xfr request rejected in IPv4 - # - Scenario: Handle incoming notify (XFR request rejected in IPv4) - Given I have bind10 running with configuration xfrin/retransfer_master_v4.conf with cmdctl port 56174 as master - And wait for master stderr message BIND10_STARTED_CC - And wait for master stderr message CMDCTL_STARTED - And wait for master stderr message AUTH_SERVER_STARTED - And wait for master stderr message XFROUT_STARTED - And wait for master stderr message ZONEMGR_STARTED - And wait for master stderr message STATS_STARTING - - And I have bind10 running with configuration xfrin/retransfer_slave_notify_v4.conf - And wait for bind10 stderr message BIND10_STARTED_CC - And wait for bind10 stderr message CMDCTL_STARTED - And wait for bind10 stderr message AUTH_SERVER_STARTED - And wait for bind10 stderr message XFRIN_STARTED - And wait for bind10 stderr message ZONEMGR_STARTED - - A query for www.example.org to 127.0.0.1:56176 should have rcode NXDOMAIN - - # - # Test1 for Xfrout statistics - # - check initial statistics not containing example.org for Xfrout with cmdctl port 56174 except for the following items - | item_name | min_value | max_value | - | socket.unixdomain.open | 0 | 1 | - # Note: See above about .Xfrout.socket.unixdomain.open. - - # - # Test2 for Xfrin statistics - # - check initial statistics not containing example.org for Xfrin except for the following items - | item_name | min_value | max_value | - | soa_in_progress | 0 | 1 | - | axfr_running | 0 | 1 | - # Note: See above about soa_in_progress and axfr_running of Xfrin - - # - # set transfer_acl rejection - # Local xfr requests from Xfrin module would be rejected here. - # - When I send bind10 the following commands with cmdctl port 56174 - """ - config set Xfrout/zone_config[0]/transfer_acl [{"action": "REJECT", "from": "127.0.0.1"}] - config commit - """ - last bindctl output should not contain Error - Then wait for new master stderr message XFROUT_NEW_CONFIG_DONE - - When I send bind10 with cmdctl port 56174 the command Xfrout notify example.org IN - Then wait for new master stderr message XFROUT_NOTIFY_COMMAND - Then wait for new bind10 stderr message AUTH_RECEIVED_NOTIFY - Then wait for new bind10 stderr message ZONEMGR_RECEIVE_NOTIFY - # Note: The following waits should be for *new* log messages, or - # they will match older log messages that were generated by AXFR - # during startup. - Then wait for new bind10 stderr message XFRIN_XFR_TRANSFER_STARTED - Then wait for new bind10 stderr message XFRIN_XFR_TRANSFER_PROTOCOL_VIOLATION not XFRIN_TRANSFER_SUCCESS - Then wait for new bind10 stderr message ZONEMGR_RECEIVE_XFRIN_FAILED not ZONEMGR_RECEIVE_XFRIN_SUCCESS - Then wait for new master stderr message NOTIFY_OUT_REPLY_RECEIVED - - A query for www.example.org to 127.0.0.1:56176 should have rcode NXDOMAIN - - # - # Test3 for Xfrout statistics - # - # check statistics change - # - - When I query statistics zones of bind10 module Xfrout with cmdctl port 56174 - # wait until stats request at least after NOTIFY_OUT_REPLY_RECEIVED - wait for new master stderr message XFROUT_RECEIVED_GETSTATS_COMMAND - last bindctl output should not contain "error" - - When I query statistics zones of bind10 module Xfrout with cmdctl port 56174 - The statistics counters are 0 in category .Xfrout.zones.IN except for the following items - | item_name | item_value | min_value | max_value | - | _SERVER_.notifyoutv4 | 1 | | | - | _SERVER_.xfrrej | | 1 | 3 | - | example.org..notifyoutv4 | 1 | | | - | example.org..xfrrej | | 1 | 3 | - # Note: The above rejection counters might sometimes be increased - # up to 3. See this for details - # http://git.bind10.isc.org/~tester/builder/BIND10-lettuce/20120918210000-MacOS/logs/lettuce.out - - When I query statistics socket of bind10 module Xfrout with cmdctl port 56174 - The statistics counters are 0 in category .Xfrout.socket.unixdomain except for the following items - | item_name | item_value | - | open | 1 | - | accept | 1 | - - # - # Test4 for Xfrin statistics - # - # check statistics change - # - - # wait until the last stats requesting is finished - When I query statistics zones of bind10 module Xfrin with cmdctl - wait for new bind10 stderr message XFRIN_RECEIVED_COMMAND - last bindctl output should not contain "error" - - When I query statistics of bind10 module Xfrin with cmdctl - The statistics counters are 0 in category .Xfrin except for the following items - | item_name | item_value | min_value | - | zones.IN._SERVER_.soaoutv4 | | 1 | - | zones.IN._SERVER_.axfrreqv4 | | 1 | - | zones.IN._SERVER_.xfrfail | | 1 | - | zones.IN.example.org..soaoutv4 | | 1 | - | zones.IN.example.org..axfrreqv4 | | 1 | - | zones.IN.example.org..xfrfail | | 1 | - | soa_in_progress | | 0 | - | axfr_running | | 0 | - | socket.ipv4.tcp.open | | 1 | - | socket.ipv4.tcp.close | | 1 | - | socket.ipv4.tcp.conn | | 1 | - | socket.ipv4.tcp.connfail | 0 | | - - # - # Test for unreachable slave - # - Scenario: Handle incoming notify (unreachable slave) - Given I have bind10 running with configuration xfrin/retransfer_master.conf with cmdctl port 56174 as master - And wait for master stderr message BIND10_STARTED_CC - And wait for master stderr message CMDCTL_STARTED - And wait for master stderr message AUTH_SERVER_STARTED - And wait for master stderr message XFROUT_STARTED - And wait for master stderr message ZONEMGR_STARTED - And wait for master stderr message STATS_STARTING - - When I send bind10 with cmdctl port 56174 the command Xfrout notify example.org IN - Then wait for new master stderr message XFROUT_NOTIFY_COMMAND - Then wait for new master stderr message NOTIFY_OUT_SENDING_NOTIFY - Then wait for new master stderr message NOTIFY_OUT_TIMEOUT - - # - # Test1 for Xfrout statistics - # - # check statistics change - # - - When I query statistics zones of bind10 module Xfrout with cmdctl port 56174 - # wait until stats request at least after NOTIFY_OUT_TIMEOUT - wait for new master stderr message XFROUT_RECEIVED_GETSTATS_COMMAND - last bindctl output should not contain "error" - - When I query statistics zones of bind10 module Xfrout with cmdctl port 56174 - The statistics counters are 0 in category .Xfrout.zones.IN except for the following items - | item_name | min_value | max_value | - | _SERVER_.notifyoutv6 | 1 | 5 | - | example.org..notifyoutv6 | 1 | 5 | - - When I query statistics socket of bind10 module Xfrout with cmdctl port 56174 - The statistics counters are 0 in category .Xfrout.socket.unixdomain except for the following items - | item_name | item_value | - | open | 1 | - - # - # Test for NOTIFY that would result in NOTAUTH - # - Scenario: Handle incoming notify that does match authoritative zones - Given I have bind10 running with configuration xfrin/retransfer_master.conf with cmdctl port 56174 as master - And wait for master stderr message BIND10_STARTED_CC - And wait for master stderr message CMDCTL_STARTED - And wait for master stderr message AUTH_SERVER_STARTED - And wait for master stderr message XFROUT_STARTED - And wait for master stderr message ZONEMGR_STARTED - And wait for master stderr message STATS_STARTING - - And I have bind10 running with configuration xfrin/retransfer_slave_notify.conf - And wait for bind10 stderr message BIND10_STARTED_CC - And wait for bind10 stderr message CMDCTL_STARTED - And wait for bind10 stderr message AUTH_SERVER_STARTED - And wait for bind10 stderr message XFRIN_STARTED - And wait for bind10 stderr message ZONEMGR_STARTED - - # - # replace master's data source with unmatched zone for slave's zone. - # we restart Xfrout to make it sure. - # - When I send bind10 the following commands with cmdctl port 56174 - """ - config set data_sources/classes/IN[0]/params/database_file data/ixfr-out/zones.sqlite3 - config set Auth/database_file data/ixfr-out/zones.sqlite3 - config set Xfrout/zone_config[0]/origin example.com - config commit - Xfrout shutdown - """ - last bindctl output should not contain "error" - And wait for new master stderr message XFROUT_STARTED - - A query for www.example.com to [::1]:56176 should have rcode REFUSED - - When I send bind10 with cmdctl port 56174 the command Xfrout notify example.com IN - Then wait for new master stderr message XFROUT_NOTIFY_COMMAND - Then wait for new bind10 stderr message AUTH_RECEIVED_NOTIFY_NOTAUTH - Then wait for new master stderr message NOTIFY_OUT_REPLY_RECEIVED - - A query for www.example.com to [::1]:56176 should have rcode REFUSED - - # - # Test for NOTIFY that's not in the secondaries list - # - Scenario: Handle incoming notify that is not in the secondaries list - Given I have bind10 running with configuration xfrin/retransfer_master.conf with cmdctl port 56174 as master - And wait for master stderr message BIND10_STARTED_CC - And wait for master stderr message CMDCTL_STARTED - And wait for master stderr message AUTH_SERVER_STARTED - And wait for master stderr message XFROUT_STARTED - And wait for master stderr message ZONEMGR_STARTED - And wait for master stderr message STATS_STARTING - - And I have bind10 running with configuration xfrin/retransfer_slave_notify.conf - And wait for bind10 stderr message BIND10_STARTED_CC - And wait for bind10 stderr message CMDCTL_STARTED - And wait for bind10 stderr message AUTH_SERVER_STARTED - And wait for bind10 stderr message XFRIN_STARTED - And wait for bind10 stderr message ZONEMGR_STARTED - - # - # Empty slave's secondaries list, and restart zonemgr to make it sure - # - When I send bind10 the following commands with cmdctl - """ - config remove Zonemgr/secondary_zones[0] - config commit - Zonemgr shutdown - """ - last bindctl output should not contain "error" - And wait for new bind10 stderr message ZONEMGR_STARTED - - A query for www.example.org to [::1]:56176 should have rcode NXDOMAIN - - When I send bind10 with cmdctl port 56174 the command Xfrout notify example.org IN - Then wait for new master stderr message XFROUT_NOTIFY_COMMAND - Then wait for new bind10 stderr message AUTH_RECEIVED_NOTIFY - Then wait for new bind10 stderr message ZONEMGR_RECEIVE_NOTIFY - Then wait for new bind10 stderr message ZONEMGR_ZONE_NOTIFY_NOT_SECONDARY - Then wait for new master stderr message NOTIFY_OUT_REPLY_RECEIVED - - A query for www.example.org to [::1]:56176 should have rcode NXDOMAIN - - # - # Test for NOTIFY when zonemgr is not running - # - Scenario: Handle incoming notify while zonemgr is not running - Given I have bind10 running with configuration xfrin/retransfer_master.conf with cmdctl port 56174 as master - And wait for master stderr message BIND10_STARTED_CC - And wait for master stderr message CMDCTL_STARTED - And wait for master stderr message AUTH_SERVER_STARTED - And wait for master stderr message XFROUT_STARTED - And wait for master stderr message ZONEMGR_STARTED - And wait for master stderr message STATS_STARTING - - And I have bind10 running with configuration xfrin/retransfer_slave_notify.conf - And wait for bind10 stderr message BIND10_STARTED_CC - And wait for bind10 stderr message CMDCTL_STARTED - And wait for bind10 stderr message AUTH_SERVER_STARTED - And wait for bind10 stderr message XFRIN_STARTED - And wait for bind10 stderr message ZONEMGR_STARTED - - # remove zonemgr from the system. a subsequent notify is ignored, but - # an error message shouldn't be logged at auth. - When I send bind10 the following commands with cmdctl - """ - config remove Init/components b10-zonemgr - config commit - """ - last bindctl output should not contain "error" - And wait for new bind10 stderr message BIND10_PROCESS_ENDED - - A query for www.example.org to [::1]:56176 should have rcode NXDOMAIN - - When I send bind10 with cmdctl port 56174 the command Xfrout notify example.org IN - Then wait for master stderr message XFROUT_NOTIFY_COMMAND - Then wait for new bind10 stderr message AUTH_RECEIVED_NOTIFY - Then wait for new bind10 stderr message AUTH_ZONEMGR_NOTEXIST not AUTH_ZONEMGR_ERROR - Then wait for master stderr message NOTIFY_OUT_TIMEOUT not NOTIFY_OUT_REPLY_RECEIVED - - A query for www.example.org to [::1]:56176 should have rcode NXDOMAIN - - # - # Test for unreachable master - # - Scenario: Handle incoming notify (unreachable master) - - And I have bind10 running with configuration xfrin/retransfer_slave_notify.conf - And wait for bind10 stderr message BIND10_STARTED_CC - And wait for bind10 stderr message CMDCTL_STARTED - And wait for bind10 stderr message AUTH_SERVER_STARTED - And wait for bind10 stderr message XFRIN_STARTED - And wait for bind10 stderr message ZONEMGR_STARTED - - A query for www.example.org to [::1]:56176 should have rcode NXDOMAIN - - # - # Test1 for Xfrin statistics - # - check initial statistics not containing example.org for Xfrin - - # - # execute reftransfer for Xfrin - # - When I send bind10 the command Xfrin retransfer example.org IN - Then wait for new bind10 stderr message XFRIN_CONNECT_MASTER - Then wait for new bind10 stderr message ZONEMGR_RECEIVE_XFRIN_FAILED - - # - # Test2 for Xfrin statistics - # - # check initial statistics - # - - # wait until the last stats requesting is finished - wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST - wait for new bind10 stderr message XFRIN_RECEIVED_COMMAND - - When I query statistics socket of bind10 module Xfrin with cmdctl - The statistics counters are 0 in category .Xfrin.socket.ipv6.tcp except for the following items - | item_name | min_value | - | open | 1 | - | close | 1 | - | connfail | 1 | diff --git a/tests/lettuce/features/xfrout_bind10.feature b/tests/lettuce/features/xfrout_bind10.feature deleted file mode 100644 index e2ca7be59a..0000000000 --- a/tests/lettuce/features/xfrout_bind10.feature +++ /dev/null @@ -1,39 +0,0 @@ -Feature: Xfrout - Tests for Xfrout, specific for BIND 10 behaviour. - - Scenario: normal transfer with a moderate number of RRs - - Load 100 records for zone example.org to DB file data/xfrout.sqlite3 - - Given I have bind10 running with configuration xfrout_master.conf - And wait for bind10 stderr message BIND10_STARTED_CC - And wait for bind10 stderr message CMDCTL_STARTED - And wait for bind10 stderr message AUTH_SERVER_STARTED - And wait for bind10 stderr message XFROUT_STARTED - And wait for bind10 stderr message ZONEMGR_STARTED - - # The transferred zone should have the generated 100 RRs plush one - # trailing SOA. - When I do a customized AXFR transfer of example.org - Then transfer result should have 101 rrs - - # Similar to the previous one, but using a much larger zone, and with - # a small delay at the client side. It should still succeed. - # The specific delay (5 seconds) was chosen for an environment that - # revealed a bug which is now fixed to reproduce the issue; shorter delays - # didn't trigger the problem. Depending on the OS implementation, machine - # speed, etc, the same delay may be too long or too short, but in any case - # the test should succeed now. - Scenario: transfer a large zone - - Load 50000 records for zone example.org to DB file data/xfrout.sqlite3 - - Given I have bind10 running with configuration xfrout_master.conf - And wait for bind10 stderr message BIND10_STARTED_CC - And wait for bind10 stderr message CMDCTL_STARTED - And wait for bind10 stderr message AUTH_SERVER_STARTED - And wait for bind10 stderr message XFROUT_STARTED - And wait for bind10 stderr message ZONEMGR_STARTED - - When I do a customized AXFR transfer of example.org from [::1]:56176 with pause of 5 seconds - Then transfer result should have 50001 rrs diff --git a/tests/lettuce/run_lettuce.sh b/tests/lettuce/run_lettuce.sh deleted file mode 100755 index 9580dceb9f..0000000000 --- a/tests/lettuce/run_lettuce.sh +++ /dev/null @@ -1,25 +0,0 @@ -#! /bin/sh - -# Copyright (C) 2012 Internet Systems Consortium. -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM -# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, -# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING -# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -if [ "$1" = "-I" ]; then - shift - echo "$@" - LETTUCE_SETUP_COMPLETED=1 exec lettuce $@ -else - . ./setup_intree_bind10.sh - exec lettuce $@ -fi diff --git a/tests/lettuce/run_python-tool.sh b/tests/lettuce/run_python-tool.sh deleted file mode 100755 index e93068ebdc..0000000000 --- a/tests/lettuce/run_python-tool.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2013 Internet Systems Consortium. -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM -# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, -# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING -# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -# This script runs the specified python program, referring to the in-tree -# BIND 10 Python libraries (in case the program needs them) -# usage example: run_python-tool.sh tools/xfr-client.py -p 5300 example.org - -. ./setup_intree_bind10.sh -$PYTHON_EXEC $* diff --git a/tests/lettuce/setup_intree_bind10.sh.in b/tests/lettuce/setup_intree_bind10.sh.in deleted file mode 100755 index 970021b107..0000000000 --- a/tests/lettuce/setup_intree_bind10.sh.in +++ /dev/null @@ -1,53 +0,0 @@ -#! /bin/sh - -# Copyright (C) 2010 Internet Systems Consortium. -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM -# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, -# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING -# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -PYTHON_EXEC=${PYTHON_EXEC:-@PYTHON@} -export PYTHON_EXEC - -BIND10_PATH=@abs_top_builddir@/src/bin/bind10 - -PATH=@abs_top_builddir@/src/bin/bind10:@abs_top_builddir@/src/bin/bindctl:@abs_top_builddir@/src/bin/msgq:@abs_top_builddir@/src/bin/auth:@abs_top_builddir@/src/bin/resolver:@abs_top_builddir@/src/bin/cfgmgr:@abs_top_builddir@/src/bin/cmdctl:@abs_top_builddir@/src/bin/stats:@abs_top_builddir@/src/bin/xfrin:@abs_top_builddir@/src/bin/xfrout:@abs_top_builddir@/src/bin/zonemgr:@abs_top_builddir@/src/bin/ddns:@abs_top_builddir@/src/bin/dhcp6:@abs_top_builddir@/src/bin/sockcreator:@abs_top_builddir@/src/bin/loadzone:$PATH -export PATH - -PYTHONPATH=@abs_top_builddir@/src/bin:@abs_top_builddir@/src/lib/python/isc/log_messages:@abs_top_builddir@/src/lib/python/isc/cc:@abs_top_builddir@/src/lib/python:@abs_top_builddir@/src/lib/dns/python/.libs:@abs_top_builddir@/src/lib/xfr/.libs:@abs_top_builddir@/src/lib/log/.libs:@abs_top_builddir@/src/lib/util/io/.libs:@abs_top_builddir@/src/lib/python/isc/config:@abs_top_builddir@/src/lib/python/isc/acl/.libs:@abs_top_builddir@/src/lib/python/isc/datasrc/.libs:$PYTHONPATH -export PYTHONPATH - -# If necessary (rare cases), explicitly specify paths to dynamic libraries -# required by loadable python modules. -SET_ENV_LIBRARY_PATH=@SET_ENV_LIBRARY_PATH@ -if test $SET_ENV_LIBRARY_PATH = yes; then - @ENV_LIBRARY_PATH@=@abs_top_builddir@/src/lib/dns/.libs:@abs_top_builddir@/src/lib/dns/python/.libs:@abs_top_builddir@/src/lib/cryptolink/.libs:@abs_top_builddir@/src/lib/cc/.libs:@abs_top_builddir@/src/lib/config/.libs:@abs_top_builddir@/src/lib/log/.libs:@abs_top_builddir@/src/lib/acl/.libs:@abs_top_builddir@/src/lib/util/.libs:@abs_top_builddir@/src/lib/util/threads/.libs:@abs_top_builddir@/src/lib/util/io/.libs:@abs_top_builddir@/src/lib/exceptions/.libs:@abs_top_builddir@/src/lib/datasrc/.libs:$@ENV_LIBRARY_PATH@ - export @ENV_LIBRARY_PATH@ -fi - -WANT_EXPERIMENTAL_RESOLVER=@WANT_EXPERIMENTAL_RESOLVER@ -if test $WANT_EXPERIMENTAL_RESOLVER = yes; then - cp -f @srcdir@/features/resolver_basic.feature.disabled @srcdir@/features/resolver_basic.feature -fi - -KEA_FROM_SOURCE=@abs_top_srcdir@ -export KEA_FROM_SOURCE -# TODO: We need to do this feature based (ie. no general from_source) -# But right now we need a second one because some spec files are -# generated and hence end up under builddir -KEA_FROM_BUILD=@abs_top_builddir@ -export KEA_FROM_BUILD - -BIND10_MSGQ_SOCKET_FILE=@abs_top_builddir@/msgq_socket -export BIND10_MSGQ_SOCKET_FILE - -export LETTUCE_SETUP_COMPLETED=1 diff --git a/tests/lettuce/tools/xfr-client.py b/tests/lettuce/tools/xfr-client.py deleted file mode 100755 index 662e1eddcb..0000000000 --- a/tests/lettuce/tools/xfr-client.py +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (C) 2013 Internet Systems Consortium. -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM -# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, -# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING -# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -# A simple XFR client program with some customized behavior. -# This is intended to provide some less common or even invalid client behavior -# for some specific tests on outbound zone transfer. -# It currently only supports AXFR, but can be extended to support IXFR -# as we see the need for it. -# -# For command line usage, run this program with -h option. - -from isc.dns import * -import sys -import socket -import struct -import time -from optparse import OptionParser - -parser = OptionParser(usage='usage: %prog [options] zone_name') -parser.add_option('-d', '--delay', dest='delay', action='store', default=None, - help='delay (sec) before receiving responses, ' + - 'emulating slow clients') -parser.add_option('-s', '--server', dest='server_addr', action='store', - default='::1', - help="master server's address [default: %default]") -parser.add_option('-p', '--port', dest='server_port', action='store', - default=53, - help="master server's TCP port [default: %default]") -(options, args) = parser.parse_args() - -if len(args) == 0: - parser.error('missing argument') - -# Parse arguments and options, and creates client socket. -zone_name = Name(args[0]) -gai = socket.getaddrinfo(options.server_addr, int(options.server_port), 0, - socket.SOCK_STREAM, socket.IPPROTO_TCP, - socket.AI_NUMERICHOST|socket.AI_NUMERICSERV) -server_family, server_socktype, server_proto, server_sockaddr = \ - (gai[0][0], gai[0][1], gai[0][2], gai[0][4]) -s = socket.socket(server_family, server_socktype, server_proto) -s.connect(server_sockaddr) -s.settimeout(60) # safety net in case of hangup situation - -# Build XFR query. -axfr_qry = Message(Message.RENDER) -axfr_qry.set_rcode(Rcode.NOERROR) -axfr_qry.set_opcode(Opcode.QUERY) -axfr_qry.add_question(Question(zone_name, RRClass.IN, RRType.AXFR)) - -renderer = MessageRenderer() -axfr_qry.to_wire(renderer) -qry_data = renderer.get_data() - -# Send the query -hlen_data = struct.pack('H', socket.htons(len(qry_data))) -s.send(hlen_data) -s.send(qry_data) - -# If specified wait for the given period -if options.delay is not None: - time.sleep(int(options.delay)) - -def get_request_response(s, size): - """A helper function to receive data of specified length from a socket.""" - recv_size = 0 - data = b'' - while recv_size < size: - need_recv_size = size - recv_size - tmp_data = s.recv(need_recv_size) - if len(tmp_data) == 0: - return None - recv_size += len(tmp_data) - data += tmp_data - return data - -# Receive responses until the connection is terminated, and dump the -# number of received answer RRs to stdout. -num_rrs = 0 -while True: - hlen_data = get_request_response(s, 2) - if hlen_data is None: - break - resp_data = get_request_response( - s, socket.ntohs(struct.unpack('H', hlen_data)[0])) - msg = Message(Message.PARSE) - msg.from_wire(resp_data, Message.PRESERVE_ORDER) - num_rrs += msg.get_rr_count(Message.SECTION_ANSWER) -print(str(num_rrs)) -- 2.47.2