Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor config/resolvers.go, update resolvers_test.go #814

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 23 additions & 45 deletions config/resolvers.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,60 +97,38 @@ loop:

// SetResolvers assigns the untrusted resolver names provided in the parameter to the list in the configuration.
func (c *Config) SetResolvers(resolvers ...string) {
c.Resolvers = []string{}
c.AddResolvers(resolvers...)
}

// AddResolvers appends the untrusted resolver names provided in the parameter to the list in the configuration.
func (c *Config) AddResolvers(resolvers ...string) {
for _, r := range resolvers {
c.AddResolver(r)
for _, resolver := range resolvers {
func() {
c.Lock()
defer c.Unlock()
// Check that the domain string is not empty
r := strings.TrimSpace(resolver)
if r == "" {
return
}
c.Resolvers = stringset.Deduplicate(append(c.Resolvers, resolver))
}()
}
c.CalcMaxQPS()
}

// AddResolver appends the untrusted resolver name provided in the parameter to the list in the configuration.
func (c *Config) AddResolver(resolver string) {
c.Lock()
defer c.Unlock()

// Check that the domain string is not empty
r := strings.TrimSpace(resolver)
if r == "" {
return
}

c.Resolvers = stringset.Deduplicate(append(c.Resolvers, resolver))
}

// SetTrustedResolvers assigns the trusted resolver names provided in the parameter to the list in the configuration.
func (c *Config) SetTrustedResolvers(resolvers ...string) {
c.Resolvers = []string{}
c.AddResolvers(resolvers...)
}

// AddTrustedResolvers appends the trusted resolver names provided in the parameter to the list in the configuration.
func (c *Config) AddTrustedResolvers(resolvers ...string) {
for _, r := range resolvers {
c.AddTrustedResolver(r)
func (c *Config) SetTrustedResolvers(trustedResolvers ...string) {
for _, trustedResolver := range trustedResolvers {
func() {
c.Lock()
defer c.Unlock()
// Check that the domain string is not empty
r := strings.TrimSpace(trustedResolver)
if r == "" {
return
}
c.TrustedResolvers = stringset.Deduplicate(append(c.TrustedResolvers, trustedResolver))
}()
}
c.CalcMaxQPS()
}

// AddTrustedResolver appends the trusted resolver name provided in the parameter to the list in the configuration.
func (c *Config) AddTrustedResolver(resolver string) {
c.Lock()
defer c.Unlock()

// Check that the domain string is not empty
r := strings.TrimSpace(resolver)
if r == "" {
return
}

c.TrustedResolvers = stringset.Deduplicate(append(c.TrustedResolvers, resolver))
}

// CalcMaxQPS updates the MaxDNSQueries field of the configuration based on current settings.
func (c *Config) CalcMaxQPS() {
c.MaxDNSQueries = (len(c.Resolvers) * c.ResolversQPS) + (len(c.TrustedResolvers) * c.TrustedQPS)
Expand Down
100 changes: 81 additions & 19 deletions config/resolvers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,36 +9,98 @@ import (
"testing"
)

func TestConfigSetResolvers(t *testing.T) {
type fields struct {
config *Config
}
type args struct {
resolvers []string
}
type fields struct {
config *Config
}

tests := []struct {
name string
fields fields
args args
}{
{
name: "success",
fields: fields{config: &Config{}},
args: args{
resolvers: []string{"127.0.0.1", "127.0.0.2", "127.0.0.3"},
},
type args struct {
resolvers, trustedResolvers []string
}

var tests = []struct {
name string
fields fields
args args
}{
{
name: "success",
fields: fields{config: &Config{}},
args: args{
resolvers: []string{"127.0.0.1", "127.0.0.2", "127.0.0.3"},
trustedResolvers: DefaultBaselineResolvers,
},
}
},
}

func TestConfigSetResolvers(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tt.fields.config.SetResolvers(tt.args.resolvers...)

sort.Strings(tt.fields.config.Resolvers)
sort.Strings(tt.args.resolvers)
if !reflect.DeepEqual(tt.args.resolvers, tt.fields.config.Resolvers) {
t.Errorf("SetResolvers() = %v, want %v",
tt.args.resolvers, tt.fields.config.Resolvers)
}
})
}
}

func TestConfigSetTrustedResolvers(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tt.fields.config.SetTrustedResolvers(tt.args.trustedResolvers...)

sort.Strings(tt.fields.config.TrustedResolvers)
sort.Strings(tt.args.trustedResolvers)
if !reflect.DeepEqual(tt.args.trustedResolvers, tt.fields.config.TrustedResolvers) {
t.Errorf("SetTrustedResolvers() = %v, want %v",
tt.args.trustedResolvers, tt.fields.config.TrustedResolvers)
}
})
}
}

func BenchmarkTestConfigSetResolvers(b *testing.B) {
for i := 0; i < b.N; i++ {
for _, tt := range tests {
b.Run(tt.name, func(b *testing.B) {
tt.fields.config.SetResolvers(tt.args.resolvers...)
})
}
}
}

func BenchmarkTestConfigSetTrustedResolvers(b *testing.B) {
for i := 0; i < b.N; i++ {
for _, tt := range tests {
b.Run(tt.name, func(b *testing.B) {
tt.fields.config.SetTrustedResolvers(tt.args.trustedResolvers...)
})
}
}
}

func TestGetPublicDNSResolvers(t *testing.T) {
err := GetPublicDNSResolvers()
if err != nil {
t.Error(err)
return
}
if len(PublicResolvers) <= 0 {
t.Error("No resolvers obtained")
} else if PublicResolvers == nil {
t.Error("PublicResolvers is a nil slice")
}
}

func BenchmarkTestPublicDNSResolvers(b *testing.B) {
for i := 0; i < b.N; i++ {
err := GetPublicDNSResolvers()
if err != nil {
b.Error(err)
return
}
}
}