mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-31 10:13:14 -04:00 
			
		
		
		
	Fix transferring the zone from a master and the matching of notifies to source and dst IP addresses. Add `upstream` keyword as well, because it is needed for the same reasons as in the *file* middlware. Add some dire warning about upstream in the readme of both middlewares. Out of band testing, hidden by net build tag was added. Integration testing still needs to be setup.
		
			
				
	
	
		
			127 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // +build net
 | |
| 
 | |
| package test
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/miekg/dns"
 | |
| )
 | |
| 
 | |
| func TestSecondaryZoneTransfer(t *testing.T) {
 | |
| 	/*
 | |
| 		Test will only work when there is a CoreDNS running on part 32054
 | |
| 		with example.com and willing to transfer
 | |
| 		coredns -conf Corefile -dns.port 32054
 | |
| 		Corefile:
 | |
| 			example.com {
 | |
| 			    file example.com {
 | |
| 				transfer to 127.0.0.1:32053
 | |
| 			    }
 | |
| 			}
 | |
| 		example.com:
 | |
| 			example.com.		3600	IN	SOA	sns.dns.icann.org. noc.dns.icann.org. 2017042730 7200 3600 1209600 3600
 | |
| 
 | |
| 			example.com.		65118	IN	NS	a.iana-servers.net.
 | |
| 			example.com.		65118	IN	NS	b.iana-servers.net.
 | |
| 			cname.example.com.       434334  IN      CNAME   a.miek.nl.
 | |
| 	*/
 | |
| 
 | |
| 	corefile := `example.com:32053 {
 | |
| 		secondary {
 | |
| 			transfer from 127.0.0.1:32054
 | |
| 		}
 | |
| 	}
 | |
| 	`
 | |
| 
 | |
| 	sec, err := CoreDNSServer(corefile)
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("Could not get CoreDNS serving instance: %s", err)
 | |
| 	}
 | |
| 
 | |
| 	defer sec.Stop()
 | |
| 
 | |
| 	m := new(dns.Msg)
 | |
| 	m.SetQuestion("cname.example.com.", dns.TypeCNAME)
 | |
| 
 | |
| 	r, err := dns.Exchange(m, "127.0.0.1:32053")
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("Expected to receive reply, but didn't: %s", err)
 | |
| 	}
 | |
| 
 | |
| 	if len(r.Answer) == 0 {
 | |
| 		t.Fatalf("Expected answer section")
 | |
| 	}
 | |
| 
 | |
| 	if r.Answer[0].(*dns.CNAME).Target != "a.miek.nl." {
 | |
| 		t.Fatalf("Expected target of %s, got %s", "a.miek.nl.", r.Answer[0].(*dns.CNAME).Target)
 | |
| 	}
 | |
| 
 | |
| 	m = new(dns.Msg)
 | |
| 	m.SetQuestion("example.com.", dns.TypeSOA)
 | |
| 	r, err = dns.Exchange(m, "127.0.0.1:32053")
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("Expected to receive reply, but didn't: %s", err)
 | |
| 	}
 | |
| 	if len(r.Answer) == 0 {
 | |
| 		t.Fatalf("Expected answer section")
 | |
| 	}
 | |
| 	if r.Answer[0].(*dns.SOA).Serial != 2017042730 {
 | |
| 		t.Fatalf("Expected serial of %d, got %d", 2017042730, r.Answer[0].(*dns.SOA).Serial)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestSecondaryZoneTransferUpstream(t *testing.T) {
 | |
| 	/*
 | |
| 		Test will only work when there is a CoreDNS running on part 32054
 | |
| 		with example.com and willing to transfer
 | |
| 		coredns -conf Corefile -dns.port 32054
 | |
| 		Corefile:
 | |
| 			example.com {
 | |
| 			    file example.com {
 | |
| 				transfer to 127.0.0.1:32053
 | |
| 			    }
 | |
| 			}
 | |
| 		example.com:
 | |
| 			example.com.		3600	IN	SOA	sns.dns.icann.org. noc.dns.icann.org. 2017042730 7200 3600 1209600 3600
 | |
| 
 | |
| 			example.com.		65118	IN	NS	a.iana-servers.net.
 | |
| 			example.com.		65118	IN	NS	b.iana-servers.net.
 | |
| 			cname.example.com.       434334  IN      CNAME   a.miek.nl.
 | |
| 	*/
 | |
| 
 | |
| 	corefile := `example.com:32053 {
 | |
| 		secondary {
 | |
| 			transfer from 127.0.0.1:32054
 | |
| 			upstream 8.8.8.8
 | |
| 		}
 | |
| 	}
 | |
| 	`
 | |
| 
 | |
| 	sec, err := CoreDNSServer(corefile)
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("Could not get CoreDNS serving instance: %s", err)
 | |
| 	}
 | |
| 
 | |
| 	defer sec.Stop()
 | |
| 
 | |
| 	m := new(dns.Msg)
 | |
| 	m.SetQuestion("cname.example.com.", dns.TypeA)
 | |
| 
 | |
| 	r, err := dns.Exchange(m, "127.0.0.1:32053")
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("Expected to receive reply, but didn't: %s", err)
 | |
| 	}
 | |
| 
 | |
| 	if len(r.Answer) != 2 {
 | |
| 		t.Fatalf("Expected answer section, with 2 records, got %d", len(r.Answer))
 | |
| 	}
 | |
| 
 | |
| 	if r.Answer[0].(*dns.CNAME).Target != "a.miek.nl." {
 | |
| 		t.Fatalf("Expected target of %s, got %s", "a.miek.nl.", r.Answer[0].(*dns.CNAME).Target)
 | |
| 	}
 | |
| 	if r.Answer[1].Header().Name != "a.miek.nl." {
 | |
| 		t.Fatalf("Expected name of %s, got %s", "a.miek.nl.", r.Answer[1].Header().Name)
 | |
| 	}
 | |
| }
 |