From dfffba69a77159edc03781b51c3c7ffe51060c62 Mon Sep 17 00:00:00 2001 From: "denis.o" Date: Wed, 22 Dec 2021 00:46:00 +0200 Subject: [PATCH] Added error handling for search result Signed-off-by: denis.o --- internal/monocular/search.go | 5 ++++- internal/monocular/search_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/internal/monocular/search.go b/internal/monocular/search.go index 3082ff361..1870e97b3 100644 --- a/internal/monocular/search.go +++ b/internal/monocular/search.go @@ -135,7 +135,10 @@ func (c *Client) Search(term string) ([]SearchResult, error) { result := &searchResponse{} - json.NewDecoder(res.Body).Decode(result) + err = json.NewDecoder(res.Body).Decode(result) + if err != nil { + return nil, err + } return result.Data, nil } diff --git a/internal/monocular/search_test.go b/internal/monocular/search_test.go index 9f6954af7..b344754d6 100644 --- a/internal/monocular/search_test.go +++ b/internal/monocular/search_test.go @@ -26,6 +26,9 @@ import ( // A search response for phpmyadmin containing 2 results var searchResult = `{"data":[{"id":"stable/phpmyadmin","type":"chart","attributes":{"name":"phpmyadmin","repo":{"name":"stable","url":"https://charts.helm.sh/stable"},"description":"phpMyAdmin is an mysql administration frontend","home":"https://www.phpmyadmin.net/","keywords":["mariadb","mysql","phpmyadmin"],"maintainers":[{"name":"Bitnami","email":"containers@bitnami.com"}],"sources":["https://github.com/bitnami/bitnami-docker-phpmyadmin"],"icon":""},"links":{"self":"/v1/charts/stable/phpmyadmin"},"relationships":{"latestChartVersion":{"data":{"version":"3.0.0","app_version":"4.9.0-1","created":"2019-08-08T17:57:31.38Z","digest":"119c499251bffd4b06ff0cd5ac98c2ce32231f84899fb4825be6c2d90971c742","urls":["https://charts.helm.sh/stable/phpmyadmin-3.0.0.tgz"],"readme":"/v1/assets/stable/phpmyadmin/versions/3.0.0/README.md","values":"/v1/assets/stable/phpmyadmin/versions/3.0.0/values.yaml"},"links":{"self":"/v1/charts/stable/phpmyadmin/versions/3.0.0"}}}},{"id":"bitnami/phpmyadmin","type":"chart","attributes":{"name":"phpmyadmin","repo":{"name":"bitnami","url":"https://charts.bitnami.com"},"description":"phpMyAdmin is an mysql administration frontend","home":"https://www.phpmyadmin.net/","keywords":["mariadb","mysql","phpmyadmin"],"maintainers":[{"name":"Bitnami","email":"containers@bitnami.com"}],"sources":["https://github.com/bitnami/bitnami-docker-phpmyadmin"],"icon":""},"links":{"self":"/v1/charts/bitnami/phpmyadmin"},"relationships":{"latestChartVersion":{"data":{"version":"3.0.0","app_version":"4.9.0-1","created":"2019-08-08T18:34:13.341Z","digest":"66d77cf6d8c2b52c488d0a294cd4996bd5bad8dc41d3829c394498fb401c008a","urls":["https://charts.bitnami.com/bitnami/phpmyadmin-3.0.0.tgz"],"readme":"/v1/assets/bitnami/phpmyadmin/versions/3.0.0/README.md","values":"/v1/assets/bitnami/phpmyadmin/versions/3.0.0/values.yaml"},"links":{"self":"/v1/charts/bitnami/phpmyadmin/versions/3.0.0"}}}}]}` +// Invalid search response +var invalidSearchResult = `{"data":[{"id":"stable/phpmyadmin","type"` + func TestSearch(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -47,3 +50,24 @@ func TestSearch(t *testing.T) { t.Error("Did not receive the expected number of results") } } + +func TestInvalidSearchResult(t *testing.T) { + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintln(w, invalidSearchResult) + })) + defer ts.Close() + + c, err := New(ts.URL) + if err != nil { + t.Errorf("unable to create monocular client: %s", err) + } + + results, err := c.Search("phpmyadmin") + if results != nil { + t.Error("expected nil result in case of invalid response") + } + if err == nil { + t.Error("expected error in case of invalid response") + } +}