From eb76b9ec8eaaade2167ae8ecf4bb022c8ca1f72c Mon Sep 17 00:00:00 2001 From: "Brian C. Lane" Date: Mon, 27 Jul 2020 10:45:45 -0700 Subject: [PATCH] weldr: Fix the bad blueprint depsolve response This changes the response to match lorax-composer's behavior. If any of the blueprints in the list passed to /blueprints/depsolve/... have an error that error should be appended to the error list, and the blueprint included in the blueprints list with an empty dependencies section. It was returning an error 400 and a single error if it hit any depsolve problems, skipping any other blueprints and returning the wrong response. This also adjusts the tests to account for the change. Fixes #890 --- internal/weldr/api.go | 7 +++---- internal/weldr/api_test.go | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/internal/weldr/api.go b/internal/weldr/api.go index 2b68f9f1c..b15377d7c 100644 --- a/internal/weldr/api.go +++ b/internal/weldr/api.go @@ -1118,12 +1118,11 @@ func (api *API) blueprintsDepsolveHandler(writer http.ResponseWriter, request *h dependencies, _, err := api.depsolveBlueprint(blueprint, nil) if err != nil { - errors := responseError{ + blueprintsErrors = append(blueprintsErrors, responseError{ ID: "BlueprintsError", Msg: fmt.Sprintf("%s: %s", name, err.Error()), - } - statusResponseError(writer, http.StatusBadRequest, errors) - return + }) + dependencies = []rpmmd.PackageSpec{} } blueprints = append(blueprints, entry{*blueprint, dependencies}) diff --git a/internal/weldr/api_test.go b/internal/weldr/api_test.go index 4afef1baf..86dcca5c6 100644 --- a/internal/weldr/api_test.go +++ b/internal/weldr/api_test.go @@ -441,8 +441,8 @@ func TestBlueprintsDepsolve(t *testing.T) { ExpectedJSON string }{ {rpmmd_mock.BaseFixture, http.StatusOK, `{"blueprints":[{"blueprint":{"name":"test","description":"Test","version":"0.0.1","packages":[{"name":"dep-package1","version":"*"}],"groups":[],"modules":[{"name":"dep-package3","version":"*"}]},"dependencies":[{"name":"dep-package3","epoch":7,"version":"3.0.3","release":"1.fc30","arch":"x86_64"},{"name":"dep-package1","epoch":0,"version":"1.33","release":"2.fc30","arch":"x86_64"},{"name":"dep-package2","epoch":0,"version":"2.9","release":"1.fc30","arch":"x86_64"}]}],"errors":[]}`}, - {rpmmd_mock.NonExistingPackage, http.StatusBadRequest, `{"status":false,"errors":[{"id":"BlueprintsError","msg":"test: DNF error occured: MarkingErrors: Error occurred when marking packages for installation: Problems in request:\nmissing packages: fash"}]}`}, - {rpmmd_mock.BadDepsolve, http.StatusBadRequest, `{"status":false,"errors":[{"id":"BlueprintsError","msg":"test: DNF error occured: DepsolveError: There was a problem depsolving ['go2rpm']: \n Problem: conflicting requests\n - nothing provides askalono-cli needed by go2rpm-1-4.fc31.noarch"}]}`}, + {rpmmd_mock.NonExistingPackage, http.StatusOK, `{"blueprints":[{"blueprint":{"name":"test","description":"Test","version":"0.0.1","packages":[{"name":"dep-package1","version":"*"}],"groups":[],"modules":[{"name":"dep-package3","version":"*"}]},"dependencies":[]}],"errors":[{"id":"BlueprintsError","msg":"test: DNF error occured: MarkingErrors: Error occurred when marking packages for installation: Problems in request:\nmissing packages: fash"}]}`}, + {rpmmd_mock.BadDepsolve, http.StatusOK, `{"blueprints":[{"blueprint":{"name":"test","description":"Test","version":"0.0.1","packages":[{"name":"dep-package1","version":"*"}],"groups":[],"modules":[{"name":"dep-package3","version":"*"}]},"dependencies":[]}],"errors":[{"id":"BlueprintsError","msg":"test: DNF error occured: DepsolveError: There was a problem depsolving ['go2rpm']: \n Problem: conflicting requests\n - nothing provides askalono-cli needed by go2rpm-1-4.fc31.noarch"}]}`}, } for _, c := range cases {