1package dns 2 3import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "testing" 8) 9 10const normal string = ` 11# Comment 12domain somedomain.com 13nameserver 10.28.10.2 14nameserver 11.28.10.1 15` 16 17const missingNewline string = ` 18domain somedomain.com 19nameserver 10.28.10.2 20nameserver 11.28.10.1` // <- NOTE: NO newline. 21 22func testConfig(t *testing.T, data string) { 23 tempDir, err := ioutil.TempDir("", "") 24 if err != nil { 25 t.Fatalf("tempDir: %v", err) 26 } 27 defer os.RemoveAll(tempDir) 28 29 path := filepath.Join(tempDir, "resolv.conf") 30 if err := ioutil.WriteFile(path, []byte(data), 0644); err != nil { 31 t.Fatalf("writeFile: %v", err) 32 } 33 cc, err := ClientConfigFromFile(path) 34 if err != nil { 35 t.Errorf("error parsing resolv.conf: %v", err) 36 } 37 if l := len(cc.Servers); l != 2 { 38 t.Errorf("incorrect number of nameservers detected: %d", l) 39 } 40 if l := len(cc.Search); l != 1 { 41 t.Errorf("domain directive not parsed correctly: %v", cc.Search) 42 } else { 43 if cc.Search[0] != "somedomain.com" { 44 t.Errorf("domain is unexpected: %v", cc.Search[0]) 45 } 46 } 47} 48 49func TestNameserver(t *testing.T) { testConfig(t, normal) } 50func TestMissingFinalNewLine(t *testing.T) { testConfig(t, missingNewline) } 51 52func TestNameList(t *testing.T) { 53 cfg := ClientConfig{ 54 Ndots: 1, 55 } 56 // fqdn should be only result returned 57 names := cfg.NameList("miek.nl.") 58 if len(names) != 1 { 59 t.Errorf("NameList returned != 1 names: %v", names) 60 } else if names[0] != "miek.nl." { 61 t.Errorf("NameList didn't return sent fqdn domain: %v", names[0]) 62 } 63 64 cfg.Search = []string{ 65 "test", 66 } 67 // Sent domain has NDots and search 68 names = cfg.NameList("miek.nl") 69 if len(names) != 2 { 70 t.Errorf("NameList returned != 2 names: %v", names) 71 } else if names[0] != "miek.nl." { 72 t.Errorf("NameList didn't return sent domain first: %v", names[0]) 73 } else if names[1] != "miek.nl.test." { 74 t.Errorf("NameList didn't return search last: %v", names[1]) 75 } 76 77 cfg.Ndots = 2 78 // Sent domain has less than NDots and search 79 names = cfg.NameList("miek.nl") 80 if len(names) != 2 { 81 t.Errorf("NameList returned != 2 names: %v", names) 82 } else if names[0] != "miek.nl.test." { 83 t.Errorf("NameList didn't return search first: %v", names[0]) 84 } else if names[1] != "miek.nl." { 85 t.Errorf("NameList didn't return sent domain last: %v", names[1]) 86 } 87} 88