api: Ensure the internal/ui/service endpoint responds with an array (#9397)

In some circumstances this endpoint will have no results in it (dues to
ACLs, Namespaces or filtering).

This ensures that the response is at least an empty array (`[]`) rather
than `null`
This commit is contained in:
John Cowen 2020-12-15 16:52:00 +00:00 committed by GitHub
parent 7830eb85f6
commit a9913b5b22
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 1 deletions

View File

@ -205,7 +205,8 @@ RPC:
summaries, hasProxy := summarizeServices(out.Nodes.ToServiceDump(), nil, "") summaries, hasProxy := summarizeServices(out.Nodes.ToServiceDump(), nil, "")
sorted := prepSummaryOutput(summaries, false) sorted := prepSummaryOutput(summaries, false)
var result []*ServiceListingSummary // Ensure at least a zero length slice
result := make([]*ServiceListingSummary, 0)
for _, svc := range sorted { for _, svc := range sorted {
sum := ServiceListingSummary{ServiceSummary: *svc} sum := ServiceListingSummary{ServiceSummary: *svc}

View File

@ -548,6 +548,21 @@ func TestUiServices(t *testing.T) {
} }
require.ElementsMatch(t, expected, summary) require.ElementsMatch(t, expected, summary)
}) })
t.Run("Filtered without results", func(t *testing.T) {
filterQuery := url.QueryEscape("Service.Service == absent")
req, _ := http.NewRequest("GET", "/v1/internal/ui/services?filter="+filterQuery, nil)
resp := httptest.NewRecorder()
obj, err := a.srv.UIServices(resp, req)
require.NoError(t, err)
assertIndex(t, resp)
// Ensure the ServiceSummary doesn't output a `null` response when there
// are no matching summaries
require.NotNil(t, obj)
summary := obj.([]*ServiceListingSummary)
require.Len(t, summary, 0)
})
} }
func TestUIGatewayServiceNodes_Terminating(t *testing.T) { func TestUIGatewayServiceNodes_Terminating(t *testing.T) {