zone_test.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package main
  2. import (
  3. "github.com/abh/geodns/Godeps/_workspace/src/github.com/miekg/dns"
  4. . "github.com/abh/geodns/Godeps/_workspace/src/gopkg.in/check.v1"
  5. )
  6. func (s *ConfigSuite) TestExampleComZone(c *C) {
  7. ex, ok := s.zones["test.example.com"]
  8. c.Check(ok, Equals, true)
  9. c.Check(ex, NotNil)
  10. // test.example.com was loaded
  11. c.Assert(ex.Labels, NotNil)
  12. c.Check(ex.Logging.StatHat, Equals, true)
  13. c.Check(ex.Logging.StatHatAPI, Equals, "abc-test")
  14. c.Check(ex.Labels["weight"].MaxHosts, Equals, 1)
  15. // Make sure that the empty "no.bar" zone gets skipped and "bar" is used
  16. label, qtype := ex.findLabels("bar", []string{"no", "europe", "@"}, qTypes{dns.TypeA})
  17. c.Check(label.Records[dns.TypeA], HasLen, 1)
  18. c.Check(label.Records[dns.TypeA][0].RR.(*dns.A).A.String(), Equals, "192.168.1.2")
  19. c.Check(qtype, Equals, dns.TypeA)
  20. label, qtype = ex.findLabels("", []string{"@"}, qTypes{dns.TypeMX})
  21. Mxs := label.Records[dns.TypeMX]
  22. c.Check(Mxs, HasLen, 2)
  23. c.Check(Mxs[0].RR.(*dns.MX).Mx, Equals, "mx.example.net.")
  24. c.Check(Mxs[1].RR.(*dns.MX).Mx, Equals, "mx2.example.net.")
  25. label, qtype = ex.findLabels("", []string{"dk", "europe", "@"}, qTypes{dns.TypeMX})
  26. Mxs = label.Records[dns.TypeMX]
  27. c.Check(Mxs, HasLen, 1)
  28. c.Check(Mxs[0].RR.(*dns.MX).Mx, Equals, "mx-eu.example.net.")
  29. c.Check(qtype, Equals, dns.TypeMX)
  30. // look for multiple record types
  31. label, qtype = ex.findLabels("www", []string{"@"}, qTypes{dns.TypeCNAME, dns.TypeA})
  32. c.Check(label.Records[dns.TypeCNAME], HasLen, 1)
  33. c.Check(qtype, Equals, dns.TypeCNAME)
  34. // pretty.Println(ex.Labels[""].Records[dns.TypeNS])
  35. label, qtype = ex.findLabels("", []string{"@"}, qTypes{dns.TypeNS})
  36. Ns := label.Records[dns.TypeNS]
  37. c.Check(Ns, HasLen, 2)
  38. // Test that we get the expected NS records (in any order because
  39. // of the configuration format used for this zone)
  40. c.Check(Ns[0].RR.(*dns.NS).Ns, Matches, "^ns[12]\\.example\\.net.$")
  41. c.Check(Ns[1].RR.(*dns.NS).Ns, Matches, "^ns[12]\\.example\\.net.$")
  42. label, qtype = ex.findLabels("", []string{"@"}, qTypes{dns.TypeSPF})
  43. Spf := label.Records[dns.TypeSPF]
  44. c.Check(Spf, HasLen, 1)
  45. c.Check(Spf[0].RR.(*dns.SPF).Txt[0], Equals, "v=spf1 ~all")
  46. label, qtype = ex.findLabels("foo", []string{"@"}, qTypes{dns.TypeTXT})
  47. Txt := label.Records[dns.TypeTXT]
  48. c.Check(Txt, HasLen, 1)
  49. c.Check(Txt[0].RR.(*dns.TXT).Txt[0], Equals, "this is foo")
  50. label, qtype = ex.findLabels("weight", []string{"@"}, qTypes{dns.TypeTXT})
  51. Txt = label.Records[dns.TypeTXT]
  52. c.Check(Txt, HasLen, 2)
  53. c.Check(Txt[0].RR.(*dns.TXT).Txt[0], Equals, "w1000")
  54. c.Check(Txt[1].RR.(*dns.TXT).Txt[0], Equals, "w1")
  55. //verify empty labels are created
  56. label, qtype = ex.findLabels("a.b.c", []string{"@"}, qTypes{dns.TypeA})
  57. c.Check(label.Records[dns.TypeA], HasLen, 1)
  58. c.Check(label.Records[dns.TypeA][0].RR.(*dns.A).A.String(), Equals, "192.168.1.7")
  59. label, qtype = ex.findLabels("b.c", []string{"@"}, qTypes{dns.TypeA})
  60. c.Check(label.Records[dns.TypeA], HasLen, 0)
  61. c.Check(label.Label, Equals, "b.c")
  62. label, qtype = ex.findLabels("c", []string{"@"}, qTypes{dns.TypeA})
  63. c.Check(label.Records[dns.TypeA], HasLen, 0)
  64. c.Check(label.Label, Equals, "c")
  65. //verify label is created
  66. label, qtype = ex.findLabels("three.two.one", []string{"@"}, qTypes{dns.TypeA})
  67. c.Check(label.Records[dns.TypeA], HasLen, 1)
  68. c.Check(label.Records[dns.TypeA][0].RR.(*dns.A).A.String(), Equals, "192.168.1.5")
  69. label, qtype = ex.findLabels("two.one", []string{"@"}, qTypes{dns.TypeA})
  70. c.Check(label.Records[dns.TypeA], HasLen, 0)
  71. c.Check(label.Label, Equals, "two.one")
  72. //verify label isn't overwritten
  73. label, qtype = ex.findLabels("one", []string{"@"}, qTypes{dns.TypeA})
  74. c.Check(label.Records[dns.TypeA], HasLen, 1)
  75. c.Check(label.Records[dns.TypeA][0].RR.(*dns.A).A.String(), Equals, "192.168.1.6")
  76. }
  77. func (s *ConfigSuite) TestExampleOrgZone(c *C) {
  78. ex := s.zones["test.example.org"]
  79. // test.example.org was loaded
  80. c.Assert(ex.Labels, NotNil)
  81. label, qtype := ex.findLabels("sub", []string{"@"}, qTypes{dns.TypeNS})
  82. c.Assert(qtype, Equals, dns.TypeNS)
  83. Ns := label.Records[dns.TypeNS]
  84. c.Check(Ns, HasLen, 2)
  85. c.Check(Ns[0].RR.(*dns.NS).Ns, Equals, "ns1.example.com.")
  86. c.Check(Ns[1].RR.(*dns.NS).Ns, Equals, "ns2.example.com.")
  87. }