72 lines
1.5 KiB
Go
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"
|