|
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 |
}
|