client: Add Cancel function and tests

NOTE that the tests against the rpmmd fixure for running and waiting are
a bit of a kludge. It is impossible to mock up a running or waiting that
will allow an actual cancel, so the tests check for the internal server
error generated by using the fixure data.

Getting this error means that the API code did it's job and tried to
cancel the compose so that should be a good compromise.
This commit is contained in:
Brian C. Lane 2022-01-28 15:06:16 -08:00 committed by Ondřej Budai
parent c657713181
commit 52e9d45e58
2 changed files with 46 additions and 4 deletions

View file

@ -105,6 +105,20 @@ func GetComposesTypesV0(socket *http.Client) ([]weldr.ComposeTypeV0, *APIRespons
return composeTypes.Types, nil, nil
}
// CancelComposeV0 cancels one composes based on the uuid
func CancelComposeV0(socket *http.Client, uuid string) (weldr.CancelComposeStatusV0, *APIResponse, error) {
body, resp, err := DeleteRaw(socket, "/api/v0/compose/cancel/"+uuid)
if resp != nil || err != nil {
return weldr.CancelComposeStatusV0{}, resp, err
}
var status weldr.CancelComposeStatusV0
err = json.Unmarshal(body, &status)
if err != nil {
return weldr.CancelComposeStatusV0{}, nil, err
}
return status, nil, nil
}
// DeleteComposeV0 deletes one or more composes based on their uuid
func DeleteComposeV0(socket *http.Client, uuids string) (weldr.DeleteComposeResponseV0, *APIResponse, error) {
body, resp, err := DeleteRaw(socket, "/api/v0/compose/delete/"+uuids)

View file

@ -13,6 +13,8 @@
// * image download
// * log download
// * logs archive download
// * cancel waiting compose
// * cancel running compose
//
// In addition osbuild-composer has not implemented:
//
@ -121,7 +123,16 @@ func TestComposeInvalidCharsBlueprintV0(t *testing.T) {
}
// Test compose cancel for unknown uuid fails
// Is cancel implemented at all?
func TestCancelUnknownComposeV0(t *testing.T) {
status, resp, err := CancelComposeV0(testState.socket, "c91818f9-8025-47af-89d2-f030d7000c2c")
require.NoError(t, err, "failed with a client error")
assert.Equal(t, weldr.CancelComposeStatusV0{}, status)
require.NotNil(t, resp)
require.False(t, resp.Status, "Cancel did not fail")
require.Equal(t, 1, len(resp.Errors), "%#v", resp)
require.Equal(t, "UnknownUUID", resp.Errors[0].ID)
require.Contains(t, resp.Errors[0].Msg, "c91818f9-8025-47af-89d2-f030d7000c2c")
}
// Test compose delete for unknown uuid
func TestDeleteUnknownComposeV0(t *testing.T) {
@ -149,9 +160,6 @@ func TestUnknownComposeInfoV0(t *testing.T) {
// Test compose metadata for unknown uuid
// TODO osbuild-composer has not implemented compose/metadata yet
// Test compose results for unknown uuid
// TODO osbuild-composer has not implemented compose/results yet
// Test compose image for unknown uuid
func TestComposeInvalidImageV0(t *testing.T) {
resp, err := WriteComposeImageV0(testState.socket, ioutil.Discard, "c91818f9-8025-47af-89d2-f030d7000c2c")
@ -355,6 +363,16 @@ func TestFailedComposeV0(t *testing.T) {
resp, err = WriteComposeResultsV0(testState.socket, ioutil.Discard, buildID.String())
require.NoError(t, err, "failed with a client error")
require.Nil(t, resp)
// Test canceling the failed compose
cancelStatus, resp, err := CancelComposeV0(testState.socket, buildID.String())
require.NoError(t, err, "failed with a client error")
assert.Equal(t, weldr.CancelComposeStatusV0{}, cancelStatus)
require.NotNil(t, resp)
require.False(t, resp.Status, "Cancel did not fail")
require.Equal(t, 1, len(resp.Errors), "%#v", resp)
require.Equal(t, "BuildInWrongState", resp.Errors[0].ID)
require.Contains(t, resp.Errors[0].Msg, buildID.String())
}
// Setup and run the finished compose tests
@ -450,6 +468,16 @@ func TestFinishedComposeV0(t *testing.T) {
resp, err = WriteComposeResultsV0(testState.socket, ioutil.Discard, buildID.String())
require.NoError(t, err, "failed with a client error")
require.Nil(t, resp)
// Test canceling the finished compose
cancelStatus, resp, err := CancelComposeV0(testState.socket, buildID.String())
require.NoError(t, err, "failed with a client error")
assert.Equal(t, weldr.CancelComposeStatusV0{}, cancelStatus)
require.NotNil(t, resp)
require.False(t, resp.Status, "Cancel did not fail")
require.Equal(t, 1, len(resp.Errors), "%#v", resp)
require.Equal(t, "BuildInWrongState", resp.Errors[0].ID)
require.Contains(t, resp.Errors[0].Msg, buildID.String())
}
func TestComposeSupportedMountPointV0(t *testing.T) {