| @ -0,0 +1,201 @@ | |||
| #! /usr/bin/env bats | |||
| load '/bats-support/load.bash' | |||
| load '/bats-assert/load.bash' | |||
| load '/getssl/test/test_helper.bash' | |||
| # This is run for every test | |||
| setup() { | |||
| for app in dig host nslookup | |||
| do | |||
| if [ -f /usr/bin/${app} ]; then | |||
| mv /usr/bin/${app} /usr/bin/${app}.getssl.bak | |||
| fi | |||
| done | |||
| . /getssl/getssl --source | |||
| find_dns_utils | |||
| _RUNNING_TEST=1 | |||
| _USE_DEBUG=0 | |||
| } | |||
| teardown() { | |||
| for app in dig host nslookup | |||
| do | |||
| if [ -f /usr/bin/${app}.getssl.bak ]; then | |||
| mv /usr/bin/${app}.getssl.bak /usr/bin/${app} | |||
| fi | |||
| done | |||
| } | |||
| teardown() { | |||
| if [ -f /usr/bin/host.getssl.bak ]; then | |||
| mv /usr/bin/host.getssl.bak /usr/bin/host | |||
| fi | |||
| if [ -f /usr/bin/nslookup.getssl.bak ]; then | |||
| mv /usr/bin/nslookup.getssl.bak /usr/bin/nslookup | |||
| fi | |||
| if [ -f /usr/bin/dig.getssl.bak ]; then | |||
| mv /usr/bin/dig.getssl.bak /usr/bin/dig | |||
| fi | |||
| } | |||
| @test "Check get_auth_dns using drill NS" { | |||
| if [ ! -f /usr/bin/drill ]; then | |||
| # Can't find drill package for centos8 | |||
| skip "Drill not installed on this system" | |||
| fi | |||
| # Test that get_auth_dns() handles scenario where NS query returns Authority section | |||
| # | |||
| # ************** EXAMPLE DRILL OUTPUT ************** | |||
| # | |||
| # ;; ANSWER SECTION: | |||
| # ubuntu-getssl.duckdns.org. 60 IN A 54.89.252.137 | |||
| # | |||
| # ;; AUTHORITY SECTION: | |||
| # duckdns.org. 600 IN NS ns2.duckdns.org. | |||
| # duckdns.org. 600 IN NS ns3.duckdns.org. | |||
| # duckdns.org. 600 IN NS ns1.duckdns.org. | |||
| # | |||
| # ;; ADDITIONAL SECTION: | |||
| # ns2.duckdns.org. 600 IN A 54.191.117.119 | |||
| # ns3.duckdns.org. 600 IN A 52.26.169.94 | |||
| # ns1.duckdns.org. 600 IN A 54.187.92.222 | |||
| # Disable SOA and CNAME check | |||
| _TEST_SKIP_CNAME_CALL=1 | |||
| _TEST_SKIP_SOA_CALL=1 | |||
| PUBLIC_DNS_SERVER=ns1.duckdns.org | |||
| CHECK_ALL_AUTH_DNS=false | |||
| run get_auth_dns ubuntu-getssl.duckdns.org | |||
| # Assert that we've found the primary_ns server | |||
| assert_output --regexp 'set primary_ns = ns[1-3]+\.duckdns\.org' | |||
| # Assert that we had to use drill NS | |||
| assert_line --partial 'Using drill NS' | |||
| # Check all Authoritive DNS servers are returned if requested | |||
| CHECK_ALL_AUTH_DNS=true | |||
| run get_auth_dns ubuntu-getssl.duckdns.org | |||
| assert_output --regexp 'set primary_ns = ns[1-3]+\.duckdns\.org ns[1-3]+\.duckdns\.org ns[1-3]+\.duckdns\.org' | |||
| } | |||
| @test "Check get_auth_dns using drill SOA" { | |||
| if [ ! -f /usr/bin/drill ]; then | |||
| # Can't find drill package for centos8 | |||
| skip "Drill not installed on this system" | |||
| fi | |||
| # Test that get_auth_dns() handles scenario where SOA query returns Authority section | |||
| # | |||
| # ************** EXAMPLE DRILL OUTPUT ************** | |||
| # | |||
| # ;; AUTHORITY SECTION: | |||
| # duckdns.org. 600 IN SOA ns3.duckdns.org. hostmaster.duckdns.org. 2019170803 6000 120 2419200 600 | |||
| # DuckDNS server returns nothing for SOA, so use public dns instead | |||
| PUBLIC_DNS_SERVER=1.0.0.1 | |||
| CHECK_ALL_AUTH_DNS=false | |||
| run get_auth_dns ubuntu-getssl.duckdns.org | |||
| # Assert that we've found the primary_ns server | |||
| assert_output --regexp 'set primary_ns = ns[1-3]+\.duckdns\.org' | |||
| # Assert that we had to use drill NS | |||
| assert_line --partial 'Using drill SOA' | |||
| refute_line --partial 'Using drill NS' | |||
| # Check all Authoritive DNS servers are returned if requested | |||
| CHECK_ALL_AUTH_DNS=true | |||
| run get_auth_dns ubuntu-getssl.duckdns.org | |||
| assert_output --regexp 'set primary_ns = ns[1-3]+\.duckdns\.org ns[1-3]+\.duckdns\.org ns[1-3]+\.duckdns\.org' | |||
| } | |||
| @test "Check get_auth_dns using drill CNAME (public dns)" { | |||
| if [ ! -f /usr/bin/drill ]; then | |||
| # Can't find drill package for centos8 | |||
| skip "Drill not installed on this system" | |||
| fi | |||
| # Test that get_auth_dns() handles scenario where CNAME query returns just a CNAME record | |||
| # | |||
| # ************** EXAMPLE drill OUTPUT ************** | |||
| # | |||
| # ;; ANSWER SECTION: | |||
| # www.duckdns.org. 600 IN CNAME DuckDNSAppELB-570522007.us-west-2.elb.amazonaws.com. | |||
| # Disable SOA check | |||
| _TEST_SKIP_SOA_CALL=1 | |||
| PUBLIC_DNS_SERVER=1.0.0.1 | |||
| CHECK_ALL_AUTH_DNS=false | |||
| run get_auth_dns www.duckdns.org | |||
| # Assert that we've found the primary_ns server | |||
| assert_output --regexp 'set primary_ns = ns.*\.awsdns.*\.com' | |||
| # Assert that we found a CNAME and use drill NS | |||
| assert_line --partial 'Using drill CNAME' | |||
| assert_line --partial 'Using drill NS' | |||
| # Check all Authoritive DNS servers are returned if requested | |||
| CHECK_ALL_AUTH_DNS=false | |||
| run get_auth_dns www.duckdns.org | |||
| assert_output --regexp 'set primary_ns = ns.*\.awsdns.*\.com' | |||
| } | |||
| @test "Check get_auth_dns using drill CNAME (duckdns)" { | |||
| if [ ! -f /usr/bin/drill ]; then | |||
| # Can't find drill package for centos8 | |||
| skip "Drill not installed on this system" | |||
| fi | |||
| # Test that get_auth_dns() handles scenario where CNAME query returns authority section containing NS records | |||
| # | |||
| # ************** EXAMPLE drill OUTPUT ************** | |||
| # | |||
| # ;; ANSWER SECTION: | |||
| # www.duckdns.org. 600 IN CNAME DuckDNSAppELB-570522007.us-west-2.elb.amazonaws.com. | |||
| # | |||
| # ;; AUTHORITY SECTION: | |||
| # duckdns.org. 600 IN NS ns1.duckdns.org. | |||
| # duckdns.org. 600 IN NS ns2.duckdns.org. | |||
| # duckdns.org. 600 IN NS ns3.duckdns.org. | |||
| # | |||
| # ;; ADDITIONAL SECTION: | |||
| # ns1.duckdns.org. 600 IN A 54.187.92.222 | |||
| # ns2.duckdns.org. 600 IN A 54.191.117.119 | |||
| # ns3.duckdns.org. 600 IN A 52.26.169.94 | |||
| # Disable SOA check | |||
| _TEST_SKIP_SOA_CALL=1 | |||
| PUBLIC_DNS_SERVER=ns1.duckdns.org | |||
| CHECK_ALL_AUTH_DNS=false | |||
| run get_auth_dns www.duckdns.org | |||
| # Assert that we've found the primary_ns server | |||
| assert_output --regexp 'set primary_ns = ns[1-3]+\.duckdns\.org' | |||
| # Assert that we found a CNAME but didn't use drill NS | |||
| assert_line --partial 'Using drill CNAME' | |||
| refute_line --partial 'Using drill NS' | |||
| # Check all Authoritive DNS servers are returned if requested | |||
| CHECK_ALL_AUTH_DNS=true | |||
| run get_auth_dns www.duckdns.org | |||
| assert_output --regexp 'set primary_ns = ns[1-3]+\.duckdns\.org ns[1-3]+\.duckdns\.org ns[1-3]+\.duckdns\.org' | |||
| } | |||