debian-forge-composer/internal/weldr/compose_test.go
Gianluca Zuccarelli 88b5529cc4 osbuild-worker: test error backwards compatability
Since the workers will use structured error messages
going forward, it is necessary to maintain backwards
compatability for there errors in composer. Tests have
been added to the various apis to ensure that each api
checks for both kinds of errors, old and new.
2022-01-27 16:45:14 +01:00

109 lines
3.5 KiB
Go

package weldr
import (
"context"
"encoding/json"
"io/ioutil"
"os"
"testing"
"github.com/osbuild/osbuild-composer/internal/distro"
"github.com/osbuild/osbuild-composer/internal/distro/test_distro"
rpmmd_mock "github.com/osbuild/osbuild-composer/internal/mocks/rpmmd"
"github.com/osbuild/osbuild-composer/internal/worker"
"github.com/osbuild/osbuild-composer/internal/worker/clienterrors"
"github.com/stretchr/testify/require"
)
func TestComposeStatusFromLegacyError(t *testing.T) {
if len(os.Getenv("OSBUILD_COMPOSER_TEST_EXTERNAL")) > 0 {
t.Skip("This test is for internal testing only")
}
tempdir, err := ioutil.TempDir("", "weldr-tests-")
require.NoError(t, err)
defer os.RemoveAll(tempdir)
api, _ := createWeldrAPI(tempdir, rpmmd_mock.BaseFixture)
distroStruct := test_distro.New()
arch, err := distroStruct.GetArch(test_distro.TestArchName)
if err != nil {
t.Fatalf("error getting arch from distro: %v", err)
}
imageType, err := arch.GetImageType(test_distro.TestImageTypeName)
if err != nil {
t.Fatalf("error getting image type from arch: %v", err)
}
manifest, err := imageType.Manifest(nil, distro.ImageOptions{Size: imageType.Size(0)}, nil, nil, 0)
if err != nil {
t.Fatalf("error creating osbuild manifest: %v", err)
}
jobId, err := api.workers.EnqueueOSBuild(arch.Name(), &worker.OSBuildJob{Manifest: manifest})
require.NoError(t, err)
j, token, _, _, _, err := api.workers.RequestJob(context.Background(), arch.Name(), []string{"osbuild"})
require.NoError(t, err)
require.Equal(t, jobId, j)
jobResult := worker.OSBuildJobResult{TargetErrors: []string{"Upload error"}}
rawResult, err := json.Marshal(jobResult)
require.NoError(t, err)
err = api.workers.FinishJob(token, rawResult)
require.NoError(t, err)
jobStatus, _, err := api.workers.JobStatus(jobId, &jobResult)
require.NoError(t, err)
state := composeStateFromJobStatus(jobStatus, &jobResult)
require.Equal(t, "FAILED", state.ToString())
}
func TestComposeStatusFromJobError(t *testing.T) {
if len(os.Getenv("OSBUILD_COMPOSER_TEST_EXTERNAL")) > 0 {
t.Skip("This test is for internal testing only")
}
tempdir, err := ioutil.TempDir("", "weldr-tests-")
require.NoError(t, err)
defer os.RemoveAll(tempdir)
api, _ := createWeldrAPI(tempdir, rpmmd_mock.BaseFixture)
distroStruct := test_distro.New()
arch, err := distroStruct.GetArch(test_distro.TestArchName)
if err != nil {
t.Fatalf("error getting arch from distro: %v", err)
}
imageType, err := arch.GetImageType(test_distro.TestImageTypeName)
if err != nil {
t.Fatalf("error getting image type from arch: %v", err)
}
manifest, err := imageType.Manifest(nil, distro.ImageOptions{Size: imageType.Size(0)}, nil, nil, 0)
if err != nil {
t.Fatalf("error creating osbuild manifest: %v", err)
}
jobId, err := api.workers.EnqueueOSBuild(arch.Name(), &worker.OSBuildJob{Manifest: manifest})
require.NoError(t, err)
j, token, _, _, _, err := api.workers.RequestJob(context.Background(), arch.Name(), []string{"osbuild"})
require.NoError(t, err)
require.Equal(t, jobId, j)
jobResult := worker.OSBuildJobResult{}
jobResult.JobError = clienterrors.WorkerClientError(clienterrors.ErrorUploadingImage, "Upload error")
rawResult, err := json.Marshal(jobResult)
require.NoError(t, err)
err = api.workers.FinishJob(token, rawResult)
require.NoError(t, err)
jobStatus, _, err := api.workers.JobStatus(jobId, &jobResult)
require.NoError(t, err)
state := composeStateFromJobStatus(jobStatus, &jobResult)
require.Equal(t, "FAILED", state.ToString())
}