mirror of https://github.com/hashicorp/consul
chore(v2dns): remove ent/ce split from router
parent
6661620907
commit
0cc49cbd12
|
@ -1426,3 +1426,44 @@ func makeTXTRecord(name string, result *discovery.Result, ttl uint32) []dns.RR {
|
||||||
}
|
}
|
||||||
return extra
|
return extra
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// canonicalNameForResult returns the canonical name for a discovery result.
|
||||||
|
func canonicalNameForResult(resultType discovery.ResultType, target, domain string,
|
||||||
|
tenancy discovery.ResultTenancy, portName string) string {
|
||||||
|
switch resultType {
|
||||||
|
case discovery.ResultTypeService:
|
||||||
|
if tenancy.Namespace != "" {
|
||||||
|
return fmt.Sprintf("%s.%s.%s.%s.%s", target, "service", tenancy.Namespace, tenancy.Datacenter, domain)
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%s.%s.%s.%s", target, "service", tenancy.Datacenter, domain)
|
||||||
|
case discovery.ResultTypeNode:
|
||||||
|
if tenancy.PeerName != "" && tenancy.Partition != "" {
|
||||||
|
// We must return a more-specific DNS name for peering so
|
||||||
|
// that there is no ambiguity with lookups.
|
||||||
|
// Nodes are always registered in the default namespace, so
|
||||||
|
// the `.ns` qualifier is not required.
|
||||||
|
return fmt.Sprintf("%s.node.%s.peer.%s.ap.%s",
|
||||||
|
target,
|
||||||
|
tenancy.PeerName,
|
||||||
|
tenancy.Partition,
|
||||||
|
domain)
|
||||||
|
}
|
||||||
|
if tenancy.PeerName != "" {
|
||||||
|
// We must return a more-specific DNS name for peering so
|
||||||
|
// that there is no ambiguity with lookups.
|
||||||
|
return fmt.Sprintf("%s.node.%s.peer.%s",
|
||||||
|
target,
|
||||||
|
tenancy.PeerName,
|
||||||
|
domain)
|
||||||
|
}
|
||||||
|
// Return a simpler format for non-peering nodes.
|
||||||
|
return fmt.Sprintf("%s.node.%s.%s", target, tenancy.Datacenter, domain)
|
||||||
|
case discovery.ResultTypeWorkload:
|
||||||
|
// TODO (v2-dns): it doesn't appear this is being used to return a result. Need to investigate and refactor
|
||||||
|
if portName != "" {
|
||||||
|
return fmt.Sprintf("%s.port.%s.workload.%s", portName, target, domain)
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%s.workload.%s", target, domain)
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
// Copyright (c) HashiCorp, Inc.
|
|
||||||
// SPDX-License-Identifier: BUSL-1.1
|
|
||||||
|
|
||||||
//go:build !consulent
|
|
||||||
|
|
||||||
package dns
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/hashicorp/consul/agent/discovery"
|
|
||||||
)
|
|
||||||
|
|
||||||
// canonicalNameForResult returns the canonical name for a discovery result.
|
|
||||||
func canonicalNameForResult(resultType discovery.ResultType, target, domain string,
|
|
||||||
tenancy discovery.ResultTenancy, portName string) string {
|
|
||||||
switch resultType {
|
|
||||||
case discovery.ResultTypeService:
|
|
||||||
return fmt.Sprintf("%s.%s.%s.%s", target, "service", tenancy.Datacenter, domain)
|
|
||||||
case discovery.ResultTypeNode:
|
|
||||||
if tenancy.PeerName != "" {
|
|
||||||
// We must return a more-specific DNS name for peering so
|
|
||||||
// that there is no ambiguity with lookups.
|
|
||||||
return fmt.Sprintf("%s.node.%s.peer.%s",
|
|
||||||
target,
|
|
||||||
tenancy.PeerName,
|
|
||||||
domain)
|
|
||||||
}
|
|
||||||
// Return a simpler format for non-peering nodes.
|
|
||||||
return fmt.Sprintf("%s.node.%s.%s", target, tenancy.Datacenter, domain)
|
|
||||||
case discovery.ResultTypeWorkload:
|
|
||||||
if portName != "" {
|
|
||||||
return fmt.Sprintf("%s.port.%s.workload.%s", portName, target, domain)
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("%s.workload.%s", target, domain)
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
|
@ -1,149 +0,0 @@
|
||||||
// Copyright (c) HashiCorp, Inc.
|
|
||||||
// SPDX-License-Identifier: BUSL-1.1
|
|
||||||
|
|
||||||
//go:build !consulent
|
|
||||||
|
|
||||||
package dns
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/miekg/dns"
|
|
||||||
"github.com/stretchr/testify/mock"
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
|
|
||||||
"github.com/hashicorp/consul/agent/discovery"
|
|
||||||
)
|
|
||||||
|
|
||||||
func getAdditionalTestCases(t *testing.T) []HandleTestCase {
|
|
||||||
// PTR Lookups
|
|
||||||
return []HandleTestCase{
|
|
||||||
// PTR Lookups
|
|
||||||
{
|
|
||||||
name: "PTR Lookup for node w/ peer name, query type is ANY",
|
|
||||||
request: &dns.Msg{
|
|
||||||
MsgHdr: dns.MsgHdr{
|
|
||||||
Opcode: dns.OpcodeQuery,
|
|
||||||
},
|
|
||||||
Question: []dns.Question{
|
|
||||||
{
|
|
||||||
Name: "4.3.2.1.in-addr.arpa",
|
|
||||||
Qtype: dns.TypeANY,
|
|
||||||
Qclass: dns.ClassINET,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
configureDataFetcher: func(fetcher discovery.CatalogDataFetcher) {
|
|
||||||
results := []*discovery.Result{
|
|
||||||
{
|
|
||||||
Node: &discovery.Location{Name: "foo", Address: "1.2.3.4"},
|
|
||||||
Type: discovery.ResultTypeNode,
|
|
||||||
Service: &discovery.Location{Name: "foo", Address: "foo"},
|
|
||||||
Tenancy: discovery.ResultTenancy{
|
|
||||||
Datacenter: "dc2",
|
|
||||||
PeerName: "peer1",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
fetcher.(*discovery.MockCatalogDataFetcher).
|
|
||||||
On("FetchRecordsByIp", mock.Anything, mock.Anything).
|
|
||||||
Return(results, nil).
|
|
||||||
Run(func(args mock.Arguments) {
|
|
||||||
req := args.Get(1).(net.IP)
|
|
||||||
|
|
||||||
require.NotNil(t, req)
|
|
||||||
require.Equal(t, "1.2.3.4", req.String())
|
|
||||||
})
|
|
||||||
},
|
|
||||||
response: &dns.Msg{
|
|
||||||
MsgHdr: dns.MsgHdr{
|
|
||||||
Opcode: dns.OpcodeQuery,
|
|
||||||
Response: true,
|
|
||||||
Authoritative: true,
|
|
||||||
},
|
|
||||||
Compress: true,
|
|
||||||
Question: []dns.Question{
|
|
||||||
{
|
|
||||||
Name: "4.3.2.1.in-addr.arpa.",
|
|
||||||
Qtype: dns.TypeANY,
|
|
||||||
Qclass: dns.ClassINET,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Answer: []dns.RR{
|
|
||||||
&dns.PTR{
|
|
||||||
Hdr: dns.RR_Header{
|
|
||||||
Name: "4.3.2.1.in-addr.arpa.",
|
|
||||||
Rrtype: dns.TypePTR,
|
|
||||||
Class: dns.ClassINET,
|
|
||||||
},
|
|
||||||
Ptr: "foo.node.peer1.peer.consul.",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "PTR Lookup for service, query type is PTR",
|
|
||||||
request: &dns.Msg{
|
|
||||||
MsgHdr: dns.MsgHdr{
|
|
||||||
Opcode: dns.OpcodeQuery,
|
|
||||||
},
|
|
||||||
Question: []dns.Question{
|
|
||||||
{
|
|
||||||
Name: "4.3.2.1.in-addr.arpa",
|
|
||||||
Qtype: dns.TypePTR,
|
|
||||||
Qclass: dns.ClassINET,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
configureDataFetcher: func(fetcher discovery.CatalogDataFetcher) {
|
|
||||||
results := []*discovery.Result{
|
|
||||||
{
|
|
||||||
Node: &discovery.Location{Name: "foo", Address: "1.2.3.4"},
|
|
||||||
Service: &discovery.Location{Name: "foo", Address: "foo"},
|
|
||||||
Type: discovery.ResultTypeService,
|
|
||||||
Tenancy: discovery.ResultTenancy{
|
|
||||||
Datacenter: "dc2",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
fetcher.(*discovery.MockCatalogDataFetcher).
|
|
||||||
On("FetchRecordsByIp", mock.Anything, mock.Anything).
|
|
||||||
Return(results, nil).
|
|
||||||
Run(func(args mock.Arguments) {
|
|
||||||
req := args.Get(1).(net.IP)
|
|
||||||
|
|
||||||
require.NotNil(t, req)
|
|
||||||
require.Equal(t, "1.2.3.4", req.String())
|
|
||||||
})
|
|
||||||
},
|
|
||||||
response: &dns.Msg{
|
|
||||||
MsgHdr: dns.MsgHdr{
|
|
||||||
Opcode: dns.OpcodeQuery,
|
|
||||||
Response: true,
|
|
||||||
Authoritative: true,
|
|
||||||
},
|
|
||||||
Compress: true,
|
|
||||||
Question: []dns.Question{
|
|
||||||
{
|
|
||||||
Name: "4.3.2.1.in-addr.arpa.",
|
|
||||||
Qtype: dns.TypePTR,
|
|
||||||
Qclass: dns.ClassINET,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Answer: []dns.RR{
|
|
||||||
&dns.PTR{
|
|
||||||
Hdr: dns.RR_Header{
|
|
||||||
Name: "4.3.2.1.in-addr.arpa.",
|
|
||||||
Rrtype: dns.TypePTR,
|
|
||||||
Class: dns.ClassINET,
|
|
||||||
},
|
|
||||||
Ptr: "foo.service.dc2.consul.",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -8,10 +8,11 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/consul/agent/discovery"
|
|
||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
"github.com/stretchr/testify/mock"
|
"github.com/stretchr/testify/mock"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
"github.com/hashicorp/consul/agent/discovery"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_HandleRequest_ServiceQuestions(t *testing.T) {
|
func Test_HandleRequest_ServiceQuestions(t *testing.T) {
|
||||||
|
@ -159,8 +160,6 @@ func Test_HandleRequest_ServiceQuestions(t *testing.T) {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
testCases = append(testCases, getAdditionalTestCases(t)...)
|
|
||||||
|
|
||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
runHandleTestCases(t, tc)
|
runHandleTestCases(t, tc)
|
|
@ -1468,7 +1468,322 @@ func Test_HandleRequest(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// TODO (v2-dns): add a test to make sure only 3 records are returned
|
{
|
||||||
|
name: "[ENT] PTR Lookup for node w/ peer name in default partition, query type is ANY",
|
||||||
|
request: &dns.Msg{
|
||||||
|
MsgHdr: dns.MsgHdr{
|
||||||
|
Opcode: dns.OpcodeQuery,
|
||||||
|
},
|
||||||
|
Question: []dns.Question{
|
||||||
|
{
|
||||||
|
Name: "4.3.2.1.in-addr.arpa",
|
||||||
|
Qtype: dns.TypeANY,
|
||||||
|
Qclass: dns.ClassINET,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
configureDataFetcher: func(fetcher discovery.CatalogDataFetcher) {
|
||||||
|
results := []*discovery.Result{
|
||||||
|
{
|
||||||
|
Node: &discovery.Location{Name: "foo", Address: "1.2.3.4"},
|
||||||
|
Type: discovery.ResultTypeNode,
|
||||||
|
Service: &discovery.Location{Name: "foo-web", Address: "foo"},
|
||||||
|
Tenancy: discovery.ResultTenancy{
|
||||||
|
Datacenter: "dc2",
|
||||||
|
PeerName: "peer1",
|
||||||
|
Partition: "default",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
fetcher.(*discovery.MockCatalogDataFetcher).
|
||||||
|
On("FetchRecordsByIp", mock.Anything, mock.Anything).
|
||||||
|
Return(results, nil).
|
||||||
|
Run(func(args mock.Arguments) {
|
||||||
|
req := args.Get(1).(net.IP)
|
||||||
|
|
||||||
|
require.NotNil(t, req)
|
||||||
|
require.Equal(t, "1.2.3.4", req.String())
|
||||||
|
})
|
||||||
|
},
|
||||||
|
response: &dns.Msg{
|
||||||
|
MsgHdr: dns.MsgHdr{
|
||||||
|
Opcode: dns.OpcodeQuery,
|
||||||
|
Response: true,
|
||||||
|
Authoritative: true,
|
||||||
|
},
|
||||||
|
Compress: true,
|
||||||
|
Question: []dns.Question{
|
||||||
|
{
|
||||||
|
Name: "4.3.2.1.in-addr.arpa.",
|
||||||
|
Qtype: dns.TypeANY,
|
||||||
|
Qclass: dns.ClassINET,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Answer: []dns.RR{
|
||||||
|
&dns.PTR{
|
||||||
|
Hdr: dns.RR_Header{
|
||||||
|
Name: "4.3.2.1.in-addr.arpa.",
|
||||||
|
Rrtype: dns.TypePTR,
|
||||||
|
Class: dns.ClassINET,
|
||||||
|
},
|
||||||
|
Ptr: "foo.node.peer1.peer.default.ap.consul.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "[ENT] PTR Lookup for service in default namespace, query type is PTR",
|
||||||
|
request: &dns.Msg{
|
||||||
|
MsgHdr: dns.MsgHdr{
|
||||||
|
Opcode: dns.OpcodeQuery,
|
||||||
|
},
|
||||||
|
Question: []dns.Question{
|
||||||
|
{
|
||||||
|
Name: "4.3.2.1.in-addr.arpa",
|
||||||
|
Qtype: dns.TypePTR,
|
||||||
|
Qclass: dns.ClassINET,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
configureDataFetcher: func(fetcher discovery.CatalogDataFetcher) {
|
||||||
|
results := []*discovery.Result{
|
||||||
|
{
|
||||||
|
Node: &discovery.Location{Name: "foo", Address: "1.2.3.4"},
|
||||||
|
Type: discovery.ResultTypeService,
|
||||||
|
Service: &discovery.Location{Name: "foo", Address: "foo"},
|
||||||
|
Tenancy: discovery.ResultTenancy{
|
||||||
|
Datacenter: "dc2",
|
||||||
|
Namespace: "default",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
fetcher.(*discovery.MockCatalogDataFetcher).
|
||||||
|
On("FetchRecordsByIp", mock.Anything, mock.Anything).
|
||||||
|
Return(results, nil).
|
||||||
|
Run(func(args mock.Arguments) {
|
||||||
|
req := args.Get(1).(net.IP)
|
||||||
|
|
||||||
|
require.NotNil(t, req)
|
||||||
|
require.Equal(t, "1.2.3.4", req.String())
|
||||||
|
})
|
||||||
|
},
|
||||||
|
response: &dns.Msg{
|
||||||
|
MsgHdr: dns.MsgHdr{
|
||||||
|
Opcode: dns.OpcodeQuery,
|
||||||
|
Response: true,
|
||||||
|
Authoritative: true,
|
||||||
|
},
|
||||||
|
Compress: true,
|
||||||
|
Question: []dns.Question{
|
||||||
|
{
|
||||||
|
Name: "4.3.2.1.in-addr.arpa.",
|
||||||
|
Qtype: dns.TypePTR,
|
||||||
|
Qclass: dns.ClassINET,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Answer: []dns.RR{
|
||||||
|
&dns.PTR{
|
||||||
|
Hdr: dns.RR_Header{
|
||||||
|
Name: "4.3.2.1.in-addr.arpa.",
|
||||||
|
Rrtype: dns.TypePTR,
|
||||||
|
Class: dns.ClassINET,
|
||||||
|
},
|
||||||
|
Ptr: "foo.service.default.dc2.consul.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "[ENT] PTR Lookup for service in a non-default namespace, query type is PTR",
|
||||||
|
request: &dns.Msg{
|
||||||
|
MsgHdr: dns.MsgHdr{
|
||||||
|
Opcode: dns.OpcodeQuery,
|
||||||
|
},
|
||||||
|
Question: []dns.Question{
|
||||||
|
{
|
||||||
|
Name: "4.3.2.1.in-addr.arpa",
|
||||||
|
Qtype: dns.TypePTR,
|
||||||
|
Qclass: dns.ClassINET,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
configureDataFetcher: func(fetcher discovery.CatalogDataFetcher) {
|
||||||
|
results := []*discovery.Result{
|
||||||
|
{
|
||||||
|
Node: &discovery.Location{Name: "foo-node", Address: "1.2.3.4"},
|
||||||
|
Type: discovery.ResultTypeService,
|
||||||
|
Service: &discovery.Location{Name: "foo", Address: "foo"},
|
||||||
|
Tenancy: discovery.ResultTenancy{
|
||||||
|
Datacenter: "dc2",
|
||||||
|
Namespace: "bar",
|
||||||
|
Partition: "baz",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
fetcher.(*discovery.MockCatalogDataFetcher).
|
||||||
|
On("FetchRecordsByIp", mock.Anything, mock.Anything).
|
||||||
|
Return(results, nil).
|
||||||
|
Run(func(args mock.Arguments) {
|
||||||
|
req := args.Get(1).(net.IP)
|
||||||
|
|
||||||
|
require.NotNil(t, req)
|
||||||
|
require.Equal(t, "1.2.3.4", req.String())
|
||||||
|
})
|
||||||
|
},
|
||||||
|
response: &dns.Msg{
|
||||||
|
MsgHdr: dns.MsgHdr{
|
||||||
|
Opcode: dns.OpcodeQuery,
|
||||||
|
Response: true,
|
||||||
|
Authoritative: true,
|
||||||
|
},
|
||||||
|
Compress: true,
|
||||||
|
Question: []dns.Question{
|
||||||
|
{
|
||||||
|
Name: "4.3.2.1.in-addr.arpa.",
|
||||||
|
Qtype: dns.TypePTR,
|
||||||
|
Qclass: dns.ClassINET,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Answer: []dns.RR{
|
||||||
|
&dns.PTR{
|
||||||
|
Hdr: dns.RR_Header{
|
||||||
|
Name: "4.3.2.1.in-addr.arpa.",
|
||||||
|
Rrtype: dns.TypePTR,
|
||||||
|
Class: dns.ClassINET,
|
||||||
|
},
|
||||||
|
Ptr: "foo.service.bar.dc2.consul.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "[CE] PTR Lookup for node w/ peer name, query type is ANY",
|
||||||
|
request: &dns.Msg{
|
||||||
|
MsgHdr: dns.MsgHdr{
|
||||||
|
Opcode: dns.OpcodeQuery,
|
||||||
|
},
|
||||||
|
Question: []dns.Question{
|
||||||
|
{
|
||||||
|
Name: "4.3.2.1.in-addr.arpa",
|
||||||
|
Qtype: dns.TypeANY,
|
||||||
|
Qclass: dns.ClassINET,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
configureDataFetcher: func(fetcher discovery.CatalogDataFetcher) {
|
||||||
|
results := []*discovery.Result{
|
||||||
|
{
|
||||||
|
Node: &discovery.Location{Name: "foo", Address: "1.2.3.4"},
|
||||||
|
Type: discovery.ResultTypeNode,
|
||||||
|
Service: &discovery.Location{Name: "foo", Address: "foo"},
|
||||||
|
Tenancy: discovery.ResultTenancy{
|
||||||
|
Datacenter: "dc2",
|
||||||
|
PeerName: "peer1",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
fetcher.(*discovery.MockCatalogDataFetcher).
|
||||||
|
On("FetchRecordsByIp", mock.Anything, mock.Anything).
|
||||||
|
Return(results, nil).
|
||||||
|
Run(func(args mock.Arguments) {
|
||||||
|
req := args.Get(1).(net.IP)
|
||||||
|
|
||||||
|
require.NotNil(t, req)
|
||||||
|
require.Equal(t, "1.2.3.4", req.String())
|
||||||
|
})
|
||||||
|
},
|
||||||
|
response: &dns.Msg{
|
||||||
|
MsgHdr: dns.MsgHdr{
|
||||||
|
Opcode: dns.OpcodeQuery,
|
||||||
|
Response: true,
|
||||||
|
Authoritative: true,
|
||||||
|
},
|
||||||
|
Compress: true,
|
||||||
|
Question: []dns.Question{
|
||||||
|
{
|
||||||
|
Name: "4.3.2.1.in-addr.arpa.",
|
||||||
|
Qtype: dns.TypeANY,
|
||||||
|
Qclass: dns.ClassINET,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Answer: []dns.RR{
|
||||||
|
&dns.PTR{
|
||||||
|
Hdr: dns.RR_Header{
|
||||||
|
Name: "4.3.2.1.in-addr.arpa.",
|
||||||
|
Rrtype: dns.TypePTR,
|
||||||
|
Class: dns.ClassINET,
|
||||||
|
},
|
||||||
|
Ptr: "foo.node.peer1.peer.consul.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "[CE] PTR Lookup for service, query type is PTR",
|
||||||
|
request: &dns.Msg{
|
||||||
|
MsgHdr: dns.MsgHdr{
|
||||||
|
Opcode: dns.OpcodeQuery,
|
||||||
|
},
|
||||||
|
Question: []dns.Question{
|
||||||
|
{
|
||||||
|
Name: "4.3.2.1.in-addr.arpa",
|
||||||
|
Qtype: dns.TypePTR,
|
||||||
|
Qclass: dns.ClassINET,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
configureDataFetcher: func(fetcher discovery.CatalogDataFetcher) {
|
||||||
|
results := []*discovery.Result{
|
||||||
|
{
|
||||||
|
Node: &discovery.Location{Name: "foo", Address: "1.2.3.4"},
|
||||||
|
Service: &discovery.Location{Name: "foo", Address: "foo"},
|
||||||
|
Type: discovery.ResultTypeService,
|
||||||
|
Tenancy: discovery.ResultTenancy{
|
||||||
|
Datacenter: "dc2",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
fetcher.(*discovery.MockCatalogDataFetcher).
|
||||||
|
On("FetchRecordsByIp", mock.Anything, mock.Anything).
|
||||||
|
Return(results, nil).
|
||||||
|
Run(func(args mock.Arguments) {
|
||||||
|
req := args.Get(1).(net.IP)
|
||||||
|
|
||||||
|
require.NotNil(t, req)
|
||||||
|
require.Equal(t, "1.2.3.4", req.String())
|
||||||
|
})
|
||||||
|
},
|
||||||
|
response: &dns.Msg{
|
||||||
|
MsgHdr: dns.MsgHdr{
|
||||||
|
Opcode: dns.OpcodeQuery,
|
||||||
|
Response: true,
|
||||||
|
Authoritative: true,
|
||||||
|
},
|
||||||
|
Compress: true,
|
||||||
|
Question: []dns.Question{
|
||||||
|
{
|
||||||
|
Name: "4.3.2.1.in-addr.arpa.",
|
||||||
|
Qtype: dns.TypePTR,
|
||||||
|
Qclass: dns.ClassINET,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Answer: []dns.RR{
|
||||||
|
&dns.PTR{
|
||||||
|
Hdr: dns.RR_Header{
|
||||||
|
Name: "4.3.2.1.in-addr.arpa.",
|
||||||
|
Rrtype: dns.TypePTR,
|
||||||
|
Class: dns.ClassINET,
|
||||||
|
},
|
||||||
|
Ptr: "foo.service.dc2.consul.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
// V2 Workload Lookup
|
// V2 Workload Lookup
|
||||||
{
|
{
|
||||||
name: "workload A query w/ port, returns A record",
|
name: "workload A query w/ port, returns A record",
|
||||||
|
@ -2710,8 +3025,6 @@ func Test_HandleRequest(t *testing.T) {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
testCases = append(testCases, getAdditionalTestCases(t)...)
|
|
||||||
|
|
||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
runHandleTestCases(t, tc)
|
runHandleTestCases(t, tc)
|
||||||
|
|
Loading…
Reference in New Issue