Add resolver tests (#182)

Co-authored-by: James Mills <1290234+prologic@users.noreply.github.com>
Reviewed-on: https://git.mills.io/saltyim/saltyim/pulls/182
This commit is contained in:
James Mills 2023-01-27 23:14:03 +00:00
parent 36f9b25ec9
commit 57970ff67f
6 changed files with 48 additions and 19 deletions

View File

@ -128,11 +128,7 @@ fmt: ## Format sources fiels
@$(GOCMD) fmt ./...
test: ## Run test suite
@CGO_ENABLED=1 $(GOCMD) test -v -race -cover -coverprofile=coverage.out ./...
coverage: ## Get test coverage report
@CGO_ENABLED=1 $(GOCMD) test -v -race -cover -coverprofile=coverage.out ./...
@$(GOCMD) tool cover -html=coverage.out
@CGO_ENABLED=1 $(GOCMD) test -failfast -shuffle on -race -cover -coverprofile=coverage.out ./...
clean: ## Remove untracked files
@git clean -f -d -x -e certs

View File

@ -389,7 +389,7 @@ func (cli *Client) SendToAddr(addr Addr, msg string) error {
func (cli *Client) Register(brokerURI string) error {
if brokerURI == "" {
log.Debugf("Looking up SRV record for _salty._tcp.%s", cli.Me().Domain())
target, err := resolver.LookupSRV("salty", "tcp", cli.Me().Domain())
target, err := DefaultResolver.LookupSRV("salty", "tcp", cli.Me().Domain())
if err != nil {
return fmt.Errorf("unable to find broker for %s: %w", cli.Me(), err)
}

View File

@ -1,3 +1,4 @@
// Package main implements the PWA (progressive web app) using the go-app framework
package main
import (
@ -10,7 +11,7 @@ import (
func init() {
log.SetLevel(log.DebugLevel)
saltyim.SetResolver(&saltyim.DNSOverHTTPResolver{})
saltyim.DefaultResolver = &saltyim.DNSOverHTTPResolver{}
}
func main() {

View File

@ -171,7 +171,7 @@ func (a *addr) HashURI() string {
func (a *addr) Refresh() error {
log.Debugf("Looking up SRV record for _salty._tcp.%s", a.domain)
if target, err := resolver.LookupSRV("salty", "tcp", a.domain); err == nil {
if target, err := DefaultResolver.LookupSRV("salty", "tcp", a.domain); err == nil {
a.discoveredDomain = target
log.Debugf("Discovered salty services %s", a.discoveredDomain)
} else if err != nil {
@ -211,7 +211,7 @@ func (a *addr) Avatar() string {
}
log.Debugf("Looking up SRV record for _avatars._tcp.%s", a.domain)
if target, err := resolver.LookupSRV("avatars", "tcp", a.domain); err == nil {
if target, err := DefaultResolver.LookupSRV("avatars", "tcp", a.domain); err == nil {
a.avatar = fmt.Sprintf("https://%s/avatar/%s", target, a.Hash())
}
a.checkedAvatar = true

View File

@ -26,18 +26,10 @@ var (
// ErrSRVRecordNotFound is an error returned by a resolver when there is no SRV record found for the domain of a Salty Address
ErrSRVRecordNotFound = errors.New("error: No SRV records found")
resolver Resolver
// DefaultResolver is the default resolver which defaults to the StandardResolver
DefaultResolver Resolver = &StandardResolver{}
)
func init() {
SetResolver(&StandardResolver{})
}
// SetResolver sets the default resolver used by this package
func SetResolver(r Resolver) {
resolver = r
}
// StandardResolver is a standard resolver that performs direct DNS queries over
// the standard networking protocol using port tcp/53 or udp/53
type StandardResolver struct{}

40
resolver_e2e_test.go Normal file
View File

@ -0,0 +1,40 @@
package saltyim_test
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.mills.io/saltyim"
)
func TestDefaultResolver(t *testing.T) {
assert := assert.New(t)
require := require.New(t)
r, err := saltyim.DefaultResolver.LookupSRV("salty", "tcp", "home.arpa")
require.NoError(err)
assert.Equal("salty.home.arpa", r)
}
func TestStandardResolver(t *testing.T) {
assert := assert.New(t)
require := require.New(t)
resolver := &saltyim.StandardResolver{}
r, err := resolver.LookupSRV("salty", "tcp", "home.arpa")
require.NoError(err)
assert.Equal("salty.home.arpa", r)
}
func TestDNSOverHTTPResolver(t *testing.T) {
assert := assert.New(t)
require := require.New(t)
resolver := &saltyim.DNSOverHTTPResolver{}
r, err := resolver.LookupSRV("salty", "tcp", "mills.io")
require.NoError(err)
assert.Equal(r, "salty.mills.io")
}