diff --git a/internal/osbuildexecutor/runner-impl-aws-ec2.go b/internal/osbuildexecutor/runner-impl-aws-ec2.go index 012947c63f..4813780806 100644 --- a/internal/osbuildexecutor/runner-impl-aws-ec2.go +++ b/internal/osbuildexecutor/runner-impl-aws-ec2.go @@ -149,14 +149,14 @@ func handleBuild(inputArchive, host string) (*osbuild.Result, error) { var osbuildResult osbuild.Result - err = json.NewDecoder(resp.Body).Decode(&osbuildResult) + body, err := io.ReadAll(resp.Body) if err != nil { - return nil, fmt.Errorf("Unable to decode response body into osbuild result: %w", err) + return nil, fmt.Errorf("Unable to read response body: %w", err) } - _, err = io.ReadAll(resp.Body) + err = json.Unmarshal(body, &osbuildResult) if err != nil { - return nil, fmt.Errorf("Unable to wait for executor to close connection: %w", err) + return nil, fmt.Errorf("Unable to decode response body %q into osbuild result: %w", body, err) } return &osbuildResult, nil diff --git a/internal/osbuildexecutor/runner-impl-aws-ec2_test.go b/internal/osbuildexecutor/runner-impl-aws-ec2_test.go index ed36d6b893..140de6ad4e 100644 --- a/internal/osbuildexecutor/runner-impl-aws-ec2_test.go +++ b/internal/osbuildexecutor/runner-impl-aws-ec2_test.go @@ -91,6 +91,24 @@ func TestHandleBuild(t *testing.T) { require.True(t, osbuildResult.Success) } +func TestHandleBuildNoJSON(t *testing.T) { + buildServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, err := io.ReadAll(r.Body) + require.NoError(t, err) + + w.WriteHeader(http.StatusCreated) + _, err = w.Write([]byte("bad non-json text")) + require.NoError(t, err) + })) + + cacheDir := t.TempDir() + inputArchive := filepath.Join(cacheDir, "test.tar") + require.NoError(t, os.WriteFile(inputArchive, []byte("test"), 0600)) + + _, err := osbuildexecutor.HandleBuild(inputArchive, buildServer.URL) + require.ErrorContains(t, err, `Unable to decode response body "bad non-json text" into osbuild result:`) +} + func TestHandleOutputArchive(t *testing.T) { serverDir := t.TempDir() serverOutputDir := filepath.Join(serverDir, "output")