coredns/test/external_test.go
2017-09-16 14:13:28 +01:00

72 lines
1.5 KiB
Go

package test
import (
"fmt"
"os"
"os/exec"
"strings"
"testing"
)
// Go get external example plugin, compile it into CoreDNS
// and check if it is really there, but running coredns -plugins.
// Dangerous test as it messes with your git tree, maybe use tag?
func testExternalPluginCompile(t *testing.T) {
if err := addExamplePlugin(); err != nil {
t.Fatal(err)
}
defer run(t, gitReset)
if _, err := run(t, goGet); err != nil {
t.Fatal(err)
}
if _, err := run(t, goGen); err != nil {
t.Fatal(err)
}
if _, err := run(t, goBuild); err != nil {
t.Fatal(err)
}
out, err := run(t, coredns)
if err != nil {
t.Fatal(err)
}
if !strings.Contains(string(out), "dns.example") {
t.Fatal("dns.example plugin should be there")
}
}
func run(t *testing.T, c *exec.Cmd) ([]byte, error) {
c.Dir = ".."
out, err := c.Output()
if err != nil {
return nil, fmt.Errorf("run: failed to run %s %s: %q", c.Args[0], c.Args[1], err)
}
return out, nil
}
func addExamplePlugin() error {
f, err := os.OpenFile("../plugin.cfg", os.O_APPEND|os.O_WRONLY, os.ModeAppend)
if err != nil {
return err
}
defer f.Close()
_, err = f.WriteString(example)
return err
}
var (
goBuild = exec.Command("go", "build")
goGen = exec.Command("go", "generate")
goGet = exec.Command("go", "get", "github.com/coredns/example")
gitReset = exec.Command("git", "checkout", "core/*")
coredns = exec.Command("./coredns", "-plugins")
)
const example = "1001:example:github.com/coredns/example"