From 2d0755b9245cfe3dc3dd0aae5990db6be3f1e767 Mon Sep 17 00:00:00 2001 From: Achilleas Koutsou Date: Fri, 11 Feb 2022 15:52:44 +0100 Subject: [PATCH] cloudapi: test new repository collection function --- internal/cloudapi/v2/v2_internal_test.go | 93 ++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/internal/cloudapi/v2/v2_internal_test.go b/internal/cloudapi/v2/v2_internal_test.go index 07695118a..02df9c861 100644 --- a/internal/cloudapi/v2/v2_internal_test.go +++ b/internal/cloudapi/v2/v2_internal_test.go @@ -3,6 +3,9 @@ package v2 import ( "testing" + "github.com/osbuild/osbuild-composer/internal/common" + "github.com/osbuild/osbuild-composer/internal/rpmmd" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -23,3 +26,93 @@ func TestSplitExtension(t *testing.T) { }) } } + +func TestCollectRepos(t *testing.T) { + assert := assert.New(t) + + // user repositories from request customizations + customRepos := []Repository{ + { + Baseurl: common.StringToPtr("http://example.com/repoone"), + }, + { + Baseurl: common.StringToPtr("http://example.com/repotwo"), + PackageSets: &[]string{"should-be-ignored"}, + }, + } + + // repos from the image request (standard repos + package set repos) + irRepos := []Repository{ + { + Baseurl: common.StringToPtr("http://example.com/baseos"), // empty field -> all package sets + }, + { + Baseurl: common.StringToPtr("http://example.com/appstream"), // empty field -> all package sets + }, + { + Baseurl: common.StringToPtr("http://example.com/baseos-rhel7"), // only build + PackageSets: &[]string{"build"}, + }, + { + Baseurl: common.StringToPtr("http://example.com/extra-tools"), // build and archive + PackageSets: &[]string{"build", "archive"}, + }, + { + Baseurl: common.StringToPtr("http://example.com/custom-os-stuff"), // blueprint -> merge with custom + PackageSets: &[]string{"blueprint"}, + }, + } + + expectedPkgSetRepos := map[string][]rpmmd.RepoConfig{ + "build": { + { + BaseURL: "http://example.com/baseos-rhel7", + }, + { + BaseURL: "http://example.com/extra-tools", + }, + }, + "archive": { + { + BaseURL: "http://example.com/extra-tools", + }, + }, + "blueprint": { + { + BaseURL: "http://example.com/custom-os-stuff", + }, + { + BaseURL: "http://example.com/repoone", + }, + { + BaseURL: "http://example.com/repotwo", + }, + }, + } + + payloadPkgSets := []string{"blueprint"} + + baseRepos, pkgSetRepos, err := collectRepos(irRepos, customRepos, payloadPkgSets) + + // check lengths + assert.NoError(err) + assert.Len(baseRepos, 2) + assert.Len(pkgSetRepos, 3) + + // check tags in package set repo map + for _, tag := range []string{"blueprint", "build", "archive"} { + assert.Contains(pkgSetRepos, tag) + } + assert.NotContains(pkgSetRepos, "should-be-ignored") + + // check URLs + baseRepoURLs := make([]string, len(baseRepos)) + for idx, baseRepo := range baseRepos { + baseRepoURLs[idx] = baseRepo.BaseURL + } + for _, url := range []string{"http://example.com/baseos", "http://example.com/appstream"} { + assert.Contains(baseRepoURLs, url) + } + + assert.Equal(pkgSetRepos, expectedPkgSetRepos) +}