Resolve the same host with the different client subnet values
(t *testing.T)
| 1082 | |
| 1083 | // Resolve the same host with the different client subnet values |
| 1084 | func TestECSProxy(t *testing.T) { |
| 1085 | var ( |
| 1086 | ip1230 = net.IP{1, 2, 3, 0} |
| 1087 | ip2230 = net.IP{2, 2, 3, 0} |
| 1088 | ip4321 = net.IP{4, 3, 2, 1} |
| 1089 | ip4322 = net.IP{4, 3, 2, 2} |
| 1090 | ip4323 = net.IP{4, 3, 2, 3} |
| 1091 | ) |
| 1092 | |
| 1093 | u := &testUpstream{ |
| 1094 | ans: []dns.RR{&dns.A{ |
| 1095 | Hdr: dns.RR_Header{Rrtype: dns.TypeA, Name: "host.", Ttl: 60}, |
| 1096 | A: ip4321, |
| 1097 | }}, |
| 1098 | ecsIP: ip1230, |
| 1099 | } |
| 1100 | |
| 1101 | prx := mustNew(t, &Config{ |
| 1102 | Logger: testLogger, |
| 1103 | UDPListenAddr: []*net.UDPAddr{net.UDPAddrFromAddrPort(localhostAnyPort)}, |
| 1104 | TCPListenAddr: []*net.TCPAddr{net.TCPAddrFromAddrPort(localhostAnyPort)}, |
| 1105 | UpstreamConfig: &UpstreamConfig{ |
| 1106 | Upstreams: []upstream.Upstream{u}, |
| 1107 | }, |
| 1108 | TrustedProxies: defaultTrustedProxies, |
| 1109 | DNSSECEnabled: true, |
| 1110 | EnableEDNSClientSubnet: true, |
| 1111 | CacheEnabled: true, |
| 1112 | }) |
| 1113 | |
| 1114 | servicetest.RequireRun(t, prx, testTimeout) |
| 1115 | |
| 1116 | t.Run("cache_subnet", func(t *testing.T) { |
| 1117 | d := &DNSContext{ |
| 1118 | Req: newHostTestMessage("host"), |
| 1119 | Addr: netip.MustParseAddrPort("1.2.3.0:1234"), |
| 1120 | } |
| 1121 | |
| 1122 | ctx := testutil.ContextWithTimeout(t, defaultTimeout) |
| 1123 | err := prx.Resolve(ctx, d) |
| 1124 | require.NoError(t, err) |
| 1125 | |
| 1126 | assert.Equal(t, net.IP{4, 3, 2, 1}, firstIP(d.Res)) |
| 1127 | assert.Equal(t, ip1230, u.ecsReqIP) |
| 1128 | }) |
| 1129 | |
| 1130 | t.Run("serve_subnet_cache", func(t *testing.T) { |
| 1131 | d := &DNSContext{ |
| 1132 | Req: newHostTestMessage("host"), |
| 1133 | Addr: netip.MustParseAddrPort("1.2.3.1:1234"), |
| 1134 | } |
| 1135 | u.ans, u.ecsIP, u.ecsReqIP = nil, nil, nil |
| 1136 | |
| 1137 | ctx := testutil.ContextWithTimeout(t, defaultTimeout) |
| 1138 | err := prx.Resolve(ctx, d) |
| 1139 | require.NoError(t, err) |
| 1140 | |
| 1141 | assert.Equal(t, ip4321, firstIP(d.Res)) |
nothing calls this directly
no test coverage detected
searching dependent graphs…