diff --git a/pkg/agent/apiserver/handlers/fqdncache/handler.go b/pkg/agent/apiserver/handlers/fqdncache/handler.go index cdecad81429..b378d8b0b69 100644 --- a/pkg/agent/apiserver/handlers/fqdncache/handler.go +++ b/pkg/agent/apiserver/handlers/fqdncache/handler.go @@ -29,7 +29,7 @@ func HandleFunc(npq querier.AgentNetworkPolicyInfoQuerier) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { fqdnFilter := newFilterFromURLQuery(r.URL.Query()) dnsEntryCache := npq.GetFQDNCache(fqdnFilter) - resp := []agentapi.FQDNCacheResponse{} + resp := make([]agentapi.FQDNCacheResponse, 0, len(dnsEntryCache)) for _, entry := range dnsEntryCache { resp = append(resp, agentapi.FQDNCacheResponse{ FQDNName: entry.FQDNName, @@ -45,5 +45,8 @@ func HandleFunc(npq querier.AgentNetworkPolicyInfoQuerier) http.HandlerFunc { } func newFilterFromURLQuery(query url.Values) *querier.FQDNCacheFilter { + if len(query) == 0 { + return nil + } return &querier.FQDNCacheFilter{Domain: query.Get("domain")} } diff --git a/pkg/agent/apiserver/handlers/fqdncache/handler_test.go b/pkg/agent/apiserver/handlers/fqdncache/handler_test.go index 5a371638d0f..ea553ab6f51 100644 --- a/pkg/agent/apiserver/handlers/fqdncache/handler_test.go +++ b/pkg/agent/apiserver/handlers/fqdncache/handler_test.go @@ -26,20 +26,22 @@ import ( "github.com/stretchr/testify/require" "go.uber.org/mock/gomock" + "antrea.io/antrea/pkg/agent/apis" "antrea.io/antrea/pkg/agent/types" queriertest "antrea.io/antrea/pkg/querier/testing" ) func TestFqdnCacheQuery(t *testing.T) { tests := []struct { - name string - expectedStatus int - expectedResponse []types.DnsCacheEntry + name string + expectedStatus int + filteredCacheEntries []types.DnsCacheEntry + expectedResponse []apis.FQDNCacheResponse }{ { name: "FQDN cache exists - multiple addresses multiple domains", expectedStatus: http.StatusOK, - expectedResponse: []types.DnsCacheEntry{ + filteredCacheEntries: []types.DnsCacheEntry{ { FQDNName: "example.com", IPAddress: net.ParseIP("10.0.0.1"), @@ -56,18 +58,35 @@ func TestFqdnCacheQuery(t *testing.T) { ExpirationTime: time.Date(2025, 12, 25, 15, 0, 0, 0, time.UTC), }, }, + expectedResponse: []apis.FQDNCacheResponse{ + { + FQDNName: "example.com", + IPAddress: net.ParseIP("10.0.0.1").String(), + ExpirationTime: time.Date(2025, 12, 25, 15, 0, 0, 0, time.UTC), + }, + { + FQDNName: "foo.com", + IPAddress: net.ParseIP("10.0.0.4").String(), + ExpirationTime: time.Date(2025, 12, 25, 15, 0, 0, 0, time.UTC), + }, + { + FQDNName: "bar.com", + IPAddress: net.ParseIP("10.0.0.5").String(), + ExpirationTime: time.Date(2025, 12, 25, 15, 0, 0, 0, time.UTC), + }, + }, }, { - name: "FQDN cache does not exist", - expectedStatus: http.StatusOK, - expectedResponse: []types.DnsCacheEntry{}, + name: "FQDN cache does not exist", + expectedStatus: http.StatusOK, + filteredCacheEntries: []types.DnsCacheEntry{}, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { ctrl := gomock.NewController(t) q := queriertest.NewMockAgentNetworkPolicyInfoQuerier(ctrl) - q.EXPECT().GetFQDNCache(nil).Return(tt.expectedResponse) + q.EXPECT().GetFQDNCache(nil).Return(tt.filteredCacheEntries) handler := HandleFunc(q) req, err := http.NewRequest(http.MethodGet, "", nil) require.NoError(t, err) @@ -80,9 +99,9 @@ func TestFqdnCacheQuery(t *testing.T) { for i, rec := range receivedResponse { parsedTime, err := time.Parse(time.RFC3339, rec["expirationTime"].(string)) require.NoError(t, err) - assert.Equal(t, tt.expectedResponse[i], types.DnsCacheEntry{ + assert.Equal(t, tt.expectedResponse[i], apis.FQDNCacheResponse{ FQDNName: rec["fqdnName"].(string), - IPAddress: net.ParseIP(rec["ipAddress"].(string)), + IPAddress: rec["ipAddress"].(string), ExpirationTime: parsedTime, }) } diff --git a/pkg/agent/controller/networkpolicy/networkpolicy_controller.go b/pkg/agent/controller/networkpolicy/networkpolicy_controller.go index b861010c744..bd56a7e039f 100644 --- a/pkg/agent/controller/networkpolicy/networkpolicy_controller.go +++ b/pkg/agent/controller/networkpolicy/networkpolicy_controller.go @@ -552,9 +552,6 @@ func (c *Controller) GetFQDNCache(fqdnFilter *querier.FQDNCacheFilter) []types.D // this pattern will match no strings if there is an error with the regex formatting or usage with the user specified --domain flag pattern = regexp.MustCompile(`a\A`) } - } else { - // this pattern will match all strings if the filter is unset - pattern = regexp.MustCompile(`.*`) } for fqdn, dnsMeta := range c.fqdnController.dnsEntryCache { for _, ipWithExpiration := range dnsMeta.responseIPs {