From ba2240b5780935c9405d8eb71db484bf232c68c3 Mon Sep 17 00:00:00 2001 From: Achilleas Koutsou Date: Mon, 16 Oct 2023 20:00:03 +0200 Subject: [PATCH] cloudapi: test GetTargets() Test some valid and invalid combinations for the GetTargets() upload target selection. Includes tests with and without the upload options for the default target. --- internal/cloudapi/v2/imagerequest_test.go | 122 ++++++++++++++++++++++ 1 file changed, 122 insertions(+) diff --git a/internal/cloudapi/v2/imagerequest_test.go b/internal/cloudapi/v2/imagerequest_test.go index 2c257d409..d8b04fdc8 100644 --- a/internal/cloudapi/v2/imagerequest_test.go +++ b/internal/cloudapi/v2/imagerequest_test.go @@ -3,9 +3,11 @@ package v2 import ( "testing" + "github.com/osbuild/images/pkg/distro/rhel9" "github.com/osbuild/images/pkg/distro/test_distro" "github.com/osbuild/osbuild-composer/internal/blueprint" "github.com/osbuild/osbuild-composer/internal/common" + "github.com/osbuild/osbuild-composer/internal/target" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -129,3 +131,123 @@ func TestGetOstreeOptions(t *testing.T) { require.NotNil(t, err) assert.Error(t, err) } + +func TestGetTargets(t *testing.T) { + at := assert.New(t) + + r9 := rhel9.NewRHEL93() + arch, err := r9.GetArch("x86_64") + at.NoError(err) + + cr := &ComposeRequest{ + Distribution: r9.Name(), + } + + it, err := arch.GetImageType("qcow2") + at.NoError(err) + + var uploadOptions UploadOptions // doesn't need a concrete value or type for this test + + type testCase struct { + imageType ImageTypes + targets []UploadTypes + includeDefault bool + expected []target.TargetName + fail bool + } + + testCases := map[string]testCase{ + "guest:default": { + imageType: ImageTypesGuestImage, + targets: nil, + includeDefault: true, + expected: []target.TargetName{target.TargetNameAWSS3}, + }, + "guest:s3": { + imageType: ImageTypesGuestImage, + targets: []UploadTypes{UploadTypesAwsS3}, + includeDefault: false, + expected: []target.TargetName{target.TargetNameAWSS3}, + }, + "guest:s3+default": { + imageType: ImageTypesGuestImage, + targets: []UploadTypes{UploadTypesAwsS3}, + includeDefault: true, + expected: []target.TargetName{target.TargetNameAWSS3, target.TargetNameAWSS3}, + }, + "guest:azure:fail": { + imageType: ImageTypesGuestImage, + targets: []UploadTypes{UploadTypesAzure}, + expected: []target.TargetName{""}, + fail: true, + }, + "azure:nil": { + imageType: ImageTypesAzure, + targets: nil, + includeDefault: true, + expected: []target.TargetName{target.TargetNameAzureImage}, + }, + "azure:azure": { + imageType: ImageTypesAzure, + targets: []UploadTypes{UploadTypesAzure}, + expected: []target.TargetName{target.TargetNameAzureImage}, + }, + "azure:gcp:fail": { + imageType: ImageTypesAzure, + targets: []UploadTypes{UploadTypesGcp}, + expected: []target.TargetName{""}, + fail: true, + }, + "edge:default": { + imageType: ImageTypesEdgeCommit, + targets: nil, + includeDefault: true, + expected: []target.TargetName{target.TargetNameAWSS3}, + }, + "edge:s3": { + imageType: ImageTypesEdgeCommit, + targets: []UploadTypes{UploadTypesAwsS3}, + expected: []target.TargetName{target.TargetNameAWSS3}, + }, + "edge:gcp:fail": { + imageType: ImageTypesEdgeCommit, + targets: []UploadTypes{UploadTypesGcp}, + expected: []target.TargetName{""}, + fail: true, + }, + } + + for name := range testCases { + t.Run(name, func(t *testing.T) { + at := assert.New(t) + testCase := testCases[name] + uploadTargets := make([]UploadTarget, len(testCase.targets)) + for idx := range testCase.targets { + uploadTargets[idx] = UploadTarget{ + Type: testCase.targets[idx], + UploadOptions: uploadOptions, + } + } + ir := ImageRequest{ + Architecture: arch.Name(), + ImageType: testCase.imageType, + UploadTargets: &uploadTargets, + } + if testCase.includeDefault { + // add UploadOptions for the default target too + ir.UploadOptions = &uploadOptions + } + + targets, err := ir.GetTargets(cr, it) + if !testCase.fail { + at.NoError(err) + at.Equal(len(targets), len(testCase.expected)) + for idx := range targets { + at.Equal(targets[idx].Name, testCase.expected[idx]) + } + } else { + at.Error(err) + } + }) + } +}