Skip to content

Commit

Permalink
Add E2E test for revision incrementation with --directory repos
Browse files Browse the repository at this point in the history
- also for packages with slashes in the name
  • Loading branch information
JamesMcDermott committed Oct 18, 2024
1 parent a83a4bc commit 1ae60b4
Show file tree
Hide file tree
Showing 2 changed files with 111 additions and 21 deletions.
78 changes: 78 additions & 0 deletions test/e2e/e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -864,6 +864,84 @@ func (t *PorchSuite) TestProposeApprove(ctx context.Context) {
}
}

func (t *PorchSuite) TestSubfolderPackageRevisionIncrementation(ctx context.Context) {
const (
repository = "lifecycle"
subfolderRepository = "repo-in-subfolder"
subfolderDirectory = "randomRepoFolder"
normalPackageName = "test-package"
subfolderPackageName = "randomPackageFolder/test-package"
workspace = "workspace"
workspace2 = "workspace2"
)

// Register the repositories
t.RegisterMainGitRepositoryF(ctx, repository)
t.RegisterGitRepositoryWithDirectoryF(ctx, subfolderRepository, subfolderDirectory)

// Create a new package (via init)
subfolderPr := t.CreatePackageDraftF(ctx, repository, subfolderPackageName, workspace)
prInSubfolder := t.CreatePackageDraftF(ctx, subfolderRepository, normalPackageName, workspace)

// Propose and approve the package revisions
subfolderPr.Spec.Lifecycle = porchapi.PackageRevisionLifecycleProposed
prInSubfolder.Spec.Lifecycle = porchapi.PackageRevisionLifecycleProposed
t.UpdateF(ctx, subfolderPr)
t.UpdateF(ctx, prInSubfolder)

subfolderPr.Spec.Lifecycle = porchapi.PackageRevisionLifecyclePublished
prInSubfolder.Spec.Lifecycle = porchapi.PackageRevisionLifecyclePublished
subfolderPr = t.UpdateApprovalF(ctx, subfolderPr, metav1.UpdateOptions{})
prInSubfolder = t.UpdateApprovalF(ctx, prInSubfolder, metav1.UpdateOptions{})

assert.Equal(t, porchapi.PackageRevisionLifecyclePublished, subfolderPr.Spec.Lifecycle)
assert.Equal(t, "v1", subfolderPr.Spec.Revision)
assert.Equal(t, porchapi.PackageRevisionLifecyclePublished, prInSubfolder.Spec.Lifecycle)
assert.Equal(t, "v1", prInSubfolder.Spec.Revision)

// Create new package revisions via edit/copy
editedSubfolderPr := t.CreatePackageSkeleton(repository, subfolderPackageName, workspace2)
editedSubfolderPr.Spec.Tasks = []porchapi.Task{
{
Type: porchapi.TaskTypeEdit,
Edit: &porchapi.PackageEditTaskSpec{
Source: &porchapi.PackageRevisionRef{
Name: subfolderPr.Name,
},
},
},
}
t.CreateF(ctx, editedSubfolderPr)
editedPrInSubfolder := t.CreatePackageSkeleton(subfolderRepository, normalPackageName, workspace2)
editedPrInSubfolder.Spec.Tasks = []porchapi.Task{
{
Type: porchapi.TaskTypeEdit,
Edit: &porchapi.PackageEditTaskSpec{
Source: &porchapi.PackageRevisionRef{
Name: prInSubfolder.Name,
},
},
},
}
t.CreateF(ctx, editedPrInSubfolder)

// Propose and approve these package revisions as well
editedSubfolderPr.Spec.Lifecycle = porchapi.PackageRevisionLifecycleProposed
editedPrInSubfolder.Spec.Lifecycle = porchapi.PackageRevisionLifecycleProposed
t.UpdateF(ctx, editedSubfolderPr)
t.UpdateF(ctx, editedPrInSubfolder)

editedSubfolderPr.Spec.Lifecycle = porchapi.PackageRevisionLifecyclePublished
editedPrInSubfolder.Spec.Lifecycle = porchapi.PackageRevisionLifecyclePublished
editedSubfolderPr = t.UpdateApprovalF(ctx, editedSubfolderPr, metav1.UpdateOptions{})
editedPrInSubfolder = t.UpdateApprovalF(ctx, editedPrInSubfolder, metav1.UpdateOptions{})

assert.Equal(t, porchapi.PackageRevisionLifecyclePublished, editedSubfolderPr.Spec.Lifecycle)
assert.Equal(t, "v2", editedSubfolderPr.Spec.Revision)
assert.Equal(t, porchapi.PackageRevisionLifecyclePublished, editedPrInSubfolder.Spec.Lifecycle)
assert.Equal(t, "v2", editedPrInSubfolder.Spec.Revision)
}

func (t *PorchSuite) TestDeleteDraft(ctx context.Context) {
const (
repository = "delete-draft"
Expand Down
54 changes: 33 additions & 21 deletions test/e2e/suite_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,23 @@ func (p *TestSuiteWithGit) Initialize(ctx context.Context) {
p.gitConfig = p.CreateGitRepo()
}

func (p *TestSuiteWithGit) GitConfig(repoID string) GitConfig {
func (p *TestSuiteWithGit) GitConfig(name string) GitConfig {
repoID := p.Namespace + "-" + name
config := p.gitConfig
config.Repo = config.Repo + "/" + repoID
return config
}

func (t *TestSuiteWithGit) RegisterMainGitRepositoryF(ctx context.Context, name string, opts ...RepositoryOption) {
t.Helper()
repoID := t.Namespace + "-" + name
config := t.GitConfig(repoID)
config := t.GitConfig(name)
t.registerGitRepositoryFromConfigF(ctx, name, config, opts...)
}

func (t *TestSuiteWithGit) RegisterGitRepositoryWithDirectoryF(ctx context.Context, name string, directory string, opts ...RepositoryOption) {
t.Helper()
config := t.GitConfig(name)
config.Directory = directory
t.registerGitRepositoryFromConfigF(ctx, name, config, opts...)
}

Expand Down Expand Up @@ -213,7 +220,7 @@ func (t *TestSuite) registerGitRepositoryFromConfigF(ctx context.Context, name s
t.Cleanup(func() {
t.DeleteE(ctx, repository)
t.WaitUntilRepositoryDeleted(ctx, name, t.Namespace)
t.WaitUntilAllPackagesDeleted(ctx, name)
t.WaitUntilAllPackagesDeleted(ctx, name, t.Namespace)
})

// Make sure the repository is ready before we test to (hopefully)
Expand Down Expand Up @@ -249,9 +256,21 @@ func InNamespace(ns string) RepositoryOption {
}

// Creates an empty package draft by initializing an empty package
func (t *TestSuite) CreatePackageDraftF(ctx context.Context, repository, name, workspace string) *porchapi.PackageRevision {
func (t *TestSuite) CreatePackageDraftF(ctx context.Context, repository, packageName, workspace string) *porchapi.PackageRevision {
t.Helper()
pr := &porchapi.PackageRevision{
pr := t.CreatePackageSkeleton(repository, packageName, workspace)
pr.Spec.Tasks = []porchapi.Task{
{
Type: porchapi.TaskTypeInit,
Init: &porchapi.PackageInitTaskSpec{},
},
}
t.CreateF(ctx, pr)
return pr
}

func (t *TestSuite) CreatePackageSkeleton(repoName, packageName, workspace string) *porchapi.PackageRevision {
return &porchapi.PackageRevision{
TypeMeta: metav1.TypeMeta{
Kind: "PackageRevision",
APIVersion: porchapi.SchemeGroupVersion.String(),
Expand All @@ -260,19 +279,13 @@ func (t *TestSuite) CreatePackageDraftF(ctx context.Context, repository, name, w
Namespace: t.Namespace,
},
Spec: porchapi.PackageRevisionSpec{
PackageName: name,
PackageName: packageName,
WorkspaceName: porchapi.WorkspaceName(workspace),
RepositoryName: repository,
Tasks: []porchapi.Task{
{
Type: porchapi.TaskTypeInit,
Init: &porchapi.PackageInitTaskSpec{},
},
},
RepositoryName: repoName,
// empty tasks list - set them as needed in the particular usage
Tasks: []porchapi.Task{},
},
}
t.CreateF(ctx, pr)
return pr
}

func (t *TestSuite) MustExist(ctx context.Context, key client.ObjectKey, obj client.Object) {
Expand Down Expand Up @@ -365,7 +378,7 @@ func (t *TestSuite) WaitUntilRepositoryDeleted(ctx context.Context, name, namesp
}
}

func (t *TestSuite) WaitUntilAllPackagesDeleted(ctx context.Context, repoName string) {
func (t *TestSuite) WaitUntilAllPackagesDeleted(ctx context.Context, repoName string, namespace string) {
t.Helper()
err := wait.PollUntilContextTimeout(ctx, time.Second, 60*time.Second, true, func(ctx context.Context) (done bool, err error) {
t.Helper()
Expand All @@ -375,20 +388,19 @@ func (t *TestSuite) WaitUntilAllPackagesDeleted(ctx context.Context, repoName st
return false, nil
}
for _, pkgRev := range pkgRevList.Items {
if strings.HasPrefix(fmt.Sprintf("%s-", pkgRev.Name), repoName) {
if pkgRev.Namespace == namespace && strings.HasPrefix(fmt.Sprintf("%s-", pkgRev.Name), repoName) {
t.Logf("Found package %s from repo %s", pkgRev.Name, repoName)
return false, nil
}
}

var internalPkgRevList internalapi.PackageRevList
if err := t.Client.List(ctx, &internalPkgRevList); err != nil {
t.Logf("error list internal packages: %v", err)
return false, nil
}
for _, internalPkgRev := range internalPkgRevList.Items {
if strings.HasPrefix(fmt.Sprintf("%s-", internalPkgRev.Name), repoName) {
t.Logf("Found internalPkg %s from repo %s", internalPkgRev.Name, repoName)
if internalPkgRev.Namespace == namespace && strings.HasPrefix(fmt.Sprintf("%s-", internalPkgRev.Name), repoName) {
t.Logf("Found internalPkg %s/%s from repo %s", internalPkgRev.Namespace, internalPkgRev.Name, repoName)
return false, nil
}
}
Expand Down

0 comments on commit 1ae60b4

Please sign in to comment.