Better coverage and refactored static record parsing
This commit is contained in:
parent
3154c686e0
commit
550b23778f
6
dns.go
6
dns.go
@ -70,9 +70,9 @@ func handleRequest(w dns.ResponseWriter, r *dns.Msg) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Parse config records
|
// Parse config records
|
||||||
func (r *Records) Parse(recs []string) {
|
func (r *Records) Parse(config general) {
|
||||||
rrmap := make(map[uint16]map[string][]dns.RR)
|
rrmap := make(map[uint16]map[string][]dns.RR)
|
||||||
for _, v := range recs {
|
for _, v := range config.StaticRecords {
|
||||||
rr, err := dns.NewRR(strings.ToLower(v))
|
rr, err := dns.NewRR(strings.ToLower(v))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.WithFields(log.Fields{"error": err.Error(), "rr": v}).Warning("Could not parse RR from config")
|
log.WithFields(log.Fields{"error": err.Error(), "rr": v}).Warning("Could not parse RR from config")
|
||||||
@ -84,7 +84,7 @@ func (r *Records) Parse(recs []string) {
|
|||||||
// Create serial
|
// Create serial
|
||||||
serial := time.Now().Format("2006010215")
|
serial := time.Now().Format("2006010215")
|
||||||
// Add SOA
|
// Add SOA
|
||||||
SOAstring := fmt.Sprintf("%s. SOA %s. %s. %s 28800 7200 604800 86400", strings.ToLower(DNSConf.General.Domain), strings.ToLower(DNSConf.General.Nsname), strings.ToLower(DNSConf.General.Nsadmin), serial)
|
SOAstring := fmt.Sprintf("%s. SOA %s. %s. %s 28800 7200 604800 86400", strings.ToLower(config.Domain), strings.ToLower(config.Nsname), strings.ToLower(config.Nsadmin), serial)
|
||||||
soarr, err := dns.NewRR(SOAstring)
|
soarr, err := dns.NewRR(SOAstring)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.WithFields(log.Fields{"error": err.Error(), "soa": SOAstring}).Warning("Error while adding SOA record")
|
log.WithFields(log.Fields{"error": err.Error(), "soa": SOAstring}).Warning("Error while adding SOA record")
|
||||||
|
|||||||
49
dns_test.go
49
dns_test.go
@ -1,8 +1,11 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"database/sql/driver"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/erikstmartin/go-testdb"
|
||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
@ -11,13 +14,6 @@ import (
|
|||||||
var resolv resolver
|
var resolv resolver
|
||||||
var server *dns.Server
|
var server *dns.Server
|
||||||
|
|
||||||
var records = []string{
|
|
||||||
"auth.example.org. A 192.168.1.100",
|
|
||||||
"ns1.auth.example.org. A 192.168.1.101",
|
|
||||||
"!''b', unparseable ",
|
|
||||||
"ns2.auth.example.org. A 192.168.1.102",
|
|
||||||
}
|
|
||||||
|
|
||||||
type resolver struct {
|
type resolver struct {
|
||||||
server string
|
server string
|
||||||
}
|
}
|
||||||
@ -74,6 +70,45 @@ func findRecordFromMemory(rrstr string, host string, qtype uint16) error {
|
|||||||
return errors.New(errmsg)
|
return errors.New(errmsg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestQuestionDBError(t *testing.T) {
|
||||||
|
testdb.SetQueryWithArgsFunc(func(query string, args []driver.Value) (result driver.Rows, err error) {
|
||||||
|
columns := []string{"Username", "Password", "Subdomain", "Value", "LastActive"}
|
||||||
|
return testdb.RowsFromSlice(columns, [][]driver.Value{}), errors.New("Prepared query error")
|
||||||
|
})
|
||||||
|
|
||||||
|
defer testdb.Reset()
|
||||||
|
|
||||||
|
tdb, err := sql.Open("testdb", "")
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Got error: %v", err)
|
||||||
|
}
|
||||||
|
oldDb := DB.GetBackend()
|
||||||
|
|
||||||
|
DB.SetBackend(tdb)
|
||||||
|
defer DB.SetBackend(oldDb)
|
||||||
|
|
||||||
|
q := dns.Question{Name: dns.Fqdn("whatever.tld"), Qtype: dns.TypeTXT, Qclass: dns.ClassINET}
|
||||||
|
_, rcode, err := answerTXT(q)
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("Expected error but got none")
|
||||||
|
}
|
||||||
|
if rcode != dns.RcodeNameError {
|
||||||
|
t.Errorf("Expected [%s] rcode, but got [%s]", dns.RcodeToString[dns.RcodeNameError], dns.RcodeToString[rcode])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestParse(t *testing.T) {
|
||||||
|
var testcfg = general{
|
||||||
|
Domain: ")",
|
||||||
|
Nsname: "ns1.auth.example.org",
|
||||||
|
Nsadmin: "admin.example.org",
|
||||||
|
StaticRecords: []string{},
|
||||||
|
Debug: false,
|
||||||
|
}
|
||||||
|
var testRR Records
|
||||||
|
testRR.Parse(testcfg)
|
||||||
|
}
|
||||||
|
|
||||||
func TestResolveA(t *testing.T) {
|
func TestResolveA(t *testing.T) {
|
||||||
resolv := resolver{server: "0.0.0.0:15353"}
|
resolv := resolver{server: "0.0.0.0:15353"}
|
||||||
answer, err := resolv.lookup("auth.example.org", dns.TypeA)
|
answer, err := resolv.lookup("auth.example.org", dns.TypeA)
|
||||||
|
|||||||
2
main.go
2
main.go
@ -17,7 +17,7 @@ func main() {
|
|||||||
setupLogging(DNSConf.Logconfig.Format, DNSConf.Logconfig.Level)
|
setupLogging(DNSConf.Logconfig.Format, DNSConf.Logconfig.Level)
|
||||||
|
|
||||||
// Read the default records in
|
// Read the default records in
|
||||||
RR.Parse(DNSConf.General.StaticRecords)
|
RR.Parse(DNSConf.General)
|
||||||
|
|
||||||
// Open database
|
// Open database
|
||||||
newDB := new(acmedb)
|
newDB := new(acmedb)
|
||||||
|
|||||||
18
main_test.go
18
main_test.go
@ -11,9 +11,16 @@ var (
|
|||||||
postgres = flag.Bool("postgres", false, "run integration tests against PostgreSQL")
|
postgres = flag.Bool("postgres", false, "run integration tests against PostgreSQL")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var records = []string{
|
||||||
|
"auth.example.org. A 192.168.1.100",
|
||||||
|
"ns1.auth.example.org. A 192.168.1.101",
|
||||||
|
"!''b', unparseable ",
|
||||||
|
"ns2.auth.example.org. A 192.168.1.102",
|
||||||
|
}
|
||||||
|
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
setupConfig()
|
setupConfig()
|
||||||
RR.Parse(records)
|
RR.Parse(DNSConf.General)
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
newDb := new(acmedb)
|
newDb := new(acmedb)
|
||||||
@ -44,10 +51,11 @@ func setupConfig() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var generalcfg = general{
|
var generalcfg = general{
|
||||||
Domain: "auth.example.org",
|
Domain: "auth.example.org",
|
||||||
Nsname: "ns1.auth.example.org",
|
Nsname: "ns1.auth.example.org",
|
||||||
Nsadmin: "admin.example.org",
|
Nsadmin: "admin.example.org",
|
||||||
Debug: false,
|
StaticRecords: records,
|
||||||
|
Debug: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
var httpapicfg = httpapi{
|
var httpapicfg = httpapi{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user