targeting_test.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. import (
  3. . "github.com/abh/geodns/Godeps/_workspace/src/gopkg.in/check.v1"
  4. "net"
  5. )
  6. type TargetingSuite struct {
  7. }
  8. var _ = Suite(&TargetingSuite{})
  9. func (s *TargetingSuite) SetUpSuite(c *C) {
  10. Config.GeoIP.Directory = "db"
  11. }
  12. func (s *TargetingSuite) TestTargetString(c *C) {
  13. tgt := TargetOptions(TargetGlobal + TargetCountry + TargetContinent)
  14. str := tgt.String()
  15. c.Check(str, Equals, "@ continent country")
  16. }
  17. func (s *TargetingSuite) TestTargetParse(c *C) {
  18. tgt, err := parseTargets("@ foo country")
  19. str := tgt.String()
  20. c.Check(str, Equals, "@ country")
  21. c.Check(err.Error(), Equals, "Unknown targeting option 'foo'")
  22. tgt, err = parseTargets("@ continent country asn")
  23. c.Assert(err, IsNil)
  24. str = tgt.String()
  25. c.Check(str, Equals, "@ continent country asn")
  26. }
  27. func (s *TargetingSuite) TestGetTargets(c *C) {
  28. ip := net.ParseIP("207.171.1.1")
  29. geoIP.setupGeoIPCity()
  30. geoIP.setupGeoIPCountry()
  31. geoIP.setupGeoIPASN()
  32. tgt, _ := parseTargets("@ continent country")
  33. targets, _ := tgt.GetTargets(ip)
  34. c.Check(targets, DeepEquals, []string{"us", "north-america", "@"})
  35. if geoIP.city == nil {
  36. c.Log("City GeoIP database requred for these tests")
  37. return
  38. }
  39. tgt, _ = parseTargets("@ continent country region ")
  40. targets, _ = tgt.GetTargets(ip)
  41. c.Check(targets, DeepEquals, []string{"us-ca", "us", "north-america", "@"})
  42. tgt, _ = parseTargets("@ continent regiongroup country region ")
  43. targets, _ = tgt.GetTargets(ip)
  44. c.Check(targets, DeepEquals, []string{"us-ca", "us-west", "us", "north-america", "@"})
  45. tgt, _ = parseTargets("@ continent regiongroup country region asn ip")
  46. targets, _ = tgt.GetTargets(ip)
  47. c.Check(targets, DeepEquals, []string{"[207.171.1.1]", "[207.171.1.0]", "as7012", "us-ca", "us-west", "us", "north-america", "@"})
  48. ip = net.ParseIP("2607:f238:2:0::ff:4")
  49. tgt, _ = parseTargets("ip")
  50. targets, _ = tgt.GetTargets(ip)
  51. c.Check(targets, DeepEquals, []string{"[2607:f238:2::ff:4]", "[2607:f238:2::]"})
  52. }