diff --git a/internal/weldr/api.go b/internal/weldr/api.go index 8987de517..4517adb74 100644 --- a/internal/weldr/api.go +++ b/internal/weldr/api.go @@ -1967,7 +1967,7 @@ func (api *API) composeInfoHandler(writer http.ResponseWriter, request *http.Req reply.ImageSize = compose.ImageBuild.Size if isRequestVersionAtLeast(params, 1) { - reply.Uploads = targetsToUploadResponses(compose.ImageBuild.Targets) + reply.Uploads = targetsToUploadResponses(compose.ImageBuild.Targets, composeStatus.State) } err = json.NewEncoder(writer).Encode(reply) diff --git a/internal/weldr/api_test.go b/internal/weldr/api_test.go index a31cc5725..835106455 100644 --- a/internal/weldr/api_test.go +++ b/internal/weldr/api_test.go @@ -751,7 +751,7 @@ func TestComposeFinished(t *testing.T) { ExpectedJSON string }{ {rpmmd_mock.BaseFixture, "GET", "/api/v0/compose/finished", ``, http.StatusOK, `{"finished":[{"id":"30000000-0000-0000-0000-000000000002","blueprint":"test","version":"0.0.0","compose_type":"qcow2","image_size":0,"queue_status":"FINISHED","job_created":1574857140,"job_started":1574857140,"job_finished":1574857140}]}`}, - {rpmmd_mock.BaseFixture, "GET", "/api/v1/compose/finished", ``, http.StatusOK, `{"finished":[{"id":"30000000-0000-0000-0000-000000000002","blueprint":"test","version":"0.0.0","compose_type":"qcow2","image_size":0,"queue_status":"FINISHED","job_created":1574857140,"job_started":1574857140,"job_finished":1574857140,"uploads":[{"uuid":"10000000-0000-0000-0000-000000000000","status":"WAITING","provider_name":"aws","image_name":"awsimage","creation_time":1574857140,"settings":{"region":"frankfurt","accessKeyID":"accesskey","secretAccessKey":"secretkey","bucket":"clay","key":"imagekey"}}]}]}`}, + {rpmmd_mock.BaseFixture, "GET", "/api/v1/compose/finished", ``, http.StatusOK, `{"finished":[{"id":"30000000-0000-0000-0000-000000000002","blueprint":"test","version":"0.0.0","compose_type":"qcow2","image_size":0,"queue_status":"FINISHED","job_created":1574857140,"job_started":1574857140,"job_finished":1574857140,"uploads":[{"uuid":"10000000-0000-0000-0000-000000000000","status":"FINISHED","provider_name":"aws","image_name":"awsimage","creation_time":1574857140,"settings":{"region":"frankfurt","accessKeyID":"accesskey","secretAccessKey":"secretkey","bucket":"clay","key":"imagekey"}}]}]}`}, {rpmmd_mock.NoComposesFixture, "GET", "/api/v0/compose/finished", ``, http.StatusOK, `{"finished":[]}`}, } @@ -775,7 +775,7 @@ func TestComposeFailed(t *testing.T) { ExpectedJSON string }{ {rpmmd_mock.BaseFixture, "GET", "/api/v0/compose/failed", ``, http.StatusOK, `{"failed":[{"id":"30000000-0000-0000-0000-000000000003","blueprint":"test","version":"0.0.0","compose_type":"qcow2","image_size":0,"queue_status":"FAILED","job_created":1574857140,"job_started":1574857140,"job_finished":1574857140}]}`}, - {rpmmd_mock.BaseFixture, "GET", "/api/v1/compose/failed", ``, http.StatusOK, `{"failed":[{"id":"30000000-0000-0000-0000-000000000003","blueprint":"test","version":"0.0.0","compose_type":"qcow2","image_size":0,"queue_status":"FAILED","job_created":1574857140,"job_started":1574857140,"job_finished":1574857140,"uploads":[{"uuid":"10000000-0000-0000-0000-000000000000","status":"WAITING","provider_name":"aws","image_name":"awsimage","creation_time":1574857140,"settings":{"region":"frankfurt","accessKeyID":"accesskey","secretAccessKey":"secretkey","bucket":"clay","key":"imagekey"}}]}]}`}, + {rpmmd_mock.BaseFixture, "GET", "/api/v1/compose/failed", ``, http.StatusOK, `{"failed":[{"id":"30000000-0000-0000-0000-000000000003","blueprint":"test","version":"0.0.0","compose_type":"qcow2","image_size":0,"queue_status":"FAILED","job_created":1574857140,"job_started":1574857140,"job_finished":1574857140,"uploads":[{"uuid":"10000000-0000-0000-0000-000000000000","status":"FAILED","provider_name":"aws","image_name":"awsimage","creation_time":1574857140,"settings":{"region":"frankfurt","accessKeyID":"accesskey","secretAccessKey":"secretkey","bucket":"clay","key":"imagekey"}}]}]}`}, {rpmmd_mock.NoComposesFixture, "GET", "/api/v0/compose/failed", ``, http.StatusOK, `{"failed":[]}`}, } diff --git a/internal/weldr/compose.go b/internal/weldr/compose.go index 58db74bfa..dfc90e714 100644 --- a/internal/weldr/compose.go +++ b/internal/weldr/compose.go @@ -31,7 +31,7 @@ func composeToComposeEntry(id uuid.UUID, compose store.Compose, status *composeS composeEntry.ComposeType = compose.ImageBuild.ImageType.Name() if includeUploads { - composeEntry.Uploads = targetsToUploadResponses(compose.ImageBuild.Targets) + composeEntry.Uploads = targetsToUploadResponses(compose.ImageBuild.Targets, status.State) } switch status.State { diff --git a/internal/weldr/upload.go b/internal/weldr/upload.go index fba7c3aee..0bcb7208e 100644 --- a/internal/weldr/upload.go +++ b/internal/weldr/upload.go @@ -83,16 +83,31 @@ func (u *uploadRequest) UnmarshalJSON(data []byte) error { return err } -func targetsToUploadResponses(targets []*target.Target) []uploadResponse { +// Converts a `Target` to a serializable `uploadResponse`. +// +// This ignore the status in `targets`, because that's never set correctly. +// Instead, it sets each target's status to the ImageBuildState equivalent of +// `state`. +func targetsToUploadResponses(targets []*target.Target, state common.ComposeState) []uploadResponse { var uploads []uploadResponse for _, t := range targets { upload := uploadResponse{ UUID: t.Uuid, - Status: t.Status, ImageName: t.ImageName, CreationTime: float64(t.Created.UnixNano()) / 1000000000, } + switch state { + case common.CWaiting: + upload.Status = common.IBWaiting + case common.CRunning: + upload.Status = common.IBRunning + case common.CFinished: + upload.Status = common.IBFinished + case common.CFailed: + upload.Status = common.IBFailed + } + switch options := t.Options.(type) { case *target.AWSTargetOptions: upload.ProviderName = "aws"