middleware/auto: add (#333)
Add auto-load middleware that automatically picks up zones. Every X seconds it will scan for new zones. Add tests and documentation. Make 'make test' use -race.
This commit is contained in:
parent
2eafe3ee94
commit
d536272201
19 changed files with 838 additions and 18 deletions
48
middleware/auto/watcher_test.go
Normal file
48
middleware/auto/watcher_test.go
Normal file
|
@ -0,0 +1,48 @@
|
|||
package auto
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"path"
|
||||
"regexp"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestWatcher(t *testing.T) {
|
||||
log.SetOutput(ioutil.Discard)
|
||||
|
||||
tempdir, err := createFiles()
|
||||
if err != nil {
|
||||
if tempdir != "" {
|
||||
os.RemoveAll(tempdir)
|
||||
}
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.RemoveAll(tempdir)
|
||||
|
||||
ldr := loader{
|
||||
directory: tempdir,
|
||||
re: regexp.MustCompile(`db\.(.*)`),
|
||||
template: `${1}`,
|
||||
}
|
||||
|
||||
z := &Zones{}
|
||||
|
||||
z.Walk(ldr)
|
||||
|
||||
// example.org and example.com should exist
|
||||
if x := len(z.Z["example.org."].All()); x != 4 {
|
||||
t.Fatalf("expected 4 RRs, got %d", x)
|
||||
}
|
||||
if x := len(z.Z["example.com."].All()); x != 4 {
|
||||
t.Fatalf("expected 4 RRs, got %d", x)
|
||||
}
|
||||
|
||||
// Now remove one file, rescan and see if it's gone.
|
||||
if err := os.Remove(path.Join(tempdir, "db.example.com")); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
z.Walk(ldr)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue