xfrin_bind10.feature 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. Feature: Xfrin
  2. Tests for Xfrin, specific for BIND 10 behaviour.
  3. Scenario: Retransfer command
  4. # Standard check to test (non-)existence of a file.
  5. # This file is actually automatically created.
  6. The file data/test_nonexistent_db.sqlite3 should not exist
  7. Given I have bind10 running with configuration xfrin/retransfer_master.conf with cmdctl port 47804 as master
  8. And wait for master stderr message BIND10_STARTED_CC
  9. And wait for master stderr message CMDCTL_STARTED
  10. And wait for master stderr message AUTH_SERVER_STARTED
  11. And wait for master stderr message XFROUT_STARTED
  12. And wait for master stderr message ZONEMGR_STARTED
  13. And I have bind10 running with configuration xfrin/retransfer_slave.conf
  14. And wait for bind10 stderr message BIND10_STARTED_CC
  15. And wait for bind10 stderr message CMDCTL_STARTED
  16. And wait for bind10 stderr message AUTH_SERVER_STARTED
  17. And wait for bind10 stderr message XFRIN_STARTED
  18. And wait for bind10 stderr message ZONEMGR_STARTED
  19. # Now we use the first step again to see if the file has been created
  20. The file data/test_nonexistent_db.sqlite3 should exist
  21. A query for www.example.org to [::1]:47806 should have rcode REFUSED
  22. When I send bind10 the command Xfrin retransfer example.org IN ::1 47807
  23. # The data we receive contain a NS RRset that refers to three names in the
  24. # example.org. zone. All these three are nonexistent in the data, producing
  25. # 3 separate warning messages in the log.
  26. And wait for new bind10 stderr message XFRIN_ZONE_WARN
  27. And wait for new bind10 stderr message XFRIN_ZONE_WARN
  28. And wait for new bind10 stderr message XFRIN_ZONE_WARN
  29. # But after complaining, the zone data should be accepted.
  30. Then wait for new bind10 stderr message XFRIN_TRANSFER_SUCCESS not XFRIN_XFR_PROCESS_FAILURE
  31. # there's no guarantee this is logged before XFRIN_TRANSFER_SUCCESS, so
  32. # we can't reliably use 'wait for new'. In this case this should be the
  33. # only occurrence of this message, so this should be okay.
  34. Then wait for bind10 stderr message ZONEMGR_RECEIVE_XFRIN_SUCCESS
  35. A query for www.example.org to [::1]:47806 should have rcode NOERROR
  36. # The transferred zone should have 11 non-NSEC3 RRs and 1 NSEC3 RR.
  37. # The following check will get these by AXFR, so the total # of RRs
  38. # should be 13, counting the duplicated SOA.
  39. # At this point we can confirm both in and out of AXFR for a zone
  40. # containing an NSEC3 RR.
  41. # We don't have to specify the address/port here; the defaults will work.
  42. When I do an AXFR transfer of example.org
  43. Then transfer result should have 13 rrs
  44. # Now try to offer another update. However, the validation of
  45. # data should fail. The old version shoud still be available.
  46. When I send bind10 the following commands with cmdctl port 47804:
  47. """
  48. config set data_sources/classes/IN[0]/params/database_file data/example.org-nons.sqlite3
  49. config set Auth/database_file data/example.org-nons.sqlite3
  50. config commit
  51. """
  52. Then I send bind10 the command Xfrin retransfer example.org IN ::1 47807
  53. And wait for new bind10 stderr message XFRIN_ZONE_INVALID
  54. And wait for new bind10 stderr message XFRIN_INVALID_ZONE_DATA
  55. # We can't use 'wait for new' here; see above.
  56. Then wait for bind10 stderr message ZONEMGR_RECEIVE_XFRIN_FAILED
  57. A query for example.org type NS to [::1]:47806 should have rcode NOERROR
  58. And transfer result should have 13 rrs
  59. Scenario: Transfer with TSIG
  60. # Similar setup to the test above, but this time, we add TSIG configuration
  61. # In order to check that the tests don't give false positives because config
  62. # happens to be right (like no TSIG on either side), we take an existing
  63. # non-TSIG config, add TSIG on the master side, see it fail, add TSIG
  64. # on the slave side, then check again.
  65. Given I have bind10 running with configuration xfrin/retransfer_master.conf with cmdctl port 47804 as master
  66. And wait for master stderr message AUTH_SERVER_STARTED
  67. And wait for master stderr message XFROUT_STARTED
  68. And I have bind10 running with configuration xfrin/retransfer_slave.conf
  69. And wait for bind10 stderr message CMDCTL_STARTED
  70. And wait for bind10 stderr message XFRIN_STARTED
  71. # Set slave config for 'automatic' xfrin
  72. When I set bind10 configuration Xfrin/zones to [{"master_port": 47806, "name": "example.org", "master_addr": "::1"}]
  73. # Make sure it is fully open
  74. When I send bind10 the command Xfrin retransfer example.org
  75. Then wait for new bind10 stderr message XFRIN_TRANSFER_SUCCESS not XFRIN_XFR_PROCESS_FAILURE
  76. # this can't be 'wait for new'; see above.
  77. And wait for bind10 stderr message ZONEMGR_RECEIVE_XFRIN_SUCCESS
  78. # First to master, a transfer should then fail
  79. When I send bind10 the following commands with cmdctl port 47804:
  80. """
  81. config add tsig_keys/keys "example.key.:c2VjcmV0"
  82. config set Xfrout/zone_config[0]/transfer_acl [{"action": "ACCEPT", "from": "::1", "key": "example.key."}]
  83. config commit
  84. """
  85. # Transfer should fail
  86. When I send bind10 the command Xfrin retransfer example.org
  87. Then wait for new bind10 stderr message XFRIN_XFR_TRANSFER_PROTOCOL_VIOLATION not XFRIN_TRANSFER_SUCCESS
  88. # Set client to use TSIG as well
  89. When I send bind10 the following commands:
  90. """
  91. config add tsig_keys/keys "example.key.:c2VjcmV0"
  92. config set Xfrin/zones[0]/tsig_key "example.key."
  93. config commit
  94. """
  95. # Transwer should succeed now
  96. When I send bind10 the command Xfrin retransfer example.org
  97. Then wait for new bind10 stderr message XFRIN_TRANSFER_SUCCESS not XFRIN_XFR_PROCESS_FAILURE
  98. Scenario: Validation fails
  99. # In this test, the source data of the XFR is invalid (missing NS record
  100. # at the origin). We check it is rejected after the transfer.
  101. #
  102. # We use abuse the fact that we do not check data when we read it from
  103. # the sqlite3 database (unless we load into in-memory, which we don't
  104. # do here).
  105. The file data/test_nonexistent_db.sqlite3 should not exist
  106. Given I have bind10 running with configuration xfrin/retransfer_master_nons.conf with cmdctl port 47804 as master
  107. And wait for master stderr message BIND10_STARTED_CC
  108. And wait for master stderr message CMDCTL_STARTED
  109. And wait for master stderr message AUTH_SERVER_STARTED
  110. And wait for master stderr message XFROUT_STARTED
  111. And wait for master stderr message ZONEMGR_STARTED
  112. And I have bind10 running with configuration xfrin/retransfer_slave.conf
  113. And wait for bind10 stderr message BIND10_STARTED_CC
  114. And wait for bind10 stderr message CMDCTL_STARTED
  115. And wait for bind10 stderr message AUTH_SERVER_STARTED
  116. And wait for bind10 stderr message XFRIN_STARTED
  117. And wait for bind10 stderr message ZONEMGR_STARTED
  118. # Now we use the first step again to see if the file has been created
  119. The file data/test_nonexistent_db.sqlite3 should exist
  120. A query for www.example.org to [::1]:47806 should have rcode REFUSED
  121. When I send bind10 the command Xfrin retransfer example.org IN ::1 47807
  122. # It should complain once about invalid data, then again that the whole
  123. # zone is invalid and then reject it.
  124. And wait for new bind10 stderr message XFRIN_ZONE_INVALID
  125. And wait for new bind10 stderr message XFRIN_INVALID_ZONE_DATA
  126. # This can't be 'wait for new'
  127. Then wait for bind10 stderr message ZONEMGR_RECEIVE_XFRIN_FAILED
  128. # The zone still doesn't exist as it is rejected.
  129. # FIXME: This step fails. Probably an empty zone is created in the data
  130. # source :-|. This should be REFUSED, not SERVFAIL.
  131. A query for www.example.org to [::1]:47806 should have rcode SERVFAIL
  132. # TODO:
  133. # * IXFR - generate an sqlite db that contains the journal. Check it was
  134. # IXFR by logs.
  135. # * IXFR->AXFR fallback if IXFR is not available (even rejected or
  136. # something, not just the differences missing).
  137. # * Retransfer with short refresh time (without notify).
  138. Scenario: With differences
  139. # We transfer from one bind10 to other, just like in the Retransfer command
  140. # scenario. Just this time, the master contains the differences table
  141. # and the slave has a previous version of the zone, so we use the IXFR.
  142. Given I have bind10 running with configuration xfrin/retransfer_master_diffs.conf with cmdctl port 47804 as master
  143. And wait for master stderr message BIND10_STARTED_CC
  144. And wait for master stderr message CMDCTL_STARTED
  145. And wait for master stderr message AUTH_SERVER_STARTED
  146. And wait for master stderr message XFROUT_STARTED
  147. And wait for master stderr message ZONEMGR_STARTED
  148. And I have bind10 running with configuration xfrin/retransfer_slave_diffs.conf
  149. And wait for bind10 stderr message BIND10_STARTED_CC
  150. And wait for bind10 stderr message CMDCTL_STARTED
  151. And wait for bind10 stderr message AUTH_SERVER_STARTED
  152. And wait for bind10 stderr message XFRIN_STARTED
  153. And wait for bind10 stderr message ZONEMGR_STARTED
  154. A query for example. type SOA to [::1]:47806 should have rcode NOERROR
  155. The answer section of the last query response should be
  156. """
  157. example. 3600 IN SOA ns1.example. hostmaster.example. 94 3600 900 7200 300
  158. """
  159. When I send bind10 the command Xfrin retransfer example. IN ::1 47807
  160. Then wait for new bind10 stderr message XFRIN_GOT_INCREMENTAL_RESP
  161. Then wait for new bind10 stderr message XFRIN_IXFR_TRANSFER_SUCCESS not XFRIN_XFR_PROCESS_FAILURE
  162. # This can't be 'wait for new'
  163. Then wait for bind10 stderr message ZONEMGR_RECEIVE_XFRIN_SUCCESS
  164. A query for example. type SOA to [::1]:47806 should have rcode NOERROR
  165. The answer section of the last query response should be
  166. """
  167. example. 3600 IN SOA ns1.example. hostmaster.example. 100 3600 900 7200 300
  168. """