diff --git a/pkg/kubelet/server/server_test.go b/pkg/kubelet/server/server_test.go index 96dce2c86a9..d65828eac12 100644 --- a/pkg/kubelet/server/server_test.go +++ b/pkg/kubelet/server/server_test.go @@ -1579,6 +1579,20 @@ func TestDebuggingDisabledHandlers(t *testing.T) { } +func TestFailedParseParamsSummaryHandler(t *testing.T) { + fw := newServerTest() + defer fw.testHTTPServer.Close() + + resp, err := http.Post(fw.testHTTPServer.URL+"/stats/summary", "invalid/content/type", nil) + assert.NoError(t, err) + defer resp.Body.Close() + v, err := ioutil.ReadAll(resp.Body) + assert.NoError(t, err) + assert.Equal(t, http.StatusInternalServerError, resp.StatusCode) + assert.Contains(t, string(v), "parse form failed") + +} + func TestTrimURLPath(t *testing.T) { tests := []struct { path, expected string diff --git a/pkg/kubelet/server/stats/BUILD b/pkg/kubelet/server/stats/BUILD index 878382309f3..49851893f53 100644 --- a/pkg/kubelet/server/stats/BUILD +++ b/pkg/kubelet/server/stats/BUILD @@ -29,6 +29,7 @@ go_library( "//staging/src/k8s.io/component-base/metrics:go_default_library", "//vendor/github.com/emicklei/go-restful:go_default_library", "//vendor/github.com/google/cadvisor/info/v1:go_default_library", + "//vendor/github.com/pkg/errors:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/pkg/kubelet/server/stats/handler.go b/pkg/kubelet/server/stats/handler.go index c6dd5a0c569..3dc23b45fe1 100644 --- a/pkg/kubelet/server/stats/handler.go +++ b/pkg/kubelet/server/stats/handler.go @@ -26,6 +26,7 @@ import ( restful "github.com/emicklei/go-restful" cadvisorapi "github.com/google/cadvisor/info/v1" + "github.com/pkg/errors" "k8s.io/klog" "k8s.io/api/core/v1" @@ -215,13 +216,16 @@ func (h *handler) handleStats(request *restful.Request, response *restful.Respon // If "only_cpu_and_memory" GET param is true then only cpu and memory is returned in response. func (h *handler) handleSummary(request *restful.Request, response *restful.Response) { onlyCPUAndMemory := false - request.Request.ParseForm() + err := request.Request.ParseForm() + if err != nil { + handleError(response, "/stats/summary", errors.Wrapf(err, "parse form failed")) + return + } if onlyCluAndMemoryParam, found := request.Request.Form["only_cpu_and_memory"]; found && len(onlyCluAndMemoryParam) == 1 && onlyCluAndMemoryParam[0] == "true" { onlyCPUAndMemory = true } var summary *statsapi.Summary - var err error if onlyCPUAndMemory { summary, err = h.summaryProvider.GetCPUAndMemoryStats() } else {