Browse Source

[2796] update lettuce tests with a change of a terrain

Update lettuce tests for 'qryrecursion'. Add an argument to the terrain
to control RD bit in the query.
Yoshitaka Aharen 12 years ago
parent
commit
fdb231c9e3

+ 1 - 1
tests/lettuce/features/auth_badzone.feature

@@ -24,7 +24,7 @@ Feature: Authoritative DNS server with a bad zone
         And bind10 module Resolver should not be running
         And bind10 module Resolver should not be running
 
 
         A query for www.example.org should have rcode NOERROR
         A query for www.example.org should have rcode NOERROR
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have ancount 1
         The last query response should have ancount 1
         The last query response should have nscount 2
         The last query response should have nscount 2
         The last query response should have adcount 2
         The last query response should have adcount 2

+ 1 - 1
tests/lettuce/features/example.feature

@@ -120,7 +120,7 @@ Feature: Example feature
         The last query response should have adcount 0
         The last query response should have adcount 0
         # When checking flags, we must pass them exactly as they appear in
         # When checking flags, we must pass them exactly as they appear in
         # the output of dig.
         # the output of dig.
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
 
 
         A query for www.example.org type TXT should have rcode NOERROR
         A query for www.example.org type TXT should have rcode NOERROR
         The last query response should have ancount 0
         The last query response should have ancount 0

+ 14 - 14
tests/lettuce/features/nsec3_auth.feature

@@ -25,7 +25,7 @@ Feature: NSEC3 Authoritative service
         And bind10 module StatsHttpd should not be running
         And bind10 module StatsHttpd should not be running
 
 
         A dnssec query for a.c.x.w.example. should have rcode NXDOMAIN
         A dnssec query for a.c.x.w.example. should have rcode NXDOMAIN
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have edns_flags do
         The last query response should have edns_flags do
         The last query response should have ancount 0
         The last query response should have ancount 0
         The last query response should have nscount 8
         The last query response should have nscount 8
@@ -57,7 +57,7 @@ Feature: NSEC3 Authoritative service
         And bind10 module StatsHttpd should not be running
         And bind10 module StatsHttpd should not be running
 
 
         A dnssec query for ns1.example. type MX should have rcode NOERROR
         A dnssec query for ns1.example. type MX should have rcode NOERROR
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have edns_flags do
         The last query response should have edns_flags do
         The last query response should have ancount 0
         The last query response should have ancount 0
         The last query response should have nscount 4
         The last query response should have nscount 4
@@ -85,7 +85,7 @@ Feature: NSEC3 Authoritative service
         And bind10 module StatsHttpd should not be running
         And bind10 module StatsHttpd should not be running
 
 
         A dnssec query for y.w.example. should have rcode NOERROR
         A dnssec query for y.w.example. should have rcode NOERROR
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have edns_flags do
         The last query response should have edns_flags do
         The last query response should have ancount 0
         The last query response should have ancount 0
         The last query response should have nscount 4
         The last query response should have nscount 4
@@ -113,7 +113,7 @@ Feature: NSEC3 Authoritative service
         And bind10 module StatsHttpd should not be running
         And bind10 module StatsHttpd should not be running
 
 
         A dnssec query for mc.c.example. type MX should have rcode NOERROR
         A dnssec query for mc.c.example. type MX should have rcode NOERROR
-        The last query response should have flags qr rd
+        The last query response should have flags qr
         The last query response should have edns_flags do
         The last query response should have edns_flags do
         The last query response should have ancount 0
         The last query response should have ancount 0
         The last query response should have nscount 6
         The last query response should have nscount 6
@@ -148,7 +148,7 @@ Feature: NSEC3 Authoritative service
         And bind10 module StatsHttpd should not be running
         And bind10 module StatsHttpd should not be running
 
 
         A dnssec query for a.z.w.example. type MX should have rcode NOERROR
         A dnssec query for a.z.w.example. type MX should have rcode NOERROR
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have edns_flags do
         The last query response should have edns_flags do
         The last query response should have ancount 2
         The last query response should have ancount 2
         The last query response should have nscount 5
         The last query response should have nscount 5
@@ -195,7 +195,7 @@ Feature: NSEC3 Authoritative service
         And bind10 module StatsHttpd should not be running
         And bind10 module StatsHttpd should not be running
 
 
         A dnssec query for a.z.w.example. type AAAA should have rcode NOERROR
         A dnssec query for a.z.w.example. type AAAA should have rcode NOERROR
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have edns_flags do
         The last query response should have edns_flags do
         The last query response should have ancount 0
         The last query response should have ancount 0
         The last query response should have nscount 8
         The last query response should have nscount 8
@@ -227,7 +227,7 @@ Feature: NSEC3 Authoritative service
         And bind10 module StatsHttpd should not be running
         And bind10 module StatsHttpd should not be running
 
 
         A dnssec query for example. type DS should have rcode NOERROR
         A dnssec query for example. type DS should have rcode NOERROR
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have edns_flags do
         The last query response should have edns_flags do
         The last query response should have ancount 0
         The last query response should have ancount 0
         The last query response should have nscount 4
         The last query response should have nscount 4
@@ -259,7 +259,7 @@ Feature: NSEC3 Authoritative service
         And bind10 module StatsHttpd should not be running
         And bind10 module StatsHttpd should not be running
 
 
         A dnssec query for b.x.w.example. should have rcode NXDOMAIN
         A dnssec query for b.x.w.example. should have rcode NXDOMAIN
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have edns_flags do
         The last query response should have edns_flags do
         The last query response should have ancount 0
         The last query response should have ancount 0
         The last query response should have nscount 6
         The last query response should have nscount 6
@@ -289,7 +289,7 @@ Feature: NSEC3 Authoritative service
         And bind10 module StatsHttpd should not be running
         And bind10 module StatsHttpd should not be running
 
 
         A dnssec query for a.w.example. should have rcode NOERROR
         A dnssec query for a.w.example. should have rcode NOERROR
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have edns_flags do
         The last query response should have edns_flags do
         The last query response should have ancount 0
         The last query response should have ancount 0
         The last query response should have nscount 6
         The last query response should have nscount 6
@@ -319,7 +319,7 @@ Feature: NSEC3 Authoritative service
         And bind10 module StatsHttpd should not be running
         And bind10 module StatsHttpd should not be running
 
 
         A dnssec query for *.w.example. type MX should have rcode NOERROR
         A dnssec query for *.w.example. type MX should have rcode NOERROR
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have edns_flags do
         The last query response should have edns_flags do
         The last query response should have ancount 2
         The last query response should have ancount 2
         The last query response should have nscount 3
         The last query response should have nscount 3
@@ -362,7 +362,7 @@ Feature: NSEC3 Authoritative service
         And bind10 module StatsHttpd should not be running
         And bind10 module StatsHttpd should not be running
 
 
         A dnssec query for *.w.example. type A should have rcode NOERROR
         A dnssec query for *.w.example. type A should have rcode NOERROR
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have edns_flags do
         The last query response should have edns_flags do
         The last query response should have ancount 0
         The last query response should have ancount 0
         The last query response should have nscount 4
         The last query response should have nscount 4
@@ -390,7 +390,7 @@ Feature: NSEC3 Authoritative service
         And bind10 module StatsHttpd should not be running
         And bind10 module StatsHttpd should not be running
 
 
         A dnssec query for 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. type NSEC3 should have rcode NXDOMAIN
         A dnssec query for 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. type NSEC3 should have rcode NXDOMAIN
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have edns_flags do
         The last query response should have edns_flags do
         The last query response should have ancount 0
         The last query response should have ancount 0
         The last query response should have nscount 8
         The last query response should have nscount 8
@@ -422,7 +422,7 @@ Feature: NSEC3 Authoritative service
         And bind10 module StatsHttpd should not be running
         And bind10 module StatsHttpd should not be running
 
 
         A dnssec query for ai.example. type DS should have rcode NOERROR
         A dnssec query for ai.example. type DS should have rcode NOERROR
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have edns_flags do
         The last query response should have edns_flags do
         The last query response should have ancount 0
         The last query response should have ancount 0
         The last query response should have nscount 4
         The last query response should have nscount 4
@@ -450,7 +450,7 @@ Feature: NSEC3 Authoritative service
         And bind10 module StatsHttpd should not be running
         And bind10 module StatsHttpd should not be running
 
 
         A dnssec query for c.example. type DS should have rcode NOERROR
         A dnssec query for c.example. type DS should have rcode NOERROR
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have edns_flags do
         The last query response should have edns_flags do
         The last query response should have ancount 0
         The last query response should have ancount 0
         The last query response should have nscount 6
         The last query response should have nscount 6

+ 6 - 49
tests/lettuce/features/queries.feature

@@ -66,16 +66,12 @@ Feature: Querying feature
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         # make sure Auth module receives a command
         # make sure Auth module receives a command
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
-        # make sure Auth module replied to the command
-        And wait for new bind10 stderr message CC_REPLY
-        # make sure the response is for 'getstats'
-        And wait for new bind10 stderr message v4
         Then I query statistics zones of bind10 module Auth
         Then I query statistics zones of bind10 module Auth
         And last bindctl output should not contain "error"
         And last bindctl output should not contain "error"
         The statistics counters are 0 in category .Auth.zones._SERVER_
         The statistics counters are 0 in category .Auth.zones._SERVER_
 
 
         A query for www.example.org should have rcode NOERROR
         A query for www.example.org should have rcode NOERROR
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have ancount 1
         The last query response should have ancount 1
         The last query response should have nscount 2
         The last query response should have nscount 2
         The last query response should have adcount 2
         The last query response should have adcount 2
@@ -102,10 +98,6 @@ Feature: Querying feature
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         # make sure Auth module receives a command
         # make sure Auth module receives a command
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
-        # make sure Auth module replied to the command
-        And wait for new bind10 stderr message CC_REPLY
-        # make sure the response is for 'getstats'
-        And wait for new bind10 stderr message v4
         Then I query statistics zones of bind10 module Auth
         Then I query statistics zones of bind10 module Auth
         And last bindctl output should not contain "error"
         And last bindctl output should not contain "error"
         The statistics counters are 0 in category .Auth.zones._SERVER_ except for the following items
         The statistics counters are 0 in category .Auth.zones._SERVER_ except for the following items
@@ -121,7 +113,7 @@ Feature: Querying feature
 
 
         # Repeat of the above
         # Repeat of the above
         A query for www.example.org should have rcode NOERROR
         A query for www.example.org should have rcode NOERROR
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have ancount 1
         The last query response should have ancount 1
         The last query response should have nscount 2
         The last query response should have nscount 2
         The last query response should have adcount 2
         The last query response should have adcount 2
@@ -148,10 +140,6 @@ Feature: Querying feature
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         # make sure Auth module receives a command
         # make sure Auth module receives a command
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
-        # make sure Auth module replied to the command
-        And wait for new bind10 stderr message CC_REPLY
-        # make sure the response is for 'getstats'
-        And wait for new bind10 stderr message v4
         Then I query statistics zones of bind10 module Auth
         Then I query statistics zones of bind10 module Auth
         And last bindctl output should not contain "error"
         And last bindctl output should not contain "error"
         The statistics counters are 0 in category .Auth.zones._SERVER_ except for the following items
         The statistics counters are 0 in category .Auth.zones._SERVER_ except for the following items
@@ -165,7 +153,7 @@ Feature: Querying feature
           | rcode.noerror |          2 |
           | rcode.noerror |          2 |
 
 
         # And now query something completely different
         # And now query something completely different
-        A query for nosuchname.example.org should have rcode NXDOMAIN
+        A recursive query for nosuchname.example.org should have rcode NXDOMAIN
         The last query response should have flags qr aa rd
         The last query response should have flags qr aa rd
         The last query response should have ancount 0
         The last query response should have ancount 0
         The last query response should have nscount 1
         The last query response should have nscount 1
@@ -182,10 +170,6 @@ Feature: Querying feature
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         # make sure Auth module receives a command
         # make sure Auth module receives a command
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
-        # make sure Auth module replied to the command
-        And wait for new bind10 stderr message CC_REPLY
-        # make sure the response is for 'getstats'
-        And wait for new bind10 stderr message v4
         Then I query statistics zones of bind10 module Auth
         Then I query statistics zones of bind10 module Auth
         And last bindctl output should not contain "error"
         And last bindctl output should not contain "error"
         The statistics counters are 0 in category .Auth.zones._SERVER_ except for the following items
         The statistics counters are 0 in category .Auth.zones._SERVER_ except for the following items
@@ -196,6 +180,7 @@ Feature: Querying feature
           | responses      |          3 |
           | responses      |          3 |
           | qrysuccess     |          2 |
           | qrysuccess     |          2 |
           | qryauthans     |          3 |
           | qryauthans     |          3 |
+          | qryrecursion   |          1 |
           | rcode.noerror  |          2 |
           | rcode.noerror  |          2 |
           | rcode.nxdomain |          1 |
           | rcode.nxdomain |          1 |
 
 
@@ -216,16 +201,12 @@ Feature: Querying feature
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         # make sure Auth module receives a command
         # make sure Auth module receives a command
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
-        # make sure Auth module replied to the command
-        And wait for new bind10 stderr message CC_REPLY
-        # make sure the response is for 'getstats'
-        And wait for new bind10 stderr message v4
         Then I query statistics zones of bind10 module Auth
         Then I query statistics zones of bind10 module Auth
         And last bindctl output should not contain "error"
         And last bindctl output should not contain "error"
         The statistics counters are 0 in category .Auth.zones._SERVER_
         The statistics counters are 0 in category .Auth.zones._SERVER_
 
 
         A query for example.org type ANY should have rcode NOERROR
         A query for example.org type ANY should have rcode NOERROR
-        The last query response should have flags qr aa rd
+        The last query response should have flags qr aa
         The last query response should have ancount 4
         The last query response should have ancount 4
         The last query response should have nscount 0
         The last query response should have nscount 0
         The last query response should have adcount 3
         The last query response should have adcount 3
@@ -250,10 +231,6 @@ Feature: Querying feature
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         # make sure Auth module receives a command
         # make sure Auth module receives a command
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
-        # make sure Auth module replied to the command
-        And wait for new bind10 stderr message CC_REPLY
-        # make sure the response is for 'getstats'
-        And wait for new bind10 stderr message v4
         Then I query statistics zones of bind10 module Auth
         Then I query statistics zones of bind10 module Auth
         And last bindctl output should not contain "error"
         And last bindctl output should not contain "error"
         The statistics counters are 0 in category .Auth.zones._SERVER_ except for the following items
         The statistics counters are 0 in category .Auth.zones._SERVER_ except for the following items
@@ -275,16 +252,12 @@ Feature: Querying feature
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         # make sure Auth module receives a command
         # make sure Auth module receives a command
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
-        # make sure Auth module replied to the command
-        And wait for new bind10 stderr message CC_REPLY
-        # make sure the response is for 'getstats'
-        And wait for new bind10 stderr message v4
         Then I query statistics zones of bind10 module Auth
         Then I query statistics zones of bind10 module Auth
         And last bindctl output should not contain "error"
         And last bindctl output should not contain "error"
         The statistics counters are 0 in category .Auth.zones._SERVER_
         The statistics counters are 0 in category .Auth.zones._SERVER_
 
 
         A dnssec query for www.sub.example.org type AAAA should have rcode NOERROR
         A dnssec query for www.sub.example.org type AAAA should have rcode NOERROR
-        The last query response should have flags qr rd
+        The last query response should have flags qr
         The last query response should have edns_flags do
         The last query response should have edns_flags do
         The last query response should have ancount 0
         The last query response should have ancount 0
         The last query response should have nscount 1
         The last query response should have nscount 1
@@ -305,10 +278,6 @@ Feature: Querying feature
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         # make sure Auth module receives a command
         # make sure Auth module receives a command
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
-        # make sure Auth module replied to the command
-        And wait for new bind10 stderr message CC_REPLY
-        # make sure the response is for 'getstats'
-        And wait for new bind10 stderr message v4
         Then I query statistics zones of bind10 module Auth
         Then I query statistics zones of bind10 module Auth
         And last bindctl output should not contain "error"
         And last bindctl output should not contain "error"
         The statistics counters are 0 in category .Auth.zones._SERVER_ except for the following items
         The statistics counters are 0 in category .Auth.zones._SERVER_ except for the following items
@@ -342,10 +311,6 @@ Feature: Querying feature
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         # make sure Auth module receives a command
         # make sure Auth module receives a command
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
-        # make sure Auth module replied to the command
-        And wait for new bind10 stderr message CC_REPLY
-        # make sure the response is for 'getstats'
-        And wait for new bind10 stderr message v4
         Then I query statistics zones of bind10 module Auth
         Then I query statistics zones of bind10 module Auth
         And last bindctl output should not contain "error"
         And last bindctl output should not contain "error"
         The statistics counters are 0 in category .Auth.zones._SERVER_
         The statistics counters are 0 in category .Auth.zones._SERVER_
@@ -360,10 +325,6 @@ Feature: Querying feature
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         # make sure Auth module receives a command
         # make sure Auth module receives a command
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
-        # make sure Auth module replied to the command
-        And wait for new bind10 stderr message CC_REPLY
-        # make sure the response is for 'getstats'
-        And wait for new bind10 stderr message v4
         Then I query statistics zones of bind10 module Auth
         Then I query statistics zones of bind10 module Auth
         And last bindctl output should not contain "error"
         And last bindctl output should not contain "error"
         The statistics counters are 0 in category .Auth.zones._SERVER_ except for the following items
         The statistics counters are 0 in category .Auth.zones._SERVER_ except for the following items
@@ -389,10 +350,6 @@ Feature: Querying feature
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         When I wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST
         # make sure Auth module receives a command
         # make sure Auth module receives a command
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
         And wait for new bind10 stderr message AUTH_RECEIVED_COMMAND
-        # make sure Auth module replied to the command
-        And wait for new bind10 stderr message CC_REPLY
-        # make sure the response is for 'getstats'
-        And wait for new bind10 stderr message v4
         Then I query statistics zones of bind10 module Auth
         Then I query statistics zones of bind10 module Auth
         And last bindctl output should not contain "error"
         And last bindctl output should not contain "error"
         The statistics counters are 0 in category .Auth.zones._SERVER_ except for the following items
         The statistics counters are 0 in category .Auth.zones._SERVER_ except for the following items

+ 3 - 3
tests/lettuce/features/resolver_basic.feature

@@ -24,13 +24,13 @@ Feature: Basic Resolver
         And bind10 module StatsHttpd should not be running
         And bind10 module StatsHttpd should not be running
 
 
         # The ACL is set to reject any queries
         # The ACL is set to reject any queries
-        A query for l.root-servers.net. should have rcode REFUSED
+        A recursive query for l.root-servers.net. should have rcode REFUSED
 
 
         # Test whether acl ACCEPT works
         # Test whether acl ACCEPT works
         When I set bind10 configuration Resolver/query_acl[0] to {"action": "ACCEPT", "from": "127.0.0.1"}
         When I set bind10 configuration Resolver/query_acl[0] to {"action": "ACCEPT", "from": "127.0.0.1"}
         # This address is currently hardcoded, so shouldn't cause outside traffic
         # This address is currently hardcoded, so shouldn't cause outside traffic
-        A query for l.root-servers.net. should have rcode NOERROR
+        A recursive query for l.root-servers.net. should have rcode NOERROR
 
 
         # Check whether setting the ACL to reject again works
         # Check whether setting the ACL to reject again works
         When I set bind10 configuration Resolver/query_acl[0] to {"action": "REJECT", "from": "127.0.0.1"}
         When I set bind10 configuration Resolver/query_acl[0] to {"action": "REJECT", "from": "127.0.0.1"}
-        A query for l.root-servers.net. should have rcode REFUSED
+        A recursive query for l.root-servers.net. should have rcode REFUSED

+ 10 - 2
tests/lettuce/features/terrain/querying.py

@@ -200,14 +200,19 @@ class QueryResult(object):
         """
         """
         pass
         pass
 
 
-@step('A (dnssec )?query for ([\S]+) (?:type ([A-Z0-9]+) )?' +
+@step('A (dnssec )?(recursive )?query for ([\S]+) (?:type ([A-Z0-9]+) )?' +
       '(?:class ([A-Z]+) )?(?:to ([^:]+|\[[0-9a-fA-F:]+\])(?::([0-9]+))? )?' +
       '(?:class ([A-Z]+) )?(?:to ([^:]+|\[[0-9a-fA-F:]+\])(?::([0-9]+))? )?' +
       'should have rcode ([\w.]+)')
       'should have rcode ([\w.]+)')
-def query(step, dnssec, query_name, qtype, qclass, addr, port, rcode):
+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
     Run a query, check the rcode of the response, and store the query
     result in world.last_query_result.
     result in world.last_query_result.
     Parameters:
     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 <name>'): The domain name to query.
     query_name ('query for <name>'): The domain name to query.
     qtype ('type <type>', optional): The RR type to query. Defaults to A.
     qtype ('type <type>', optional): The RR type to query. Defaults to A.
     qclass ('class <class>', optional): The RR class to query. Defaults to IN.
     qclass ('class <class>', optional): The RR class to query. Defaults to IN.
@@ -234,6 +239,9 @@ def query(step, dnssec, query_name, qtype, qclass, addr, port, rcode):
         # additional counts, so unless we need dnssec, explicitly
         # additional counts, so unless we need dnssec, explicitly
         # disable edns0
         # disable edns0
         additional_arguments.append("+noedns")
         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,
     query_result = QueryResult(query_name, qtype, qclass, addr, port,
                                additional_arguments)
                                additional_arguments)
     assert query_result.rcode == rcode,\
     assert query_result.rcode == rcode,\