Blame internal/kojiapi/server_test.go

Packit Service 509fd4
package kojiapi_test
Packit Service 509fd4
Packit Service 509fd4
import (
Packit Service 509fd4
	"context"
Packit Service 509fd4
	"encoding/json"
Packit Service 509fd4
	"fmt"
Packit Service 509fd4
	"io/ioutil"
Packit Service 509fd4
	"log"
Packit Service 509fd4
	"net/http"
Packit Service 509fd4
	"net/http/httptest"
Packit Service 509fd4
	"os"
Packit Service 509fd4
	"sync"
Packit Service 509fd4
	"testing"
Packit Service 3a6627
	"time"
Packit Service 509fd4
Packit Service 3a6627
	"github.com/google/uuid"
Packit Service 509fd4
	"github.com/osbuild/osbuild-composer/internal/kojiapi"
Packit Service 509fd4
	"github.com/osbuild/osbuild-composer/internal/kojiapi/api"
Packit Service 509fd4
	distro_mock "github.com/osbuild/osbuild-composer/internal/mocks/distro"
Packit Service 509fd4
	rpmmd_mock "github.com/osbuild/osbuild-composer/internal/mocks/rpmmd"
Packit Service 15f37d
	osbuild "github.com/osbuild/osbuild-composer/internal/osbuild1"
Packit Service 509fd4
	"github.com/osbuild/osbuild-composer/internal/test"
Packit Service 509fd4
	"github.com/osbuild/osbuild-composer/internal/worker"
Packit Service 509fd4
	"github.com/stretchr/testify/require"
Packit Service 509fd4
)
Packit Service 509fd4
Packit Service 509fd4
func newTestKojiServer(t *testing.T, dir string) (*kojiapi.Server, *worker.Server) {
Packit Service 3a6627
	rpm_fixture := rpmmd_mock.BaseFixture(dir)
Packit Service 509fd4
	rpm := rpmmd_mock.NewRPMMDMock(rpm_fixture)
Packit Service 509fd4
	require.NotNil(t, rpm)
Packit Service 509fd4
Packit Service 509fd4
	distros, err := distro_mock.NewDefaultRegistry()
Packit Service 509fd4
	require.NoError(t, err)
Packit Service 509fd4
	require.NotNil(t, distros)
Packit Service 509fd4
Packit Service 3a6627
	kojiServer := kojiapi.NewServer(nil, rpm_fixture.Workers, rpm, distros)
Packit Service 509fd4
	require.NotNil(t, kojiServer)
Packit Service 509fd4
Packit Service 3a6627
	return kojiServer, rpm_fixture.Workers
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func TestStatus(t *testing.T) {
Packit Service 509fd4
	dir, err := ioutil.TempDir("", "osbuild-composer-test-kojiapi-")
Packit Service 509fd4
	if err != nil {
Packit Service 509fd4
		log.Fatal(err)
Packit Service 509fd4
	}
Packit Service 509fd4
	defer os.RemoveAll(dir)
Packit Service 509fd4
Packit Service 509fd4
	kojiServer, _ := newTestKojiServer(t, dir)
Packit Service 509fd4
	handler := kojiServer.Handler("/api/composer-koji/v1")
Packit Service 509fd4
	test.TestRoute(t, handler, false, "GET", "/api/composer-koji/v1/status", ``, http.StatusOK, `{"status":"OK"}`, "message")
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
type jobResult struct {
Packit Service 509fd4
	Result interface{} `json:"result"`
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func TestCompose(t *testing.T) {
Packit Service 509fd4
	dir, err := ioutil.TempDir("", "osbuild-composer-test-kojiapi-")
Packit Service 509fd4
	if err != nil {
Packit Service 509fd4
		log.Fatal(err)
Packit Service 509fd4
	}
Packit Service 509fd4
	defer os.RemoveAll(dir)
Packit Service 509fd4
Packit Service 509fd4
	kojiServer, workerServer := newTestKojiServer(t, dir)
Packit Service 509fd4
	handler := kojiServer.Handler("/api/composer-koji/v1")
Packit Service 509fd4
	workerHandler := workerServer.Handler()
Packit Service 509fd4
Packit Service 509fd4
	type kojiCase struct {
Packit Service 509fd4
		initResult       worker.KojiInitJobResult
Packit Service 509fd4
		buildResult      worker.OSBuildKojiJobResult
Packit Service 509fd4
		finalizeResult   worker.KojiFinalizeJobResult
Packit Service 509fd4
		composeReplyCode int
Packit Service 509fd4
		composeReply     string
Packit Service 509fd4
		composeStatus    string
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	var cases = []kojiCase{
Packit Service 509fd4
		{
Packit Service 509fd4
			initResult: worker.KojiInitJobResult{
Packit Service 509fd4
				BuildID: 42,
Packit Service 509fd4
				Token:   `"foobar"`,
Packit Service 509fd4
			},
Packit Service 509fd4
			buildResult: worker.OSBuildKojiJobResult{
Packit Service 509fd4
				Arch:      "x86_64",
Packit Service 509fd4
				HostOS:    "fedora-30",
Packit Service 509fd4
				ImageHash: "browns",
Packit Service 509fd4
				ImageSize: 42,
Packit Service 509fd4
				OSBuildOutput: &osbuild.Result{
Packit Service 509fd4
					Success: true,
Packit Service 509fd4
				},
Packit Service 509fd4
			},
Packit Service 509fd4
			composeReplyCode: http.StatusCreated,
Packit Service 509fd4
			composeReply:     `{"koji_build_id":42}`,
Packit Service 509fd4
			composeStatus: `{
Packit Service 509fd4
				"image_statuses": [
Packit Service 509fd4
					{
Packit Service 509fd4
						"status": "success"
Packit Service 509fd4
					},
Packit Service 509fd4
					{
Packit Service 509fd4
						"status": "success"
Packit Service 509fd4
					}
Packit Service 509fd4
				],
Packit Service 509fd4
				"koji_build_id": 42,
Packit Service 509fd4
				"koji_task_id": 0,
Packit Service 509fd4
				"status": "success"
Packit Service 509fd4
			}`,
Packit Service 509fd4
		},
Packit Service 509fd4
		{
Packit Service 509fd4
			initResult: worker.KojiInitJobResult{
Packit Service 509fd4
				KojiError: "failure",
Packit Service 509fd4
			},
Packit Service 509fd4
			buildResult: worker.OSBuildKojiJobResult{
Packit Service 509fd4
				Arch:      "x86_64",
Packit Service 509fd4
				HostOS:    "fedora-30",
Packit Service 509fd4
				ImageHash: "browns",
Packit Service 509fd4
				ImageSize: 42,
Packit Service 509fd4
				OSBuildOutput: &osbuild.Result{
Packit Service 509fd4
					Success: true,
Packit Service 509fd4
				},
Packit Service 509fd4
			},
Packit Service 509fd4
			composeReplyCode: http.StatusBadRequest,
Packit Service 509fd4
			composeReply:     `{"message":"Could not initialize build with koji: failure"}`,
Packit Service 509fd4
			composeStatus: `{
Packit Service 509fd4
				"image_statuses": [
Packit Service 509fd4
					{
Packit Service 509fd4
						"status": "failure"
Packit Service 509fd4
					},
Packit Service 509fd4
					{
Packit Service 509fd4
						"status": "failure"
Packit Service 509fd4
					}
Packit Service 509fd4
				],
Packit Service 509fd4
				"koji_task_id": 0,
Packit Service 509fd4
				"status": "failure"
Packit Service 509fd4
			}`,
Packit Service 509fd4
		},
Packit Service 509fd4
		{
Packit Service 509fd4
			initResult: worker.KojiInitJobResult{
Packit Service 509fd4
				BuildID: 42,
Packit Service 509fd4
				Token:   `"foobar"`,
Packit Service 509fd4
			},
Packit Service 509fd4
			buildResult: worker.OSBuildKojiJobResult{
Packit Service 509fd4
				Arch:      "x86_64",
Packit Service 509fd4
				HostOS:    "fedora-30",
Packit Service 509fd4
				ImageHash: "browns",
Packit Service 509fd4
				ImageSize: 42,
Packit Service 509fd4
				OSBuildOutput: &osbuild.Result{
Packit Service 509fd4
					Success: false,
Packit Service 509fd4
				},
Packit Service 509fd4
			},
Packit Service 509fd4
			composeReplyCode: http.StatusCreated,
Packit Service 509fd4
			composeReply:     `{"koji_build_id":42}`,
Packit Service 509fd4
			composeStatus: `{
Packit Service 509fd4
				"image_statuses": [
Packit Service 509fd4
					{
Packit Service 509fd4
						"status": "failure"
Packit Service 509fd4
					},
Packit Service 509fd4
					{
Packit Service 509fd4
						"status": "success"
Packit Service 509fd4
					}
Packit Service 509fd4
				],
Packit Service 509fd4
				"koji_build_id": 42,
Packit Service 509fd4
				"koji_task_id": 0,
Packit Service 509fd4
				"status": "failure"
Packit Service 509fd4
			}`,
Packit Service 509fd4
		},
Packit Service 509fd4
		{
Packit Service 509fd4
			initResult: worker.KojiInitJobResult{
Packit Service 509fd4
				BuildID: 42,
Packit Service 509fd4
				Token:   `"foobar"`,
Packit Service 509fd4
			},
Packit Service 509fd4
			buildResult: worker.OSBuildKojiJobResult{
Packit Service 509fd4
				Arch:      "x86_64",
Packit Service 509fd4
				HostOS:    "fedora-30",
Packit Service 509fd4
				ImageHash: "browns",
Packit Service 509fd4
				ImageSize: 42,
Packit Service 509fd4
				OSBuildOutput: &osbuild.Result{
Packit Service 509fd4
					Success: true,
Packit Service 509fd4
				},
Packit Service 509fd4
				KojiError: "failure",
Packit Service 509fd4
			},
Packit Service 509fd4
			composeReplyCode: http.StatusCreated,
Packit Service 509fd4
			composeReply:     `{"koji_build_id":42}`,
Packit Service 509fd4
			composeStatus: `{
Packit Service 509fd4
				"image_statuses": [
Packit Service 509fd4
					{
Packit Service 509fd4
						"status": "failure"
Packit Service 509fd4
					},
Packit Service 509fd4
					{
Packit Service 509fd4
						"status": "success"
Packit Service 509fd4
					}
Packit Service 509fd4
				],
Packit Service 509fd4
				"koji_build_id": 42,
Packit Service 509fd4
				"koji_task_id": 0,
Packit Service 509fd4
				"status": "failure"
Packit Service 509fd4
			}`,
Packit Service 509fd4
		},
Packit Service 509fd4
		{
Packit Service 509fd4
			initResult: worker.KojiInitJobResult{
Packit Service 509fd4
				BuildID: 42,
Packit Service 509fd4
				Token:   `"foobar"`,
Packit Service 509fd4
			},
Packit Service 509fd4
			buildResult: worker.OSBuildKojiJobResult{
Packit Service 509fd4
				Arch:      "x86_64",
Packit Service 509fd4
				HostOS:    "fedora-30",
Packit Service 509fd4
				ImageHash: "browns",
Packit Service 509fd4
				ImageSize: 42,
Packit Service 509fd4
				OSBuildOutput: &osbuild.Result{
Packit Service 509fd4
					Success: true,
Packit Service 509fd4
				},
Packit Service 509fd4
			},
Packit Service 509fd4
			finalizeResult: worker.KojiFinalizeJobResult{
Packit Service 509fd4
				KojiError: "failure",
Packit Service 509fd4
			},
Packit Service 509fd4
			composeReplyCode: http.StatusCreated,
Packit Service 509fd4
			composeReply:     `{"koji_build_id":42}`,
Packit Service 509fd4
			composeStatus: `{
Packit Service 509fd4
				"image_statuses": [
Packit Service 509fd4
					{
Packit Service 509fd4
						"status": "success"
Packit Service 509fd4
					},
Packit Service 509fd4
					{
Packit Service 509fd4
						"status": "success"
Packit Service 509fd4
					}
Packit Service 509fd4
				],
Packit Service 509fd4
				"koji_build_id": 42,
Packit Service 509fd4
				"koji_task_id": 0,
Packit Service 509fd4
				"status": "failure"
Packit Service 509fd4
			}`,
Packit Service 509fd4
		},
Packit Service 509fd4
	}
Packit Service 509fd4
	for _, c := range cases {
Packit Service 509fd4
		var wg sync.WaitGroup
Packit Service 509fd4
		wg.Add(1)
Packit Service 509fd4
Packit Service 509fd4
		go func(t *testing.T, result worker.KojiInitJobResult) {
Packit Service 509fd4
			token, _, jobType, rawJob, _, err := workerServer.RequestJob(context.Background(), "x86_64", []string{"koji-init"})
Packit Service 509fd4
			require.NoError(t, err)
Packit Service 509fd4
			require.Equal(t, "koji-init", jobType)
Packit Service 509fd4
Packit Service 509fd4
			var initJob worker.KojiInitJob
Packit Service 509fd4
			err = json.Unmarshal(rawJob, &initJob)
Packit Service 509fd4
			require.NoError(t, err)
Packit Service 509fd4
			require.Equal(t, "koji.example.com", initJob.Server)
Packit Service 509fd4
			require.Equal(t, "foo", initJob.Name)
Packit Service 509fd4
			require.Equal(t, "1", initJob.Version)
Packit Service 509fd4
			require.Equal(t, "2", initJob.Release)
Packit Service 509fd4
Packit Service 509fd4
			initJobResult, err := json.Marshal(&jobResult{Result: result})
Packit Service 509fd4
			require.NoError(t, err)
Packit Service 509fd4
			test.TestRoute(t, workerHandler, false, "PATCH", fmt.Sprintf("/api/worker/v1/jobs/%v", token), string(initJobResult), http.StatusOK, `{}`)
Packit Service 509fd4
Packit Service 509fd4
			wg.Done()
Packit Service 509fd4
		}(t, c.initResult)
Packit Service 509fd4
Packit Service 509fd4
		test.TestRoute(t, handler, false, "POST", "/api/composer-koji/v1/compose", `
Packit Service 509fd4
		{
Packit Service 509fd4
			"name":"foo",
Packit Service 509fd4
			"version":"1",
Packit Service 509fd4
			"release":"2",
Packit Service 509fd4
			"distribution":"fedora-30",
Packit Service 509fd4
			"image_requests": [
Packit Service 509fd4
				{
Packit Service 509fd4
					"architecture": "x86_64",
Packit Service 509fd4
					"image_type": "qcow2",
Packit Service 509fd4
					"repositories": [
Packit Service 509fd4
						{
Packit Service 509fd4
							"baseurl": "https://repo.example.com/"
Packit Service 509fd4
						}
Packit Service 509fd4
					]
Packit Service 509fd4
				},
Packit Service 509fd4
				{
Packit Service 509fd4
					"architecture": "x86_64",
Packit Service 509fd4
					"image_type": "qcow2",
Packit Service 509fd4
					"repositories": [
Packit Service 509fd4
						{
Packit Service 509fd4
							"baseurl": "https://repo.example.com/"
Packit Service 509fd4
						}
Packit Service 509fd4
					]
Packit Service 509fd4
				}
Packit Service 509fd4
			],
Packit Service 509fd4
			"koji": {
Packit Service 509fd4
				"server": "koji.example.com"
Packit Service 509fd4
			}
Packit Service 509fd4
		}`, c.composeReplyCode, c.composeReply, "id")
Packit Service 509fd4
		wg.Wait()
Packit Service 509fd4
Packit Service 509fd4
		token, _, jobType, rawJob, _, err := workerServer.RequestJob(context.Background(), "x86_64", []string{"osbuild-koji"})
Packit Service 509fd4
		require.NoError(t, err)
Packit Service 509fd4
		require.Equal(t, "osbuild-koji", jobType)
Packit Service 509fd4
Packit Service 509fd4
		var osbuildJob worker.OSBuildKojiJob
Packit Service 509fd4
		err = json.Unmarshal(rawJob, &osbuildJob)
Packit Service 509fd4
		require.NoError(t, err)
Packit Service 509fd4
		require.Equal(t, "koji.example.com", osbuildJob.KojiServer)
Packit Service 509fd4
		require.Equal(t, "test.img", osbuildJob.ImageName)
Packit Service 509fd4
		require.NotEmpty(t, osbuildJob.KojiDirectory)
Packit Service 509fd4
Packit Service 509fd4
		buildJobResult, err := json.Marshal(&jobResult{Result: c.buildResult})
Packit Service 509fd4
		require.NoError(t, err)
Packit Service 509fd4
		test.TestRoute(t, workerHandler, false, "PATCH", fmt.Sprintf("/api/worker/v1/jobs/%v", token), string(buildJobResult), http.StatusOK, `{}`)
Packit Service 509fd4
Packit Service 509fd4
		token, _, jobType, rawJob, _, err = workerServer.RequestJob(context.Background(), "x86_64", []string{"osbuild-koji"})
Packit Service 509fd4
		require.NoError(t, err)
Packit Service 509fd4
		require.Equal(t, "osbuild-koji", jobType)
Packit Service 509fd4
Packit Service 509fd4
		err = json.Unmarshal(rawJob, &osbuildJob)
Packit Service 509fd4
		require.NoError(t, err)
Packit Service 509fd4
		require.Equal(t, "koji.example.com", osbuildJob.KojiServer)
Packit Service 509fd4
		require.Equal(t, "test.img", osbuildJob.ImageName)
Packit Service 509fd4
		require.NotEmpty(t, osbuildJob.KojiDirectory)
Packit Service 509fd4
Packit Service 509fd4
		test.TestRoute(t, workerHandler, false, "PATCH", fmt.Sprintf("/api/worker/v1/jobs/%v", token), `{
Packit Service 509fd4
			"result": {
Packit Service 509fd4
				"arch": "x86_64",
Packit Service 509fd4
				"host_os": "fedora-30",
Packit Service 509fd4
				"image_hash": "browns",
Packit Service 509fd4
				"image_size": 42,
Packit Service 509fd4
				"osbuild_output": {
Packit Service 509fd4
					"success": true
Packit Service 509fd4
				}
Packit Service 509fd4
			}
Packit Service 509fd4
		}`, http.StatusOK, `{}`)
Packit Service 509fd4
Packit Service 509fd4
		token, finalizeID, jobType, rawJob, _, err := workerServer.RequestJob(context.Background(), "x86_64", []string{"koji-finalize"})
Packit Service 509fd4
		require.NoError(t, err)
Packit Service 509fd4
		require.Equal(t, "koji-finalize", jobType)
Packit Service 509fd4
Packit Service 509fd4
		var kojiFinalizeJob worker.KojiFinalizeJob
Packit Service 509fd4
		err = json.Unmarshal(rawJob, &kojiFinalizeJob)
Packit Service 509fd4
		require.NoError(t, err)
Packit Service 509fd4
		require.Equal(t, "koji.example.com", kojiFinalizeJob.Server)
Packit Service 509fd4
		require.Equal(t, "1", kojiFinalizeJob.Version)
Packit Service 509fd4
		require.Equal(t, "2", kojiFinalizeJob.Release)
Packit Service 509fd4
		require.ElementsMatch(t, []string{"foo-1-2.x86_64.img", "foo-1-2.x86_64.img"}, kojiFinalizeJob.KojiFilenames)
Packit Service 509fd4
		require.NotEmpty(t, kojiFinalizeJob.KojiDirectory)
Packit Service 509fd4
Packit Service 509fd4
		finalizeResult, err := json.Marshal(&jobResult{Result: c.finalizeResult})
Packit Service 509fd4
		require.NoError(t, err)
Packit Service 509fd4
		test.TestRoute(t, workerHandler, false, "PATCH", fmt.Sprintf("/api/worker/v1/jobs/%v", token), string(finalizeResult), http.StatusOK, `{}`)
Packit Service 509fd4
Packit Service 509fd4
		test.TestRoute(t, handler, false, "GET", fmt.Sprintf("/api/composer-koji/v1/compose/%v", finalizeID), ``, http.StatusOK, c.composeStatus)
Packit Service 3a6627
Packit Service 3a6627
		test.TestRoute(t, handler, false, "GET", fmt.Sprintf("/api/composer-koji/v1/compose/%v/manifests", finalizeID), ``, http.StatusOK, `[{"pipeline": {}, "sources": {}}, {"pipeline": {}, "sources": {}}]`)
Packit Service 509fd4
	}
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func TestRequest(t *testing.T) {
Packit Service 509fd4
	dir, err := ioutil.TempDir("", "osbuild-composer-test-kojiapi-")
Packit Service 509fd4
	if err != nil {
Packit Service 509fd4
		log.Fatal(err)
Packit Service 509fd4
	}
Packit Service 509fd4
	defer os.RemoveAll(dir)
Packit Service 509fd4
Packit Service 509fd4
	server, _ := newTestKojiServer(t, dir)
Packit Service 509fd4
	handler := server.Handler("/api/composer-koji/v1")
Packit Service 509fd4
Packit Service 509fd4
	// Make request to an invalid route
Packit Service 509fd4
	req := httptest.NewRequest("GET", "/invalidroute", nil)
Packit Service 509fd4
Packit Service 509fd4
	rec := httptest.NewRecorder()
Packit Service 509fd4
	handler.ServeHTTP(rec, req)
Packit Service 509fd4
	resp := rec.Result()
Packit Service 509fd4
Packit Service 509fd4
	var status api.Status
Packit Service 509fd4
	err = json.NewDecoder(resp.Body).Decode(&status)
Packit Service 509fd4
	require.NoError(t, err)
Packit Service 509fd4
	require.Equal(t, http.StatusNotFound, resp.StatusCode)
Packit Service 509fd4
Packit Service 509fd4
	// Trigger an error 400 code
Packit Service 509fd4
	req = httptest.NewRequest("GET", "/api/composer-koji/v1/compose/badid", nil)
Packit Service 509fd4
Packit Service 509fd4
	rec = httptest.NewRecorder()
Packit Service 509fd4
	handler.ServeHTTP(rec, req)
Packit Service 509fd4
	resp = rec.Result()
Packit Service 509fd4
Packit Service 509fd4
	err = json.NewDecoder(resp.Body).Decode(&status)
Packit Service 509fd4
	require.NoError(t, err)
Packit Service 509fd4
	require.Equal(t, http.StatusBadRequest, resp.StatusCode)
Packit Service 509fd4
}
Packit Service 3a6627
Packit Service 3a6627
func TestJobTypeValidation(t *testing.T) {
Packit Service 3a6627
	dir, err := ioutil.TempDir("", "osbuild-composer-test-kojiapi-")
Packit Service 3a6627
	if err != nil {
Packit Service 3a6627
		log.Fatal(err)
Packit Service 3a6627
	}
Packit Service 3a6627
	defer os.RemoveAll(dir)
Packit Service 3a6627
Packit Service 3a6627
	server, workers := newTestKojiServer(t, dir)
Packit Service 3a6627
	handler := server.Handler("/api/composer-koji/v1")
Packit Service 3a6627
Packit Service 3a6627
	// Enqueue a compose job with N images (+ an Init and a Finalize job)
Packit Service 3a6627
	// Enqueuing them manually gives us access to the job IDs to use in
Packit Service 3a6627
	// requests.
Packit Service 3a6627
	nImages := 4
Packit Service 3a6627
	initJob := worker.KojiInitJob{
Packit Service 3a6627
		Server:  "test-server",
Packit Service 3a6627
		Name:    "test-job",
Packit Service 3a6627
		Version: "42",
Packit Service 3a6627
		Release: "1",
Packit Service 3a6627
	}
Packit Service 3a6627
	initID, err := workers.EnqueueKojiInit(&initJob)
Packit Service 3a6627
	require.NoError(t, err)
Packit Service 3a6627
Packit Service 3a6627
	buildJobs := make([]worker.OSBuildKojiJob, nImages)
Packit Service 3a6627
	buildJobIDs := make([]uuid.UUID, nImages)
Packit Service 3a6627
	filenames := make([]string, nImages)
Packit Service 3a6627
	for idx := 0; idx < nImages; idx++ {
Packit Service 3a6627
		fname := fmt.Sprintf("image-file-%04d", idx)
Packit Service 3a6627
		buildJob := worker.OSBuildKojiJob{
Packit Service 3a6627
			ImageName:     fmt.Sprintf("build-job-%04d", idx),
Packit Service 3a6627
			KojiServer:    "test-server",
Packit Service 3a6627
			KojiDirectory: "koji-server-test-dir",
Packit Service 3a6627
			KojiFilename:  fname,
Packit Service 3a6627
		}
Packit Service 3a6627
		buildID, err := workers.EnqueueOSBuildKoji(fmt.Sprintf("fake-arch-%d", idx), &buildJob, initID)
Packit Service 3a6627
		require.NoError(t, err)
Packit Service 3a6627
Packit Service 3a6627
		buildJobs[idx] = buildJob
Packit Service 3a6627
		buildJobIDs[idx] = buildID
Packit Service 3a6627
		filenames[idx] = fname
Packit Service 3a6627
	}
Packit Service 3a6627
Packit Service 3a6627
	finalizeJob := worker.KojiFinalizeJob{
Packit Service 3a6627
		Server:        "test-server",
Packit Service 3a6627
		Name:          "test-job",
Packit Service 3a6627
		Version:       "42",
Packit Service 3a6627
		Release:       "1",
Packit Service 3a6627
		KojiFilenames: filenames,
Packit Service 3a6627
		KojiDirectory: "koji-server-test-dir",
Packit Service 3a6627
		TaskID:        0,
Packit Service 3a6627
		StartTime:     uint64(time.Now().Unix()),
Packit Service 3a6627
	}
Packit Service 3a6627
	finalizeID, err := workers.EnqueueKojiFinalize(&finalizeJob, initID, buildJobIDs)
Packit Service 3a6627
	require.NoError(t, err)
Packit Service 3a6627
Packit Service 3a6627
	// ----- Jobs queued - Test API endpoints (status, manifests, logs) ----- //
Packit Service 3a6627
Packit Service 3a6627
	for _, path := range []string{"", "/manifests", "/logs"} {
Packit Service 3a6627
		// should return OK - actual result should be tested elsewhere
Packit Service 3a6627
		test.TestRoute(t, handler, false, "GET", fmt.Sprintf("/api/composer-koji/v1/compose/%s%s", finalizeID, path), ``, http.StatusOK, "*")
Packit Service 3a6627
Packit Service 3a6627
		// The other IDs should fail
Packit Service 3a6627
		msg := fmt.Sprintf("Job %s not found: expected \"koji-finalize\", found \"koji-init\" job instead", initID)
Packit Service 3a6627
		resp, _ := json.Marshal(map[string]string{"message": msg})
Packit Service 3a6627
		test.TestRoute(t, handler, false, "GET", fmt.Sprintf("/api/composer-koji/v1/compose/%s%s", initID, path), ``, http.StatusNotFound, string(resp))
Packit Service 3a6627
Packit Service 3a6627
		for idx, buildID := range buildJobIDs {
Packit Service 3a6627
			msg := fmt.Sprintf("Job %s not found: expected \"koji-finalize\", found \"osbuild-koji:fake-arch-%d\" job instead", buildID, idx)
Packit Service 3a6627
			resp, _ := json.Marshal(map[string]string{"message": msg})
Packit Service 3a6627
			test.TestRoute(t, handler, false, "GET", fmt.Sprintf("/api/composer-koji/v1/compose/%s%s", buildID, path), ``, http.StatusNotFound, string(resp))
Packit Service 3a6627
		}
Packit Service 3a6627
Packit Service 3a6627
		badID := uuid.New()
Packit Service 3a6627
		msg = fmt.Sprintf("Job %s not found: job does not exist", badID)
Packit Service 3a6627
		resp, _ = json.Marshal(map[string]string{"message": msg})
Packit Service 3a6627
		test.TestRoute(t, handler, false, "GET", fmt.Sprintf("/api/composer-koji/v1/compose/%s%s", badID, path), ``, http.StatusNotFound, string(resp))
Packit Service 3a6627
	}
Packit Service 3a6627
}