This commit is contained in:
NicoForce 2024-04-30 15:43:30 +02:00 committed by GitHub
commit 4eed8e18e7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 53 additions and 15 deletions

View File

@ -190,10 +190,6 @@ func getResourceReferences(res *model.Resource) string {
// repository:a/b/c/image namespace:n replaceCount: 3 -> n/image
// repository:a/b/c/image namespace:n replaceCount: 4 -> error
func replaceNamespace(repository string, namespace string, replaceCount int8, dstRepoComponentPathType string) (string, error) {
if len(namespace) == 0 {
return repository, nil
}
srcRepoPathComponents := strings.Split(repository, "/")
srcLength := len(srcRepoPathComponents)
@ -205,6 +201,8 @@ func replaceNamespace(repository string, namespace string, replaceCount int8, ds
return "", errors.New(nil).WithCode(errors.BadRequestCode).
WithMessage("the source repository %q contains only %d path components %v excepting the last one, but the destination namespace flattening level is %d",
repository, srcLength-1, srcRepoPathComponents[:srcLength-1], replaceCount)
case len(namespace) == 0:
dstRepoPrefix = strings.Join(srcRepoPathComponents[replaceCount:srcLength-1], "/")
default:
dstRepoPrefix = namespace + "/" + strings.Join(srcRepoPathComponents[replaceCount:srcLength-1], "/")
}

View File

@ -116,20 +116,12 @@ func (s *stageTestSuite) TestAssembleDestinationResources() {
}
func (s *stageTestSuite) TestReplaceNamespace() {
// empty namespace
// replace count <0, repository contains no "/"
var (
repository string = "c"
namespace string = ""
replaceCount int8 = 0
namespace string = "n"
replaceCount int8 = -1
)
result, err := replaceNamespace(repository, namespace, replaceCount, "")
s.Require().Nil(err)
s.Equal("c", result)
// replace count <0, repository contains no "/"
repository = "c"
namespace = "n"
replaceCount = -1
result, err = replaceNamespace(repository, namespace, replaceCount, "")
s.Require().Nil(err)
s.Equal("n/c", result)
@ -195,6 +187,54 @@ func (s *stageTestSuite) TestReplaceNamespace() {
result, err = replaceNamespace(repository, namespace, replaceCount, "")
s.Require().Nil(err)
s.Equal("n/a", result)
// replace count = 0 with empty namespace
repository = "a/b/c"
namespace = ""
replaceCount = 0
result, err = replaceNamespace(repository, namespace, replaceCount, "")
s.Require().Nil(err)
s.Equal("a/b/c", result)
// replace count = 1 with empty namespace
repository = "a/b/c"
namespace = ""
replaceCount = 1
result, err = replaceNamespace(repository, namespace, replaceCount, "")
s.Require().Nil(err)
s.Equal("b/c", result)
// replace count = 2 with empty namespace
repository = "a/b/c"
namespace = ""
replaceCount = 2
result, err = replaceNamespace(repository, namespace, replaceCount, "")
s.Require().Nil(err)
s.Equal("c", result)
// replace count <0, repository contains no "/" with empty namespace
repository = "c"
namespace = ""
replaceCount = -1
result, err = replaceNamespace(repository, namespace, replaceCount, "")
s.Require().Nil(err)
s.Equal("c", result)
// replace count <0, repository contains only one "/" with empty namespace
repository = "b/c"
namespace = ""
replaceCount = -1
result, err = replaceNamespace(repository, namespace, replaceCount, "")
s.Require().Nil(err)
s.Equal("c", result)
// replace count <0, repository contains more than one "/" with empty namespace
repository = "a/b/c"
namespace = ""
replaceCount = -1
result, err = replaceNamespace(repository, namespace, replaceCount, "")
s.Require().Nil(err)
s.Equal("c", result)
}
func TestStage(t *testing.T) {