add various tests for prepareConfig and update go dependencies

This commit is contained in:
Thomas Preisner 2021-09-11 14:16:28 +02:00
parent 41107cdc2e
commit 4cb237a05b
3 changed files with 463 additions and 2 deletions

458
config_test.go Normal file
View file

@ -0,0 +1,458 @@
package main
import (
"reflect"
"testing"
"github.com/google/go-cmp/cmp"
)
func TestPrepareConfig(t *testing.T) {
tests := []struct {
name string
users []User
rrconfigs []RRConfig
expSuccess bool
expUsers map[string]*User
expRrconfigs map[string]*RRConfig
}{
{
"empty config",
nil,
nil,
false,
map[string]*User{},
map[string]*RRConfig{},
},
{
"simple config",
[]User{
User{
Username: "user",
Password: "pass",
Records: []string{
"record.example.org",
},
},
},
[]RRConfig{
RRConfig{
Recordname: "record.example.org",
Zonename: "zone.example.org",
Nameserver: "ns1.example.org",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "some-secret-key",
},
},
true,
map[string]*User{
"user": &User{
Username: "user",
Password: "pass",
Records: []string{
"record.example.org",
},
records: map[string]bool{
"record.example.org": true,
},
},
},
map[string]*RRConfig{
"record.example.org": &RRConfig{
Recordname: "record.example.org",
Zonename: "zone.example.org",
Nameserver: "ns1.example.org",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "some-secret-key",
},
},
},
{
"more complex config",
[]User{
User{
Username: "user",
Password: "pass",
Records: []string{
"record.example.org",
"record2.example.org",
},
},
User{
Username: "user2",
Password: "pass2",
Records: []string{
"record.example.com",
},
},
},
[]RRConfig{
RRConfig{
Recordname: "record.example.org",
Zonename: "zone.example.org",
Nameserver: "ns1.example.org",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "some-secret-key",
},
RRConfig{
Recordname: "record2.example.org",
Zonename: "zone.example.org",
Nameserver: "ns1.example.org",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "some-other-secret-key",
},
RRConfig{
Recordname: "record.example.com",
Zonename: "zone.example.com",
Nameserver: "ns1.example.com",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "one-more-secret-key",
},
},
true,
map[string]*User{
"user": &User{
Username: "user",
Password: "pass",
Records: []string{
"record.example.org",
"record2.example.org",
},
records: map[string]bool{
"record.example.org": true,
"record2.example.org": true,
},
},
"user2": &User{
Username: "user2",
Password: "pass2",
Records: []string{
"record.example.com",
},
records: map[string]bool{
"record.example.com": true,
},
},
},
map[string]*RRConfig{
"record.example.org": &RRConfig{
Recordname: "record.example.org",
Zonename: "zone.example.org",
Nameserver: "ns1.example.org",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "some-secret-key",
},
"record2.example.org": &RRConfig{
Recordname: "record2.example.org",
Zonename: "zone.example.org",
Nameserver: "ns1.example.org",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "some-other-secret-key",
},
"record.example.com": &RRConfig{
Recordname: "record.example.com",
Zonename: "zone.example.com",
Nameserver: "ns1.example.com",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "one-more-secret-key",
},
},
},
{
"no users config",
nil,
[]RRConfig{
RRConfig{
Recordname: "record.example.org",
Zonename: "zone.example.org",
Nameserver: "ns1.example.org",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "some-secret-key",
},
},
false,
nil,
nil,
},
{
"no records config",
[]User{
User{
Username: "user",
Password: "pass",
Records: []string{
"record.example.org",
},
},
},
nil,
false,
nil,
nil,
},
{
"duplicate user",
[]User{
User{
Username: "user",
Password: "pass",
Records: []string{
"record.example.org",
},
},
User{
Username: "user",
Password: "pass2",
Records: []string{
"record2.example.org",
},
},
},
[]RRConfig{
RRConfig{
Recordname: "record.example.org",
Zonename: "zone.example.org",
Nameserver: "ns1.example.org",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "some-secret-key",
},
},
false,
nil,
nil,
},
{
"duplicate record",
[]User{
User{
Username: "user",
Password: "pass",
Records: []string{
"record.example.org",
},
},
},
[]RRConfig{
RRConfig{
Recordname: "record.example.org",
Zonename: "zone.example.org",
Nameserver: "ns1.example.org",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "some-secret-key",
},
RRConfig{
Recordname: "record.example.org",
Zonename: "zone.example.org",
Nameserver: "ns1.example.org",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "some-secret-key",
},
},
false,
nil,
nil,
},
{
"missing user config",
[]User{
User{
Username: "user",
Password: "pass",
Records: []string{
"record.example.org",
},
},
},
[]RRConfig{
RRConfig{
Recordname: "record.example.org",
Zonename: "zone.example.org",
Nameserver: "ns1.example.org",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "some-secret-key",
},
RRConfig{
Recordname: "record2.example.org",
Zonename: "zone.example.org",
Nameserver: "ns1.example.org",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "some-secret-key",
},
},
false,
nil,
nil,
},
{
"missing record/one user config",
[]User{
User{
Username: "user",
Password: "pass",
Records: []string{
"record.example.org",
"record2.example.org",
},
},
},
[]RRConfig{
RRConfig{
Recordname: "record.example.org",
Zonename: "zone.example.org",
Nameserver: "ns1.example.org",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "some-secret-key",
},
},
false,
nil,
nil,
},
{
"missing record/multiple users config",
[]User{
User{
Username: "user",
Password: "pass",
Records: []string{
"record.example.org",
},
},
User{
Username: "user2",
Password: "pass",
Records: []string{
"record2.example.org",
},
},
},
[]RRConfig{
RRConfig{
Recordname: "record.example.org",
Zonename: "zone.example.org",
Nameserver: "ns1.example.org",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "some-secret-key",
},
},
false,
nil,
nil,
},
{
"record reuse config",
[]User{
User{
Username: "user",
Password: "pass",
Records: []string{
"record.example.org",
},
},
User{
Username: "user2",
Password: "pass2",
Records: []string{
"record.example.org",
},
},
},
[]RRConfig{
RRConfig{
Recordname: "record.example.org",
Zonename: "zone.example.org",
Nameserver: "ns1.example.org",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "some-secret-key",
},
},
false,
nil,
nil,
},
{
"user without records config",
[]User{
User{
Username: "user",
Password: "pass",
Records: []string{},
},
User{
Username: "user2",
Password: "pass2",
Records: []string{
"record.example.org",
},
},
},
[]RRConfig{
RRConfig{
Recordname: "record.example.org",
Zonename: "zone.example.org",
Nameserver: "ns1.example.org",
Tsigalgo: "hmac-sha256",
Tsigid: "tsig-id",
Tsigkey: "some-secret-key",
},
},
false,
nil,
nil,
},
}
for _, tc := range tests {
cfg := Config{
ServerPort: 1234,
Users: tc.users,
RRConfigs: tc.rrconfigs,
}
res, err := prepareConfig(&cfg)
// check for error
if tc.expSuccess && err != nil {
// prepareConfig failed even though it should not have
t.Errorf("%s: err == nil: %v, expected: %v (err was: %v)", tc.name,
err == nil, tc.expSuccess, err)
} else if !tc.expSuccess && err == nil {
// prepareConfig succeeded even though it should have failed
t.Errorf("%s: err == nil: %v, expected: %v", tc.name,
err == nil, tc.expSuccess)
}
// check whether result is valid on success
if err == nil && res == nil {
t.Errorf("%s: res is nil even though it should not be", tc.name)
}
// try to compare res with expected values only if res is not nil
if res != nil {
if !reflect.DeepEqual(tc.expUsers, res.users) {
t.Errorf("%s: cfg.users: %s", tc.name,
cmp.Diff(tc.expUsers, res.users, cmp.AllowUnexported(User{})))
}
if !reflect.DeepEqual(tc.expRrconfigs, res.rrconfigs) {
t.Errorf("%s: cfg.rrconfigs: %s", tc.name,
cmp.Diff(tc.expRrconfigs, res.rrconfigs))
}
}
}
}