aboutsummaryrefslogtreecommitdiff
path: root/plugin/root/root_test.go
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2017-09-14 09:36:06 +0100
committerGravatar GitHub <noreply@github.com> 2017-09-14 09:36:06 +0100
commitd8714e64e400ef873c2adc4d929a07d7890727b9 (patch)
treec9fa4c157e6af12eb1517654f8d23ca5d5619513 /plugin/root/root_test.go
parentb984aa45595dc95253b91191afe7d3ee29e71b48 (diff)
downloadcoredns-d8714e64e400ef873c2adc4d929a07d7890727b9.tar.gz
coredns-d8714e64e400ef873c2adc4d929a07d7890727b9.tar.zst
coredns-d8714e64e400ef873c2adc4d929a07d7890727b9.zip
Remove the word middleware (#1067)
* Rename middleware to plugin first pass; mostly used 'sed', few spots where I manually changed text. This still builds a coredns binary. * fmt error * Rename AddMiddleware to AddPlugin * Readd AddMiddleware to remain backwards compat
Diffstat (limited to 'plugin/root/root_test.go')
-rw-r--r--plugin/root/root_test.go107
1 files changed, 107 insertions, 0 deletions
diff --git a/plugin/root/root_test.go b/plugin/root/root_test.go
new file mode 100644
index 000000000..ea0e53b5e
--- /dev/null
+++ b/plugin/root/root_test.go
@@ -0,0 +1,107 @@
+package root
+
+import (
+ "fmt"
+ "io/ioutil"
+ "log"
+ "os"
+ "path/filepath"
+ "strings"
+ "testing"
+
+ "github.com/coredns/coredns/core/dnsserver"
+
+ "github.com/mholt/caddy"
+)
+
+func TestRoot(t *testing.T) {
+ log.SetOutput(ioutil.Discard)
+
+ // Predefined error substrings
+ parseErrContent := "Error during parsing:"
+ unableToAccessErrContent := "unable to access root path"
+
+ existingDirPath, err := getTempDirPath()
+ if err != nil {
+ t.Fatalf("BeforeTest: Failed to find an existing directory for testing! Error was: %v", err)
+ }
+
+ nonExistingDir := filepath.Join(existingDirPath, "highly_unlikely_to_exist_dir")
+
+ existingFile, err := ioutil.TempFile("", "root_test")
+ if err != nil {
+ t.Fatalf("BeforeTest: Failed to create temp file for testing! Error was: %v", err)
+ }
+ defer func() {
+ existingFile.Close()
+ os.Remove(existingFile.Name())
+ }()
+
+ inaccessiblePath := getInaccessiblePath(existingFile.Name())
+
+ tests := []struct {
+ input string
+ shouldErr bool
+ expectedRoot string // expected root, set to the controller. Empty for negative cases.
+ expectedErrContent string // substring from the expected error. Empty for positive cases.
+ }{
+ // positive
+ {
+ fmt.Sprintf(`root %s`, nonExistingDir), false, nonExistingDir, "",
+ },
+ {
+ fmt.Sprintf(`root %s`, existingDirPath), false, existingDirPath, "",
+ },
+ // negative
+ {
+ `root `, true, "", parseErrContent,
+ },
+ {
+ fmt.Sprintf(`root %s`, inaccessiblePath), true, "", unableToAccessErrContent,
+ },
+ {
+ fmt.Sprintf(`root {
+ %s
+ }`, existingDirPath), true, "", parseErrContent,
+ },
+ }
+
+ for i, test := range tests {
+ c := caddy.NewTestController("dns", test.input)
+ err := setup(c)
+ cfg := dnsserver.GetConfig(c)
+
+ if test.shouldErr && err == nil {
+ t.Errorf("Test %d: Expected error but found %s for input %s", i, err, test.input)
+ }
+
+ if err != nil {
+ if !test.shouldErr {
+ t.Errorf("Test %d: Expected no error but found one for input %s. Error was: %v", i, test.input, err)
+ }
+
+ if !strings.Contains(err.Error(), test.expectedErrContent) {
+ t.Errorf("Test %d: Expected error to contain: %v, found error: %v, input: %s", i, test.expectedErrContent, err, test.input)
+ }
+ }
+
+ // check root only if we are in a positive test.
+ if !test.shouldErr && test.expectedRoot != cfg.Root {
+ t.Errorf("Root not correctly set for input %s. Expected: %s, actual: %s", test.input, test.expectedRoot, cfg.Root)
+ }
+ }
+}
+
+// getTempDirPath returnes the path to the system temp directory. If it does not exists - an error is returned.
+func getTempDirPath() (string, error) {
+ tempDir := os.TempDir()
+ _, err := os.Stat(tempDir)
+ if err != nil {
+ return "", err
+ }
+ return tempDir, nil
+}
+
+func getInaccessiblePath(file string) string {
+ return filepath.Join("C:", "file\x00name") // null byte in filename is not allowed on Windows AND unix
+}