(t *testing.T)
| 969 | } |
| 970 | |
| 971 | func TestExchangeCustomUpstreamConfigCache(t *testing.T) { |
| 972 | prx := mustNew(t, &Config{ |
| 973 | Logger: testLogger, |
| 974 | UDPListenAddr: []*net.UDPAddr{net.UDPAddrFromAddrPort(localhostAnyPort)}, |
| 975 | TCPListenAddr: []*net.TCPAddr{net.TCPAddrFromAddrPort(localhostAnyPort)}, |
| 976 | UpstreamConfig: newTestUpstreamConfig(t, defaultTimeout, testDefaultUpstreamAddr), |
| 977 | TrustedProxies: defaultTrustedProxies, |
| 978 | CacheEnabled: true, |
| 979 | DNSSECEnabled: true, |
| 980 | }) |
| 981 | |
| 982 | servicetest.RequireRun(t, prx, testTimeout) |
| 983 | |
| 984 | var count int |
| 985 | |
| 986 | ansIP := net.IP{4, 3, 2, 1} |
| 987 | exchangeFunc := func(m *dns.Msg) (resp *dns.Msg, err error) { |
| 988 | resp = &dns.Msg{} |
| 989 | resp.SetReply(m) |
| 990 | resp.Answer = append(resp.Answer, &dns.A{ |
| 991 | Hdr: dns.RR_Header{ |
| 992 | Name: m.Question[0].Name, |
| 993 | Class: dns.ClassINET, |
| 994 | Rrtype: dns.TypeA, |
| 995 | Ttl: defaultTestTTL, |
| 996 | }, |
| 997 | A: ansIP, |
| 998 | }) |
| 999 | |
| 1000 | count++ |
| 1001 | |
| 1002 | return resp, nil |
| 1003 | } |
| 1004 | u := &dnsproxytest.Upstream{ |
| 1005 | OnExchange: exchangeFunc, |
| 1006 | OnAddress: func() (addr string) { return "stub" }, |
| 1007 | OnClose: func() (_ error) { panic(testutil.UnexpectedCall()) }, |
| 1008 | } |
| 1009 | |
| 1010 | customUpstreamConfig := NewCustomUpstreamConfig( |
| 1011 | &UpstreamConfig{Upstreams: []upstream.Upstream{u}}, |
| 1012 | true, |
| 1013 | defaultCacheSize, |
| 1014 | prx.EnableEDNSClientSubnet, |
| 1015 | ) |
| 1016 | |
| 1017 | d := &DNSContext{ |
| 1018 | CustomUpstreamConfig: customUpstreamConfig, |
| 1019 | Req: newHostTestMessage("host"), |
| 1020 | Addr: netip.MustParseAddrPort("1.2.3.0:1234"), |
| 1021 | } |
| 1022 | |
| 1023 | ctx := testutil.ContextWithTimeout(t, defaultTimeout) |
| 1024 | err := prx.Resolve(ctx, d) |
| 1025 | require.NoError(t, err) |
| 1026 | |
| 1027 | require.Equal(t, 1, count) |
| 1028 | assert.Equal(t, ansIP, firstIP(d.Res)) |
nothing calls this directly
no test coverage detected
searching dependent graphs…