From 2bfd6c8f0b9269a074702cbd0caf43ae46411bcb Mon Sep 17 00:00:00 2001 From: Jamario Rankins Date: Tue, 13 Aug 2019 17:23:17 -0600 Subject: [PATCH 1/3] Error message returned if the track is locked --- cmd/download.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmd/download.go b/cmd/download.go index 9deeb0aa0..febd95fcc 100644 --- a/cmd/download.go +++ b/cmd/download.go @@ -188,6 +188,9 @@ func newDownload(flags *pflag.FlagSet, usrCfg *viper.Viper) (*download, error) { if err := json.NewDecoder(res.Body).Decode(&d.payload); err != nil { return nil, decodedAPIError(res) } + if d.payload.Error.Message != "" { + return nil, errors.New(d.payload.Error.Message) + } return d, nil } From 08d56c1e9685417e71880d71a0163253af25f69e Mon Sep 17 00:00:00 2001 From: Jamario Rankins Date: Wed, 14 Aug 2019 15:34:16 -0600 Subject: [PATCH 2/3] Error message returned if the track is locked --- cmd/download.go | 10 ++++++---- cmd/download_test.go | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/cmd/download.go b/cmd/download.go index febd95fcc..8966c6ab0 100644 --- a/cmd/download.go +++ b/cmd/download.go @@ -1,10 +1,12 @@ package cmd import ( + "bytes" "encoding/json" "errors" "fmt" "io" + "io/ioutil" "net/http" netURL "net/url" "os" @@ -185,12 +187,12 @@ func newDownload(flags *pflag.FlagSet, usrCfg *viper.Viper) (*download, error) { } defer res.Body.Close() - if err := json.NewDecoder(res.Body).Decode(&d.payload); err != nil { + body, err := ioutil.ReadAll(res.Body) + res.Body = ioutil.NopCloser(bytes.NewReader(body)) + + if err := json.Unmarshal(body, &d.payload); err != nil || res.StatusCode < 200 || res.StatusCode > 299 { return nil, decodedAPIError(res) } - if d.payload.Error.Message != "" { - return nil, errors.New(d.payload.Error.Message) - } return d, nil } diff --git a/cmd/download_test.go b/cmd/download_test.go index 9410f2473..69e8f90a1 100644 --- a/cmd/download_test.go +++ b/cmd/download_test.go @@ -272,6 +272,42 @@ func assertDownloadedCorrectFiles(t *testing.T, targetDir string) { assert.True(t, os.IsNotExist(err), "It should not write the file if empty.") } +func TestDownloadError(t *testing.T) { + handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusBadRequest) + fmt.Fprintf(w, `{"error": {"type": "error", "message": "test error"}}`) + }) + + ts := httptest.NewServer(handler) + defer ts.Close() + + tmpDir, err := ioutil.TempDir("", "submit-err-tmp-dir") + defer os.RemoveAll(tmpDir) + assert.NoError(t, err) + + v := viper.New() + v.Set("token", "abc123") + v.Set("workspace", tmpDir) + v.Set("apibaseurl", ts.URL) + + cfg := config.Config{ + Persister: config.InMemoryPersister{}, + UserViperConfig: v, + DefaultBaseURL: "http://example.com", + } + + flags := pflag.NewFlagSet("fake", pflag.PanicOnError) + setupDownloadFlags(flags) + flags.Set("uuid", "value") + + err = runDownload(cfg, flags, []string{}) + + fmt.Println(err) + + assert.Regexp(t, "test error", err.Error()) + +} + const payloadTemplate = ` { "solution": { From 31c4c106ea5d4b1b30b0772b07f327959427a0a0 Mon Sep 17 00:00:00 2001 From: Jamario Rankins Date: Thu, 15 Aug 2019 15:58:27 -0600 Subject: [PATCH 3/3] Allowed Unmarshal to handle the error and removed debug output --- cmd/download.go | 8 ++++++-- cmd/download_test.go | 4 +--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/cmd/download.go b/cmd/download.go index 8966c6ab0..2d2935f24 100644 --- a/cmd/download.go +++ b/cmd/download.go @@ -187,10 +187,14 @@ func newDownload(flags *pflag.FlagSet, usrCfg *viper.Viper) (*download, error) { } defer res.Body.Close() - body, err := ioutil.ReadAll(res.Body) + if res.StatusCode < 200 || res.StatusCode > 299 { + return nil, decodedAPIError(res) + } + + body, _ := ioutil.ReadAll(res.Body) res.Body = ioutil.NopCloser(bytes.NewReader(body)) - if err := json.Unmarshal(body, &d.payload); err != nil || res.StatusCode < 200 || res.StatusCode > 299 { + if err := json.Unmarshal(body, &d.payload); err != nil { return nil, decodedAPIError(res) } diff --git a/cmd/download_test.go b/cmd/download_test.go index 69e8f90a1..2eb0418df 100644 --- a/cmd/download_test.go +++ b/cmd/download_test.go @@ -302,9 +302,7 @@ func TestDownloadError(t *testing.T) { err = runDownload(cfg, flags, []string{}) - fmt.Println(err) - - assert.Regexp(t, "test error", err.Error()) + assert.Equal(t, "test error", err.Error()) }