mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-30 17:53:21 -04:00 
			
		
		
		
	* plugin/file: fix setting ReloadInterval The reload interval was only correctly set if there was an extra block for the file. Move this down to set up. Add test case that fails before, but now works. Signed-off-by: Miek Gieben <miek@miek.nl> * layout and use Errorf Signed-off-by: Miek Gieben <miek@miek.nl>
		
			
				
	
	
		
			126 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package file
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/coredns/coredns/plugin/test"
 | |
| 
 | |
| 	"github.com/caddyserver/caddy"
 | |
| )
 | |
| 
 | |
| func TestFileParse(t *testing.T) {
 | |
| 	zoneFileName1, rm, err := test.TempFile(".", dbMiekNL)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	defer rm()
 | |
| 
 | |
| 	zoneFileName2, rm, err := test.TempFile(".", dbDnssexNLSigned)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	defer rm()
 | |
| 
 | |
| 	tests := []struct {
 | |
| 		inputFileRules string
 | |
| 		shouldErr      bool
 | |
| 		expectedZones  Zones
 | |
| 	}{
 | |
| 		{
 | |
| 			`file ` + zoneFileName1 + ` miek.nl.`,
 | |
| 			false,
 | |
| 			Zones{Names: []string{"miek.nl."}},
 | |
| 		},
 | |
| 		{
 | |
| 			`file ` + zoneFileName2 + ` dnssex.nl.`,
 | |
| 			false,
 | |
| 			Zones{Names: []string{"dnssex.nl."}},
 | |
| 		},
 | |
| 		{
 | |
| 			`file ` + zoneFileName2 + ` 10.0.0.0/8`,
 | |
| 			false,
 | |
| 			Zones{Names: []string{"10.in-addr.arpa."}},
 | |
| 		},
 | |
| 		// errors.
 | |
| 		{
 | |
| 			`file ` + zoneFileName1 + ` miek.nl {
 | |
| 				transfer from 127.0.0.1
 | |
| 			}`,
 | |
| 			true,
 | |
| 			Zones{},
 | |
| 		},
 | |
| 		{
 | |
| 			`file`,
 | |
| 			true,
 | |
| 			Zones{},
 | |
| 		},
 | |
| 		{
 | |
| 			`file ` + zoneFileName1 + ` example.net. {
 | |
| 				no_reload
 | |
| 			}`,
 | |
| 			true,
 | |
| 			Zones{},
 | |
| 		},
 | |
| 		{
 | |
| 			`file ` + zoneFileName1 + ` example.net. {
 | |
| 				no_rebloat
 | |
| 			}`,
 | |
| 			true,
 | |
| 			Zones{},
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for i, test := range tests {
 | |
| 		c := caddy.NewTestController("dns", test.inputFileRules)
 | |
| 		actualZones, err := fileParse(c)
 | |
| 
 | |
| 		if err == nil && test.shouldErr {
 | |
| 			t.Fatalf("Test %d expected errors, but got no error", i)
 | |
| 		} else if err != nil && !test.shouldErr {
 | |
| 			t.Fatalf("Test %d expected no errors, but got '%v'", i, err)
 | |
| 		} else {
 | |
| 			if len(actualZones.Names) != len(test.expectedZones.Names) {
 | |
| 				t.Fatalf("Test %d expected %v, got %v", i, test.expectedZones.Names, actualZones.Names)
 | |
| 			}
 | |
| 			for j, name := range test.expectedZones.Names {
 | |
| 				if actualZones.Names[j] != name {
 | |
| 					t.Fatalf("Test %d expected %v for %d th zone, got %v", i, name, j, actualZones.Names[j])
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestParseReload(t *testing.T) {
 | |
| 	name, rm, err := test.TempFile(".", dbMiekNL)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	defer rm()
 | |
| 
 | |
| 	tests := []struct {
 | |
| 		input  string
 | |
| 		reload time.Duration
 | |
| 	}{
 | |
| 		{
 | |
| 			`file ` + name + ` example.org.`,
 | |
| 			1 * time.Minute,
 | |
| 		},
 | |
| 		{
 | |
| 			`file ` + name + ` example.org. {
 | |
| 			reload 5s
 | |
| 			}`,
 | |
| 			5 * time.Second,
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for i, test := range tests {
 | |
| 		c := caddy.NewTestController("dns", test.input)
 | |
| 		z, _ := fileParse(c)
 | |
| 		if x := z.Z["example.org."].ReloadInterval; x != test.reload {
 | |
| 			t.Errorf("Test %d expected reload to be %s, but got %s", i, test.reload, x)
 | |
| 		}
 | |
| 	}
 | |
| }
 |