cloudapi: Correctly test dependency errors
Dependency errors are not set by the workers, they're not set directly in the job result. They are added by the worker server in case the job error indicates it's a dependency error.
This commit is contained in:
parent
111feda1f5
commit
7b73cf395f
3 changed files with 37 additions and 90 deletions
|
|
@ -25,7 +25,7 @@ type jobResult struct {
|
|||
}
|
||||
|
||||
func TestKojiCompose(t *testing.T) {
|
||||
kojiServer, workerServer, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false)
|
||||
kojiServer, workerServer, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false, false)
|
||||
handler := kojiServer.Handler("/api/image-builder-composer/v2")
|
||||
workerHandler := workerServer.Handler()
|
||||
defer cancel()
|
||||
|
|
@ -215,6 +215,7 @@ func TestKojiCompose(t *testing.T) {
|
|||
"image_status": {
|
||||
"status": "failure",
|
||||
"error": {
|
||||
"details": null,
|
||||
"id": 10,
|
||||
"reason": "Koji build error"
|
||||
}
|
||||
|
|
@ -223,6 +224,7 @@ func TestKojiCompose(t *testing.T) {
|
|||
{
|
||||
"status": "failure",
|
||||
"error": {
|
||||
"details": null,
|
||||
"id": 10,
|
||||
"reason": "Koji build error"
|
||||
}
|
||||
|
|
@ -321,76 +323,8 @@ func TestKojiCompose(t *testing.T) {
|
|||
"status": "failure"
|
||||
}`,
|
||||
},
|
||||
// #7
|
||||
{
|
||||
initResult: worker.KojiInitJobResult{
|
||||
BuildID: 42,
|
||||
Token: `"foobar"`,
|
||||
},
|
||||
buildResult: worker.OSBuildJobResult{
|
||||
Arch: test_distro.TestArchName,
|
||||
HostOS: test_distro.TestDistroName,
|
||||
TargetResults: []*target.TargetResult{target.NewKojiTargetResult(&target.KojiTargetResultOptions{
|
||||
ImageMD5: "browns",
|
||||
ImageSize: 42,
|
||||
})},
|
||||
OSBuildOutput: &osbuild.Result{
|
||||
Success: true,
|
||||
},
|
||||
JobResult: worker.JobResult{
|
||||
JobError: clienterrors.WorkerClientError(
|
||||
clienterrors.ErrorManifestDependency,
|
||||
"Manifest dependency failed",
|
||||
clienterrors.WorkerClientError(
|
||||
clienterrors.ErrorDNFOtherError,
|
||||
"DNF Error",
|
||||
nil,
|
||||
),
|
||||
),
|
||||
},
|
||||
},
|
||||
composeReplyCode: http.StatusCreated,
|
||||
composeReply: `{"href":"/api/image-builder-composer/v2/compose", "kind":"ComposeId"}`,
|
||||
composeStatus: `{
|
||||
"kind": "ComposeStatus",
|
||||
"image_status": {
|
||||
"error": {
|
||||
"details": [
|
||||
{
|
||||
"id": 22,
|
||||
"reason": "DNF Error"
|
||||
}
|
||||
],
|
||||
"id": 9,
|
||||
"reason": "Manifest dependency failed"
|
||||
},
|
||||
"status": "failure"
|
||||
},
|
||||
"image_statuses": [
|
||||
{
|
||||
"error": {
|
||||
"details": [
|
||||
{
|
||||
"id": 22,
|
||||
"reason": "DNF Error"
|
||||
}
|
||||
],
|
||||
"id": 9,
|
||||
"reason": "Manifest dependency failed"
|
||||
},
|
||||
"status": "failure"
|
||||
},
|
||||
{
|
||||
"status": "success"
|
||||
}
|
||||
],
|
||||
"koji_status": {
|
||||
"build_id": 42
|
||||
},
|
||||
"status": "failure"
|
||||
}`,
|
||||
},
|
||||
}
|
||||
|
||||
for idx, c := range cases {
|
||||
name, version, release := "foo", "1", "2"
|
||||
t.Run(fmt.Sprintf("Test case #%d", idx), func(t *testing.T) {
|
||||
|
|
@ -536,7 +470,7 @@ func TestKojiCompose(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestKojiJobTypeValidation(t *testing.T) {
|
||||
server, workers, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false)
|
||||
server, workers, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false, false)
|
||||
handler := server.Handler("/api/image-builder-composer/v2")
|
||||
defer cancel()
|
||||
|
||||
|
|
|
|||
|
|
@ -197,7 +197,7 @@ func runNextJob(t *testing.T, jobs []uuid.UUID, workerHandler http.Handler, orgI
|
|||
func TestMultitenancy(t *testing.T) {
|
||||
// Passing an empty list as depsolving channels, we want to do depsolves
|
||||
// ourselvess
|
||||
apiServer, workerServer, q, cancel := newV2Server(t, t.TempDir(), []string{}, true)
|
||||
apiServer, workerServer, q, cancel := newV2Server(t, t.TempDir(), []string{}, true, false)
|
||||
handler := apiServer.Handler("/api/image-builder-composer/v2")
|
||||
defer cancel()
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import (
|
|||
"github.com/osbuild/osbuild-composer/internal/worker/clienterrors"
|
||||
)
|
||||
|
||||
func newV2Server(t *testing.T, dir string, depsolveChannels []string, enableJWT bool) (*v2.Server, *worker.Server, jobqueue.JobQueue, context.CancelFunc) {
|
||||
func newV2Server(t *testing.T, dir string, depsolveChannels []string, enableJWT bool, failDepsolve bool) (*v2.Server, *worker.Server, jobqueue.JobQueue, context.CancelFunc) {
|
||||
q, err := fsjobqueue.New(dir)
|
||||
require.NoError(t, err)
|
||||
workerServer := worker.NewServer(nil, q, worker.Config{BasePath: "/api/worker/v1", JWTEnabled: enableJWT, TenantProviderFields: []string{"rh-org-id", "account_id"}})
|
||||
|
|
@ -57,7 +57,17 @@ func newV2Server(t *testing.T, dir string, depsolveChannels []string, enableJWT
|
|||
if err != nil {
|
||||
continue
|
||||
}
|
||||
rawMsg, err := json.Marshal(&worker.DepsolveJobResult{PackageSpecs: map[string][]rpmmd.PackageSpec{"build": []rpmmd.PackageSpec{rpmmd.PackageSpec{Name: "pkg1"}}}, Error: "", ErrorType: worker.ErrorType("")})
|
||||
dJR := &worker.DepsolveJobResult{
|
||||
PackageSpecs: map[string][]rpmmd.PackageSpec{"build": []rpmmd.PackageSpec{rpmmd.PackageSpec{Name: "pkg1"}}},
|
||||
Error: "",
|
||||
ErrorType: worker.ErrorType(""),
|
||||
}
|
||||
|
||||
if failDepsolve {
|
||||
dJR.JobResult.JobError = clienterrors.WorkerClientError(clienterrors.ErrorDNFOtherError, "DNF Error", nil)
|
||||
}
|
||||
|
||||
rawMsg, err := json.Marshal(dJR)
|
||||
require.NoError(t, err)
|
||||
err = workerServer.FinishJob(token, rawMsg)
|
||||
if err != nil {
|
||||
|
|
@ -76,7 +86,7 @@ func newV2Server(t *testing.T, dir string, depsolveChannels []string, enableJWT
|
|||
}
|
||||
|
||||
func TestUnknownRoute(t *testing.T) {
|
||||
srv, _, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false)
|
||||
srv, _, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false, false)
|
||||
defer cancel()
|
||||
|
||||
test.TestRoute(t, srv.Handler("/api/image-builder-composer/v2"), false, "GET", "/api/image-builder-composer/v2/badroute", ``, http.StatusNotFound, `
|
||||
|
|
@ -90,7 +100,7 @@ func TestUnknownRoute(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetError(t *testing.T) {
|
||||
srv, _, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false)
|
||||
srv, _, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false, false)
|
||||
defer cancel()
|
||||
|
||||
test.TestRoute(t, srv.Handler("/api/image-builder-composer/v2"), false, "GET", "/api/image-builder-composer/v2/errors/4", ``, http.StatusOK, `
|
||||
|
|
@ -113,7 +123,7 @@ func TestGetError(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetErrorList(t *testing.T) {
|
||||
srv, _, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false)
|
||||
srv, _, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false, false)
|
||||
defer cancel()
|
||||
|
||||
test.TestRoute(t, srv.Handler("/api/image-builder-composer/v2"), false, "GET", "/api/image-builder-composer/v2/errors?page=3&size=1", ``, http.StatusOK, `
|
||||
|
|
@ -132,7 +142,7 @@ func TestGetErrorList(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestCompose(t *testing.T) {
|
||||
srv, _, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false)
|
||||
srv, _, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false, false)
|
||||
defer cancel()
|
||||
|
||||
// create two ostree repos, one to serve the default test_distro ref (for fallback tests) and one to serve a custom ref
|
||||
|
|
@ -550,7 +560,7 @@ func TestCompose(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestComposeStatusSuccess(t *testing.T) {
|
||||
srv, wrksrv, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false)
|
||||
srv, wrksrv, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false, false)
|
||||
defer cancel()
|
||||
|
||||
test.TestRoute(t, srv.Handler("/api/image-builder-composer/v2"), false, "POST", "/api/image-builder-composer/v2/compose", fmt.Sprintf(`
|
||||
|
|
@ -664,7 +674,7 @@ func TestComposeStatusSuccess(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestComposeStatusFailure(t *testing.T) {
|
||||
srv, wrksrv, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false)
|
||||
srv, wrksrv, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false, false)
|
||||
defer cancel()
|
||||
|
||||
test.TestRoute(t, srv.Handler("/api/image-builder-composer/v2"), false, "POST", "/api/image-builder-composer/v2/compose", fmt.Sprintf(`
|
||||
|
|
@ -720,7 +730,7 @@ func TestComposeStatusFailure(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestComposeStatusInvalidUUID(t *testing.T) {
|
||||
srv, _, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false)
|
||||
srv, _, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false, false)
|
||||
defer cancel()
|
||||
|
||||
test.TestRoute(t, srv.Handler("/api/image-builder-composer/v2"), false, "GET", "/api/image-builder-composer/v2/composes/abcdef", ``, http.StatusBadRequest, `
|
||||
|
|
@ -736,7 +746,7 @@ func TestComposeStatusInvalidUUID(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestComposeJobError(t *testing.T) {
|
||||
srv, wrksrv, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false)
|
||||
srv, wrksrv, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false, false)
|
||||
defer cancel()
|
||||
|
||||
test.TestRoute(t, srv.Handler("/api/image-builder-composer/v2"), false, "POST", "/api/image-builder-composer/v2/compose", fmt.Sprintf(`
|
||||
|
|
@ -798,7 +808,7 @@ func TestComposeJobError(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestComposeDependencyError(t *testing.T) {
|
||||
srv, wrksrv, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false)
|
||||
srv, wrksrv, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false, true)
|
||||
defer cancel()
|
||||
|
||||
test.TestRoute(t, srv.Handler("/api/image-builder-composer/v2"), false, "POST", "/api/image-builder-composer/v2/compose", fmt.Sprintf(`
|
||||
|
|
@ -837,7 +847,6 @@ func TestComposeDependencyError(t *testing.T) {
|
|||
jobErr := worker.JobResult{
|
||||
JobError: clienterrors.WorkerClientError(clienterrors.ErrorManifestDependency, "Manifest dependency failed", nil),
|
||||
}
|
||||
jobErr.JobError.Details = clienterrors.WorkerClientError(clienterrors.ErrorDNFOtherError, "DNF Error", nil)
|
||||
jobResult, err := json.Marshal(worker.OSBuildJobResult{JobResult: jobErr})
|
||||
require.NoError(t, err)
|
||||
|
||||
|
|
@ -850,10 +859,14 @@ func TestComposeDependencyError(t *testing.T) {
|
|||
"id": "%v",
|
||||
"image_status": {
|
||||
"error": {
|
||||
"details": {
|
||||
"id": 22,
|
||||
"reason": "DNF Error"
|
||||
},
|
||||
"details": [{
|
||||
"id": 5,
|
||||
"reason": "Error in depsolve job dependency",
|
||||
"details": [{
|
||||
"id": 22,
|
||||
"reason": "DNF Error"
|
||||
}]
|
||||
}],
|
||||
"id": 9,
|
||||
"reason": "Manifest dependency failed"
|
||||
},
|
||||
|
|
@ -864,7 +877,7 @@ func TestComposeDependencyError(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestComposeCustomizations(t *testing.T) {
|
||||
srv, _, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false)
|
||||
srv, _, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false, false)
|
||||
defer cancel()
|
||||
|
||||
test.TestRoute(t, srv.Handler("/api/image-builder-composer/v2"), false, "POST", "/api/image-builder-composer/v2/compose", fmt.Sprintf(`
|
||||
|
|
@ -918,7 +931,7 @@ func TestComposeCustomizations(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestImageTypes(t *testing.T) {
|
||||
srv, _, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false)
|
||||
srv, _, _, cancel := newV2Server(t, t.TempDir(), []string{""}, false, false)
|
||||
defer cancel()
|
||||
|
||||
test.TestRoute(t, srv.Handler("/api/image-builder-composer/v2"), false, "POST", "/api/image-builder-composer/v2/compose", fmt.Sprintf(`
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue