From 7408be580c45d8507ee39d73992dde5807bc64ec Mon Sep 17 00:00:00 2001 From: Gianluca Zuccarelli Date: Wed, 14 Jul 2021 12:32:43 +0100 Subject: [PATCH] client: test supported and unsupported mountpoints --- internal/client/compose_test.go | 95 +++++++++++++++++++++++++++ internal/distro/rhel8/distro_test.go | 2 +- internal/distro/test_distro/distro.go | 14 ++++ 3 files changed, 110 insertions(+), 1 deletion(-) diff --git a/internal/client/compose_test.go b/internal/client/compose_test.go index 2a40af71d..8d8ab7374 100644 --- a/internal/client/compose_test.go +++ b/internal/client/compose_test.go @@ -451,3 +451,98 @@ func TestFinishedComposeV0(t *testing.T) { require.NoError(t, err, "failed with a client error") require.Nil(t, resp) } + +func TestComposeSupportedMountPointV0(t *testing.T) { + + bp := ` + name="test-compose-supported-mountpoint-v0" + description="TestComposeSupportedMountPointV0" + version="0.0.1" + [[customizations.filesystem]] + mountpoint = "/" + size = 4294967296 + ` + resp, err := PostTOMLBlueprintV0(testState.socket, bp) + require.NoError(t, err, "failed with a client error") + require.True(t, resp.Status, "POST failed: %#v", resp) + + compose := fmt.Sprintf(`{ + "blueprint_name": "test-compose-supported-mountpoint-v0", + "compose_type": "%s", + "branch": "master" + }`, testState.imageTypeName) + + // Create a finished test compose + body, resp, err := PostJSON(testState.socket, "/api/v1/compose?test=2", compose) + require.NoError(t, err, "failed with a client error") + require.Nil(t, resp) + + response, err := NewComposeResponseV0(body) + require.NoError(t, err, "failed with a client error") + require.True(t, response.Status, "POST failed: %#v", response) + buildID := response.BuildID + + // Wait until the build is not listed in the queue + resp, err = WaitForBuild(testState.socket, buildID) + require.NoError(t, err, "failed with a client error") + require.Nil(t, resp) + + // Test failed after compose (should not have failed) + failed, resp, err := GetFailedComposesV0(testState.socket) + require.NoError(t, err, "failed with a client error") + require.Nil(t, resp) + require.False(t, UUIDInComposeResults(buildID, failed)) + + // Test finished after compose (should have finished) + finished, resp, err := GetFinishedComposesV0(testState.socket) + require.NoError(t, err, "failed with a client error") + require.Nil(t, resp) + require.True(t, UUIDInComposeResults(buildID, finished), "%s not found in finished list: %#v", buildID, finished) + + // Test status filter on finished compose + status, resp, err := GetComposeStatusV0(testState.socket, "*", "", "FINISHED", "") + require.NoError(t, err, "failed with a client error") + require.Nil(t, resp) + require.True(t, UUIDInComposeResults(buildID, status), "%s not found in status list: %#v", buildID, status) + + // Test status of build id + status, resp, err = GetComposeStatusV0(testState.socket, buildID.String(), "", "", "") + require.NoError(t, err, "failed with a client error") + require.Nil(t, resp) + require.True(t, UUIDInComposeResults(buildID, status), "%s not found in status list: %#v", buildID, status) + + // Test status filter using FAILED, should not be listed + status, resp, err = GetComposeStatusV0(testState.socket, "*", "", "FAILED", "") + require.NoError(t, err, "failed with a client error") + require.Nil(t, resp) + require.False(t, UUIDInComposeResults(buildID, status)) + +} + +func TestComposeUnsupportedMountPointV0(t *testing.T) { + bp := ` + name="test-compose-unsupported-mountpoint-v0" + description="TestComposeUnsupportedMountPointV0" + version="0.0.1" + [[customizations.filesystem]] + mountpoint = "/boot" + size = 4294967296 + ` + resp, err := PostTOMLBlueprintV0(testState.socket, bp) + require.NoError(t, err, "failed with a client error") + require.NotNil(t, resp) + + compose := fmt.Sprintf(`{ + "blueprint_name": "test-compose-unsupported-mountpoint-v0", + "compose_type": "%s", + "branch": "master" + }`, testState.imageTypeName) + + // Create a finished test compose + body, resp, err := PostJSON(testState.socket, "/api/v1/compose?test=2", compose) + require.NoError(t, err, "failed with a client error") + require.NotNil(t, resp) + require.Equal(t, "ManifestCreationFailed", resp.Errors[0].ID) + require.Contains(t, resp.Errors[0].Msg, "The following custom mountpoints are not supported") + require.Equal(t, 0, len(body)) +} diff --git a/internal/distro/rhel8/distro_test.go b/internal/distro/rhel8/distro_test.go index a3a6961e2..a110969be 100644 --- a/internal/distro/rhel8/distro_test.go +++ b/internal/distro/rhel8/distro_test.go @@ -401,7 +401,7 @@ func TestDistro_CustomFileSystemManifestError(t *testing.T) { if imgTypeName == "rhel-edge-commit" { assert.EqualError(t, err, "Custom mountpoints are not supported for ostree types") } else { - assert.EqualError(t, err, "The following custom mountpoints are not supported [\"/var\"]") + assert.EqualError(t, err, "The following custom mountpoints are not supported [\"/boot\"]") } } } diff --git a/internal/distro/test_distro/distro.go b/internal/distro/test_distro/distro.go index 53cd690a1..23bfbeab4 100644 --- a/internal/distro/test_distro/distro.go +++ b/internal/distro/test_distro/distro.go @@ -3,6 +3,7 @@ package test_distro import ( "encoding/json" "errors" + "fmt" "sort" "github.com/osbuild/osbuild-composer/internal/blueprint" @@ -165,6 +166,19 @@ func (t *TestImageType) Exports() []string { } func (t *TestImageType) Manifest(b *blueprint.Customizations, options distro.ImageOptions, repos []rpmmd.RepoConfig, packageSpecSets map[string][]rpmmd.PackageSpec, seed int64) (distro.Manifest, error) { + mountpoints := b.GetFilesystems() + + invalidMountpoints := []string{} + for _, m := range mountpoints { + if m.Mountpoint != "/" { + invalidMountpoints = append(invalidMountpoints, m.Mountpoint) + } + } + + if len(invalidMountpoints) > 0 { + return nil, fmt.Errorf("The following custom mountpoints are not supported %+q", invalidMountpoints) + } + return json.Marshal( osbuild.Manifest{ Sources: osbuild.Sources{},