Blame internal/client/compose_test.go

Packit 63bb0d
// Package client - compose_test contains functions to check the compose API
Packit 63bb0d
// Copyright (C) 2020 by Red Hat, Inc.
Packit 63bb0d
Packit 63bb0d
// Tests should be self-contained and not depend on the state of the server
Packit 63bb0d
// They should use their own blueprints, not the default blueprints
Packit 63bb0d
// They should not assume version numbers for packages will match
Packit 63bb0d
// They should run tests that depend on previous results from the same function
Packit 63bb0d
// not from other functions.
Packit 63bb0d
//
Packit 63bb0d
// NOTE: The compose fail/finish tests use fake composes so the following are not
Packit 63bb0d
//       fully tested here:
Packit 63bb0d
//
Packit 63bb0d
//       * image download
Packit 63bb0d
//       * log download
Packit 63bb0d
//       * logs archive download
Packit 63bb0d
//
Packit 63bb0d
//       In addition osbuild-composer has not implemented:
Packit 63bb0d
//
Packit 63bb0d
//       * compose/results
Packit 63bb0d
//       * compose/metadata
Packit 63bb0d
package client
Packit 63bb0d
Packit 63bb0d
import (
Packit 63bb0d
	"io/ioutil"
Packit 63bb0d
	"net/http"
Packit 63bb0d
	"testing"
Packit 63bb0d
Packit 63bb0d
	"github.com/google/uuid"
Packit 63bb0d
	"github.com/stretchr/testify/assert"
Packit 63bb0d
	"github.com/stretchr/testify/require"
Packit 63bb0d
Packit 63bb0d
	"github.com/osbuild/osbuild-composer/internal/weldr"
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
// Test the compose types API
Packit 63bb0d
func TestComposeTypesV0(t *testing.T) {
Packit 63bb0d
	composeTypes, resp, err := GetComposesTypesV0(testState.socket)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
	require.Greater(t, len(composeTypes), 0)
Packit 63bb0d
	var found bool
Packit 63bb0d
	for _, t := range composeTypes {
Packit 63bb0d
		if t.Name == "qcow2" && t.Enabled == true {
Packit 63bb0d
			found = true
Packit 63bb0d
			break
Packit 63bb0d
		}
Packit 63bb0d
	}
Packit 63bb0d
	require.True(t, found, "qcow2 not in list of compose types: %#v", composeTypes)
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Test compose with invalid type fails
Packit 63bb0d
func TestComposeInvalidTypeV0(t *testing.T) {
Packit 63bb0d
	// lorax-composer checks the blueprint name before checking the compose type
Packit 63bb0d
	// so we need to push an empty blueprint to make sure the right failure is checked
Packit 63bb0d
	bp := `
Packit 63bb0d
		name="test-compose-invalid-type-v0"
Packit 63bb0d
		description="TestComposeInvalidTypeV0"
Packit 63bb0d
		version="0.0.1"
Packit 63bb0d
		`
Packit 63bb0d
	resp, err := PostTOMLBlueprintV0(testState.socket, bp)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.True(t, resp.Status, "POST failed: %#v", resp)
Packit 63bb0d
Packit 63bb0d
	compose := `{
Packit 63bb0d
		"blueprint_name": "test-compose-invalid-type-v0",
Packit 63bb0d
		"compose_type": "snakes",
Packit 63bb0d
		"branch": "master"
Packit 63bb0d
	}`
Packit 63bb0d
	resp, err = PostComposeV0(testState.socket, compose)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.NotNil(t, resp)
Packit 63bb0d
	require.False(t, resp.Status, "POST did not fail")
Packit 63bb0d
	require.Equal(t, len(resp.Errors), 1)
Packit 63bb0d
	require.Contains(t, resp.Errors[0].Msg, "snakes")
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Test compose for unknown blueprint fails
Packit 63bb0d
func TestComposeInvalidBlueprintV0(t *testing.T) {
Packit 63bb0d
	compose := `{
Packit 63bb0d
		"blueprint_name": "test-invalid-bp-compose-v0",
Packit 63bb0d
		"compose_type": "qcow2",
Packit 63bb0d
		"branch": "master"
Packit 63bb0d
	}`
Packit 63bb0d
	resp, err := PostComposeV0(testState.socket, compose)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.NotNil(t, resp)
Packit 63bb0d
	require.False(t, resp.Status, "POST did not fail")
Packit 63bb0d
	require.Equal(t, len(resp.Errors), 1)
Packit 63bb0d
	require.Contains(t, resp.Errors[0].Msg, "test-invalid-bp-compose-v0")
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Test compose for empty blueprint fails
Packit 63bb0d
func TestComposeEmptyBlueprintV0(t *testing.T) {
Packit 63bb0d
	compose := `{
Packit 63bb0d
		"blueprint_name": "",
Packit 63bb0d
		"compose_type": "qcow2",
Packit 63bb0d
		"branch": "master"
Packit 63bb0d
	}`
Packit 63bb0d
	resp, err := PostComposeV0(testState.socket, compose)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.NotNil(t, resp)
Packit 63bb0d
	require.False(t, resp.Status, "POST did not fail")
Packit 63bb0d
	require.Greater(t, len(resp.Errors), 0)
Packit 63bb0d
	require.Contains(t, resp.Errors[0].Msg, "Invalid characters in API path")
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Test compose for blueprint with invalid characters fails
Packit 63bb0d
func TestComposeInvalidCharsBlueprintV0(t *testing.T) {
Packit 63bb0d
	compose := `{
Packit 63bb0d
		"blueprint_name": "I ο½—π’Šll πŸ‰ΞΏπ˜ π› ο½π”°κœ± π˜π’‰πΈπšœ",
Packit 63bb0d
		"compose_type": "qcow2",
Packit 63bb0d
		"branch": "master"
Packit 63bb0d
	}`
Packit 63bb0d
	resp, err := PostComposeV0(testState.socket, compose)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.NotNil(t, resp)
Packit 63bb0d
	require.False(t, resp.Status, "POST did not fail")
Packit 63bb0d
	require.Greater(t, len(resp.Errors), 0)
Packit 63bb0d
	require.Contains(t, resp.Errors[0].Msg, "Invalid characters in API path")
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Test compose cancel for unknown uuid fails
Packit 63bb0d
// Is cancel implemented at all?
Packit 63bb0d
Packit 63bb0d
// Test compose delete for unknown uuid
Packit 63bb0d
func TestDeleteUnknownComposeV0(t *testing.T) {
Packit 63bb0d
	status, resp, err := DeleteComposeV0(testState.socket, "c91818f9-8025-47af-89d2-f030d7000c2c")
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
	// TODO -- fix the API Handler in osbuild-composer, should be no uuids
Packit 63bb0d
	assert.Equal(t, 0, len(status.UUIDs), "%#v", status)
Packit 63bb0d
	require.Equal(t, 1, len(status.Errors), "%#v", status)
Packit 63bb0d
	require.Equal(t, "UnknownUUID", status.Errors[0].ID)
Packit 63bb0d
	require.Contains(t, status.Errors[0].Msg, "c91818f9-8025-47af-89d2-f030d7000c2c")
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Test compose info for unknown uuid
Packit 63bb0d
func TestUnknownComposeInfoV0(t *testing.T) {
Packit 63bb0d
	_, resp, err := GetComposeInfoV0(testState.socket, "c91818f9-8025-47af-89d2-f030d7000c2c")
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.NotNil(t, resp)
Packit 63bb0d
	require.False(t, resp.Status)
Packit 63bb0d
	require.Equal(t, 1, len(resp.Errors))
Packit 63bb0d
	require.Equal(t, "UnknownUUID", resp.Errors[0].ID)
Packit 63bb0d
	require.Contains(t, resp.Errors[0].Msg, "c91818f9-8025-47af-89d2-f030d7000c2c")
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Test compose metadata for unknown uuid
Packit 63bb0d
// TODO osbuild-composer has not implemented compose/metadata yet
Packit 63bb0d
Packit 63bb0d
// Test compose results for unknown uuid
Packit 63bb0d
// TODO osbuild-composer has not implemented compose/results yet
Packit 63bb0d
Packit 63bb0d
// Test compose image for unknown uuid
Packit 63bb0d
func TestComposeInvalidImageV0(t *testing.T) {
Packit 63bb0d
	resp, err := WriteComposeImageV0(testState.socket, ioutil.Discard, "c91818f9-8025-47af-89d2-f030d7000c2c")
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.NotNil(t, resp)
Packit 63bb0d
	require.False(t, resp.Status)
Packit 63bb0d
	require.Equal(t, 1, len(resp.Errors))
Packit 63bb0d
	require.Equal(t, "UnknownUUID", resp.Errors[0].ID)
Packit 63bb0d
	require.Contains(t, resp.Errors[0].Msg, "c91818f9-8025-47af-89d2-f030d7000c2c")
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Test compose logs for unknown uuid
Packit 63bb0d
func TestComposeInvalidLogsV0(t *testing.T) {
Packit 63bb0d
	resp, err := WriteComposeLogsV0(testState.socket, ioutil.Discard, "c91818f9-8025-47af-89d2-f030d7000c2c")
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.NotNil(t, resp)
Packit 63bb0d
	require.False(t, resp.Status)
Packit 63bb0d
	require.Equal(t, 1, len(resp.Errors))
Packit 63bb0d
	require.Equal(t, "UnknownUUID", resp.Errors[0].ID)
Packit 63bb0d
	require.Contains(t, resp.Errors[0].Msg, "c91818f9-8025-47af-89d2-f030d7000c2c")
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Test compose log for unknown uuid
Packit 63bb0d
func TestComposeInvalidLogV0(t *testing.T) {
Packit 63bb0d
	resp, err := WriteComposeLogV0(testState.socket, ioutil.Discard, "c91818f9-8025-47af-89d2-f030d7000c2c")
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.NotNil(t, resp)
Packit 63bb0d
	require.False(t, resp.Status)
Packit 63bb0d
	require.Equal(t, 1, len(resp.Errors))
Packit 63bb0d
	require.Equal(t, "UnknownUUID", resp.Errors[0].ID)
Packit 63bb0d
	require.Contains(t, resp.Errors[0].Msg, "c91818f9-8025-47af-89d2-f030d7000c2c")
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Test compose metadata for unknown uuid
Packit 63bb0d
func TestComposeInvalidMetadataV0(t *testing.T) {
Packit 63bb0d
	resp, err := WriteComposeMetadataV0(testState.socket, ioutil.Discard, "c91818f9-8025-47af-89d2-f030d7000c2c")
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.NotNil(t, resp)
Packit 63bb0d
	require.False(t, resp.Status)
Packit 63bb0d
	require.Equal(t, 1, len(resp.Errors))
Packit 63bb0d
	require.Equal(t, "UnknownUUID", resp.Errors[0].ID)
Packit 63bb0d
	require.Contains(t, resp.Errors[0].Msg, "c91818f9-8025-47af-89d2-f030d7000c2c")
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Test compose results for unknown uuid
Packit 63bb0d
func TestComposeInvalidResultsV0(t *testing.T) {
Packit 63bb0d
	resp, err := WriteComposeResultsV0(testState.socket, ioutil.Discard, "c91818f9-8025-47af-89d2-f030d7000c2c")
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.NotNil(t, resp)
Packit 63bb0d
	require.False(t, resp.Status)
Packit 63bb0d
	require.Equal(t, 1, len(resp.Errors))
Packit 63bb0d
	require.Equal(t, "UnknownUUID", resp.Errors[0].ID)
Packit 63bb0d
	require.Contains(t, resp.Errors[0].Msg, "c91818f9-8025-47af-89d2-f030d7000c2c")
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Test status filter for unknown uuid
Packit 63bb0d
func TestComposeInvalidStatusV0(t *testing.T) {
Packit 63bb0d
	status, resp, err := GetComposeStatusV0(testState.socket, "c91818f9-8025-47af-89d2-f030d7000c2c", "", "", "")
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
	require.Equal(t, 0, len(status))
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Test status filter for unknown blueprint
Packit 63bb0d
func TestComposeUnknownBlueprintStatusV0(t *testing.T) {
Packit 63bb0d
	status, resp, err := GetComposeStatusV0(testState.socket, "*", "unknown-blueprint-test", "", "")
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
	require.Equal(t, 0, len(status))
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Test status filter for blueprint with invalid characters
Packit 63bb0d
func TestComposeInvalidBlueprintStatusV0(t *testing.T) {
Packit 63bb0d
	status, resp, err := GetComposeStatusV0(testState.socket, "*", "I ο½—π’Šll πŸ‰ΞΏπ˜ π› ο½π”°κœ± π˜π’‰πΈπšœ", "", "")
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.NotNil(t, resp)
Packit 63bb0d
	require.Equal(t, "InvalidChars", resp.Errors[0].ID)
Packit 63bb0d
	require.Contains(t, resp.Errors[0].Msg, "Invalid characters in API path")
Packit 63bb0d
	require.Equal(t, 0, len(status))
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Helper for searching compose results for a UUID
Packit 63bb0d
func UUIDInComposeResults(buildID uuid.UUID, results []weldr.ComposeEntryV0) bool {
Packit 63bb0d
	for idx := range results {
Packit 63bb0d
		if results[idx].ID == buildID {
Packit 63bb0d
			return true
Packit 63bb0d
		}
Packit 63bb0d
	}
Packit 63bb0d
	return false
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Helper to wait for a build id to not be in the queue
Packit 63bb0d
func WaitForBuild(socket *http.Client, buildID uuid.UUID) (*APIResponse, error) {
Packit 63bb0d
	for {
Packit 63bb0d
		queue, resp, err := GetComposeQueueV0(testState.socket)
Packit 63bb0d
		if err != nil {
Packit 63bb0d
			return nil, err
Packit 63bb0d
		}
Packit 63bb0d
		if resp != nil {
Packit 63bb0d
			return resp, nil
Packit 63bb0d
		}
Packit 63bb0d
Packit 63bb0d
		if !UUIDInComposeResults(buildID, queue.New) &&
Packit 63bb0d
			!UUIDInComposeResults(buildID, queue.Run) {
Packit 63bb0d
			break
Packit 63bb0d
		}
Packit 63bb0d
	}
Packit 63bb0d
	return nil, nil
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Setup and run the failed compose tests
Packit 63bb0d
func TestFailedComposeV0(t *testing.T) {
Packit 63bb0d
	bp := `
Packit 63bb0d
		name="test-failed-compose-v0"
Packit 63bb0d
		description="TestFailedComposeV0"
Packit 63bb0d
		version="0.0.1"
Packit 63bb0d
		[[packages]]
Packit 63bb0d
		name="bash"
Packit 63bb0d
		version="*"
Packit 63bb0d
Packit 63bb0d
		[[modules]]
Packit 63bb0d
		name="util-linux"
Packit 63bb0d
		version="*"
Packit 63bb0d
Packit 63bb0d
		[[customizations.user]]
Packit 63bb0d
		name="root"
Packit 63bb0d
		password="qweqweqwe"
Packit 63bb0d
		`
Packit 63bb0d
	resp, err := PostTOMLBlueprintV0(testState.socket, bp)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.True(t, resp.Status, "POST failed: %#v", resp)
Packit 63bb0d
Packit 63bb0d
	compose := `{
Packit 63bb0d
		"blueprint_name": "test-failed-compose-v0",
Packit 63bb0d
		"compose_type": "qcow2",
Packit 63bb0d
		"branch": "master"
Packit 63bb0d
	}`
Packit 63bb0d
	// Create a failed test compose
Packit 63bb0d
	body, resp, err := PostJSON(testState.socket, "/api/v1/compose?test=1", compose)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
Packit 63bb0d
	response, err := NewComposeResponseV0(body)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.True(t, response.Status, "POST failed: %#v", response)
Packit 63bb0d
	buildID := response.BuildID
Packit 63bb0d
Packit 63bb0d
	// Wait until the build is not listed in the queue
Packit 63bb0d
	resp, err = WaitForBuild(testState.socket, buildID)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
Packit 63bb0d
	// Test finished after compose (should not have finished)
Packit 63bb0d
	finished, resp, err := GetFinishedComposesV0(testState.socket)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
	require.False(t, UUIDInComposeResults(buildID, finished))
Packit 63bb0d
Packit 63bb0d
	// Test failed after compose (should have failed)
Packit 63bb0d
	failed, resp, err := GetFailedComposesV0(testState.socket)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
	require.True(t, UUIDInComposeResults(buildID, failed), "%s not found in failed list: %#v", buildID, failed)
Packit 63bb0d
Packit 63bb0d
	// Test status filter on failed compose
Packit 63bb0d
	status, resp, err := GetComposeStatusV0(testState.socket, "*", "", "FAILED", "")
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
	require.True(t, UUIDInComposeResults(buildID, status), "%s not found in status list: %#v", buildID, status)
Packit 63bb0d
Packit 63bb0d
	// Test status of build id
Packit 63bb0d
	status, resp, err = GetComposeStatusV0(testState.socket, buildID.String(), "", "", "")
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
	require.True(t, UUIDInComposeResults(buildID, status), "%s not found in status list: %#v", buildID, status)
Packit 63bb0d
Packit 63bb0d
	// Test status filter using FINISHED, should not be listed
Packit 63bb0d
	status, resp, err = GetComposeStatusV0(testState.socket, "*", "", "FINISHED", "")
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
	require.False(t, UUIDInComposeResults(buildID, status))
Packit 63bb0d
Packit 63bb0d
	// Test compose info for the failed compose
Packit 63bb0d
	info, resp, err := GetComposeInfoV0(testState.socket, buildID.String())
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
	require.Equal(t, "FAILED", info.QueueStatus)
Packit 63bb0d
	require.Equal(t, buildID, info.ID)
Packit 63bb0d
Packit 63bb0d
	// Test requesting the compose logs for the failed build
Packit 63bb0d
	resp, err = WriteComposeLogsV0(testState.socket, ioutil.Discard, buildID.String())
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
Packit 63bb0d
	// Test requesting the compose metadata for the failed build
Packit 63bb0d
	resp, err = WriteComposeMetadataV0(testState.socket, ioutil.Discard, buildID.String())
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
Packit 63bb0d
	// Test requesting the compose results for the failed build
Packit 63bb0d
	resp, err = WriteComposeResultsV0(testState.socket, ioutil.Discard, buildID.String())
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Setup and run the finished compose tests
Packit 63bb0d
func TestFinishedComposeV0(t *testing.T) {
Packit 63bb0d
	bp := `
Packit 63bb0d
		name="test-finished-compose-v0"
Packit 63bb0d
		description="TestFinishedComposeV0"
Packit 63bb0d
		version="0.0.1"
Packit 63bb0d
		[[packages]]
Packit 63bb0d
		name="bash"
Packit 63bb0d
		version="*"
Packit 63bb0d
Packit 63bb0d
		[[modules]]
Packit 63bb0d
		name="util-linux"
Packit 63bb0d
		version="*"
Packit 63bb0d
Packit 63bb0d
		[[customizations.user]]
Packit 63bb0d
		name="root"
Packit 63bb0d
		password="qweqweqwe"
Packit 63bb0d
		`
Packit 63bb0d
	resp, err := PostTOMLBlueprintV0(testState.socket, bp)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.True(t, resp.Status, "POST failed: %#v", resp)
Packit 63bb0d
Packit 63bb0d
	compose := `{
Packit 63bb0d
		"blueprint_name": "test-finished-compose-v0",
Packit 63bb0d
		"compose_type": "qcow2",
Packit 63bb0d
		"branch": "master"
Packit 63bb0d
	}`
Packit 63bb0d
	// Create a finished test compose
Packit 63bb0d
	body, resp, err := PostJSON(testState.socket, "/api/v1/compose?test=2", compose)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
Packit 63bb0d
	response, err := NewComposeResponseV0(body)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.True(t, response.Status, "POST failed: %#v", response)
Packit 63bb0d
	buildID := response.BuildID
Packit 63bb0d
Packit 63bb0d
	// Wait until the build is not listed in the queue
Packit 63bb0d
	resp, err = WaitForBuild(testState.socket, buildID)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
Packit 63bb0d
	// Test failed after compose (should not have failed)
Packit 63bb0d
	failed, resp, err := GetFailedComposesV0(testState.socket)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
	require.False(t, UUIDInComposeResults(buildID, failed))
Packit 63bb0d
Packit 63bb0d
	// Test finished after compose (should have finished)
Packit 63bb0d
	finished, resp, err := GetFinishedComposesV0(testState.socket)
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
	require.True(t, UUIDInComposeResults(buildID, finished), "%s not found in finished list: %#v", buildID, finished)
Packit 63bb0d
Packit 63bb0d
	// Test status filter on finished compose
Packit 63bb0d
	status, resp, err := GetComposeStatusV0(testState.socket, "*", "", "FINISHED", "")
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
	require.True(t, UUIDInComposeResults(buildID, status), "%s not found in status list: %#v", buildID, status)
Packit 63bb0d
Packit 63bb0d
	// Test status of build id
Packit 63bb0d
	status, resp, err = GetComposeStatusV0(testState.socket, buildID.String(), "", "", "")
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
	require.True(t, UUIDInComposeResults(buildID, status), "%s not found in status list: %#v", buildID, status)
Packit 63bb0d
Packit 63bb0d
	// Test status filter using FAILED, should not be listed
Packit 63bb0d
	status, resp, err = GetComposeStatusV0(testState.socket, "*", "", "FAILED", "")
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
	require.False(t, UUIDInComposeResults(buildID, status))
Packit 63bb0d
Packit 63bb0d
	// Test compose info for the finished compose
Packit 63bb0d
	info, resp, err := GetComposeInfoV0(testState.socket, buildID.String())
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
	require.Equal(t, "FINISHED", info.QueueStatus)
Packit 63bb0d
	require.Equal(t, buildID, info.ID)
Packit 63bb0d
Packit 63bb0d
	// Test requesting the compose logs for the finished build
Packit 63bb0d
	resp, err = WriteComposeLogsV0(testState.socket, ioutil.Discard, buildID.String())
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
Packit 63bb0d
	// Test requesting the compose metadata for the finished build
Packit 63bb0d
	resp, err = WriteComposeMetadataV0(testState.socket, ioutil.Discard, buildID.String())
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
Packit 63bb0d
	// Test requesting the compose results for the finished build
Packit 63bb0d
	resp, err = WriteComposeResultsV0(testState.socket, ioutil.Discard, buildID.String())
Packit 63bb0d
	require.NoError(t, err, "failed with a client error")
Packit 63bb0d
	require.Nil(t, resp)
Packit 63bb0d
}