mirror of
https://github.com/zalando-incubator/kube-metrics-adapter.git
synced 2025-03-12 13:14:33 +00:00
Fix handling of invalid/empty json response (#209)
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
This commit is contained in:

committed by
GitHub

parent
b677e814be
commit
be7567efea
@ -72,7 +72,7 @@ func (g *JSONPathMetricsGetter) GetMetric(metricsURL url.URL) (float64, error) {
|
|||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(nodes) > 1 {
|
if len(nodes) != 1 {
|
||||||
return 0, fmt.Errorf("unexpected json: expected single numeric or array value")
|
return 0, fmt.Errorf("unexpected json: expected single numeric or array value")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package httpmetrics
|
package httpmetrics
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
@ -27,6 +28,7 @@ func TestJSONPathMetricsGetter(t *testing.T) {
|
|||||||
jsonPath string
|
jsonPath string
|
||||||
result float64
|
result float64
|
||||||
aggregator AggregatorFunc
|
aggregator AggregatorFunc
|
||||||
|
err error
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "basic single value",
|
name: "basic single value",
|
||||||
@ -49,6 +51,18 @@ func TestJSONPathMetricsGetter(t *testing.T) {
|
|||||||
result: 5,
|
result: 5,
|
||||||
aggregator: Average,
|
aggregator: Average,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "json path not resulting in array or number should lead to error",
|
||||||
|
jsonResponse: []byte(`{"metric.value":5}`),
|
||||||
|
jsonPath: "$['invalid.metric.values']",
|
||||||
|
err: errors.New("unexpected json: expected single numeric or array value"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "invalid json should error",
|
||||||
|
jsonResponse: []byte(`{`),
|
||||||
|
jsonPath: "$['invalid.metric.values']",
|
||||||
|
err: errors.New("unexpected end of file"),
|
||||||
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
server := makeTestHTTPServer(t, tc.jsonResponse)
|
server := makeTestHTTPServer(t, tc.jsonResponse)
|
||||||
@ -58,6 +72,11 @@ func TestJSONPathMetricsGetter(t *testing.T) {
|
|||||||
url, err := url.Parse(fmt.Sprintf("%s/metrics", server.URL))
|
url, err := url.Parse(fmt.Sprintf("%s/metrics", server.URL))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
metric, err := getter.GetMetric(*url)
|
metric, err := getter.GetMetric(*url)
|
||||||
|
if tc.err != nil {
|
||||||
|
require.Error(t, err)
|
||||||
|
require.Equal(t, tc.err.Error(), err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, tc.result, metric)
|
require.Equal(t, tc.result, metric)
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user