epdg_resolver_test.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package ike
  2. import (
  3. "context"
  4. "fmt"
  5. "net/http"
  6. "net/http/httptest"
  7. "testing"
  8. )
  9. func TestResolveEPDGWithECS(t *testing.T) {
  10. server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  11. if got := r.URL.Query().Get("name"); got != "epdg.epc.mnc002.mcc262.pub.3gppnetwork.org" {
  12. t.Errorf("name = %q", got)
  13. }
  14. if got := r.URL.Query().Get("edns_client_subnet"); got != "109.192.0.0/24" {
  15. t.Errorf("edns_client_subnet = %q", got)
  16. }
  17. w.Header().Set("Content-Type", "application/dns-json")
  18. _, _ = fmt.Fprint(w, `{
  19. "Status": 0,
  20. "Question": [{"name":"epdg.example.","type":1}],
  21. "Answer": [
  22. {"name":"epdg.example.","type":5,"TTL":60,"data":"gateway.example."},
  23. {"name":"gateway.example.","type":1,"TTL":60,"data":"139.7.117.168"},
  24. {"name":"gateway.example.","type":1,"TTL":60,"data":"139.7.117.169"},
  25. {"name":"gateway.example.","type":1,"TTL":60,"data":"139.7.117.168"}
  26. ]
  27. }`)
  28. }))
  29. defer server.Close()
  30. addresses, err := resolveEPDGWithECS(
  31. context.Background(),
  32. server.Client(),
  33. server.URL,
  34. "epdg.epc.mnc002.mcc262.pub.3gppnetwork.org",
  35. "109.192.0.0/24",
  36. )
  37. if err != nil {
  38. t.Fatalf("resolveEPDGWithECS: %v", err)
  39. }
  40. if len(addresses) != 2 || addresses[0].IP.String() != "139.7.117.168" || addresses[1].IP.String() != "139.7.117.169" {
  41. t.Fatalf("addresses = %#v", addresses)
  42. }
  43. }
  44. func TestResolveEPDGWithECSRejectsEmptyAnswer(t *testing.T) {
  45. server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
  46. _, _ = fmt.Fprint(w, `{"Status":0,"Answer":[{"type":5,"data":"gateway.example."}]}`)
  47. }))
  48. defer server.Close()
  49. if _, err := resolveEPDGWithECS(context.Background(), server.Client(), server.URL, "epdg.example", "192.0.2.0/24"); err == nil {
  50. t.Fatal("empty address answer was accepted")
  51. }
  52. }