diff --git a/porch/pkg/engine/engine_test.go b/porch/pkg/engine/engine_test.go index e543d4e86..a2fa22242 100644 --- a/porch/pkg/engine/engine_test.go +++ b/porch/pkg/engine/engine_test.go @@ -315,451 +315,3 @@ func TestSomething(t *testing.T) { }) } } - -func TestEnsureSameOrigin(t *testing.T) { - testCases := map[string]struct { - obj *api.PackageRevision - existingRevs []repository.PackageRevision - repoRevs []repository.PackageRevision - hasSameOrigin bool - expectedErr error - }{ - "init task, no existing packagerevisions": { - obj: &api.PackageRevision{ - Spec: api.PackageRevisionSpec{ - Tasks: []api.Task{ - { - Type: api.TaskTypeInit, - Init: &api.PackageInitTaskSpec{}, - }, - }, - }, - }, - existingRevs: []repository.PackageRevision{}, - hasSameOrigin: true, - expectedErr: nil, - }, - "init task, existing packagerevision with first init task": { - obj: &api.PackageRevision{ - Spec: api.PackageRevisionSpec{ - Tasks: []api.Task{ - { - Type: api.TaskTypeInit, - Init: &api.PackageInitTaskSpec{}, - }, - }, - }, - }, - existingRevs: toFakeRepoPkgRevSlice( - api.Task{ - Type: api.TaskTypeInit, - Init: &api.PackageInitTaskSpec{}, - }, - ), - hasSameOrigin: true, - expectedErr: nil, - }, - "init task, existing packagerevision with another first task": { - obj: &api.PackageRevision{ - Spec: api.PackageRevisionSpec{ - Tasks: []api.Task{ - { - Type: api.TaskTypeInit, - Init: &api.PackageInitTaskSpec{}, - }, - }, - }, - }, - existingRevs: toFakeRepoPkgRevSlice( - api.Task{ - Type: api.TaskTypeClone, - }, - ), - hasSameOrigin: false, - expectedErr: nil, - }, - "clone task, no existing packagerevisions": { - obj: &api.PackageRevision{ - Spec: api.PackageRevisionSpec{ - Tasks: []api.Task{ - { - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{}, - }, - }, - }, - }, - existingRevs: []repository.PackageRevision{}, - hasSameOrigin: true, - expectedErr: nil, - }, - "clone task, existing packagerevision with different first task": { - obj: &api.PackageRevision{ - Spec: api.PackageRevisionSpec{ - Tasks: []api.Task{ - { - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{}, - }, - }, - }, - }, - existingRevs: toFakeRepoPkgRevSlice( - api.Task{ - Type: api.TaskTypeInit, - }, - ), - hasSameOrigin: false, - expectedErr: nil, - }, - "clone task git, existing packagerevision with different source type": { - obj: &api.PackageRevision{ - Spec: api.PackageRevisionSpec{ - Tasks: []api.Task{ - { - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{ - Upstream: api.UpstreamPackage{ - Type: api.RepositoryTypeGit, - Git: &api.GitPackage{ - Repo: "https://github.com/GoogleContainerTools/kpt", - Ref: "main", - Directory: "/", - }, - }, - }, - }, - }, - }, - }, - existingRevs: toFakeRepoPkgRevSlice( - api.Task{ - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{ - Upstream: api.UpstreamPackage{ - Type: api.RepositoryTypeOCI, - }, - }, - }, - ), - hasSameOrigin: false, - expectedErr: nil, - }, - "clone task git, existing packagerevision with different repo": { - obj: &api.PackageRevision{ - Spec: api.PackageRevisionSpec{ - Tasks: []api.Task{ - { - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{ - Upstream: api.UpstreamPackage{ - Type: api.RepositoryTypeGit, - Git: &api.GitPackage{ - Repo: "https://github.com/GoogleContainerTools/kpt", - Ref: "main", - Directory: "/", - }, - }, - }, - }, - }, - }, - }, - existingRevs: toFakeRepoPkgRevSlice( - api.Task{ - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{ - Upstream: api.UpstreamPackage{ - Type: api.RepositoryTypeGit, - Git: &api.GitPackage{ - Repo: "https://github.com/GoogleContainerTools/somethingelse", - Ref: "main", - Directory: "/", - }, - }, - }, - }, - ), - hasSameOrigin: false, - expectedErr: nil, - }, - "clone task git, existing packagerevision with same repo": { - obj: &api.PackageRevision{ - Spec: api.PackageRevisionSpec{ - Tasks: []api.Task{ - { - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{ - Upstream: api.UpstreamPackage{ - Type: api.RepositoryTypeGit, - Git: &api.GitPackage{ - Repo: "https://github.com/GoogleContainerTools/kpt", - Ref: "main", - Directory: "/", - }, - }, - }, - }, - }, - }, - }, - existingRevs: toFakeRepoPkgRevSlice( - api.Task{ - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{ - Upstream: api.UpstreamPackage{ - Type: api.RepositoryTypeGit, - Git: &api.GitPackage{ - Repo: "https://github.com/GoogleContainerTools/kpt", - Ref: "main", - Directory: "/", - }, - }, - }, - }, - ), - hasSameOrigin: true, - expectedErr: nil, - }, - "clone task oci, existing packagerevision with different image": { - obj: &api.PackageRevision{ - Spec: api.PackageRevisionSpec{ - Tasks: []api.Task{ - { - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{ - Upstream: api.UpstreamPackage{ - Type: api.RepositoryTypeOCI, - Oci: &api.OciPackage{ - Image: "gcr.io/kpt-dev/image", - }, - }, - }, - }, - }, - }, - }, - existingRevs: toFakeRepoPkgRevSlice( - api.Task{ - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{ - Upstream: api.UpstreamPackage{ - Type: api.RepositoryTypeOCI, - Oci: &api.OciPackage{ - Image: "gcr.io/kpt-dev/otherimage", - }, - }, - }, - }, - ), - hasSameOrigin: false, - expectedErr: nil, - }, - "clone task oci, existing packagerevision with same image": { - obj: &api.PackageRevision{ - Spec: api.PackageRevisionSpec{ - Tasks: []api.Task{ - { - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{ - Upstream: api.UpstreamPackage{ - Type: api.RepositoryTypeOCI, - Oci: &api.OciPackage{ - Image: "gcr.io/kpt-dev/image:foo", - }, - }, - }, - }, - }, - }, - }, - existingRevs: toFakeRepoPkgRevSlice( - api.Task{ - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{ - Upstream: api.UpstreamPackage{ - Type: api.RepositoryTypeOCI, - Oci: &api.OciPackage{ - Image: "gcr.io/kpt-dev/image:bar", - }, - }, - }, - }, - ), - hasSameOrigin: true, - expectedErr: nil, - }, - "clone task porch, existing packagerevision with different source type": { - obj: &api.PackageRevision{ - Spec: api.PackageRevisionSpec{ - Tasks: []api.Task{ - { - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{ - Upstream: api.UpstreamPackage{ - UpstreamRef: &api.PackageRevisionRef{ - Name: "foo-12345", - }, - }, - }, - }, - }, - }, - }, - existingRevs: toFakeRepoPkgRevSlice( - api.Task{ - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{ - Upstream: api.UpstreamPackage{ - Type: api.RepositoryTypeOCI, - Oci: &api.OciPackage{ - Image: "gcr.io/kpt-dev/image:bar", - }, - }, - }, - }, - ), - hasSameOrigin: false, - expectedErr: nil, - }, - "clone task porch, existing packagerevision with upstream ref to different package": { - obj: &api.PackageRevision{ - Spec: api.PackageRevisionSpec{ - Tasks: []api.Task{ - { - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{ - Upstream: api.UpstreamPackage{ - UpstreamRef: &api.PackageRevisionRef{ - Name: "foo-12345", - }, - }, - }, - }, - }, - }, - }, - existingRevs: toFakeRepoPkgRevSlice( - api.Task{ - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{ - Upstream: api.UpstreamPackage{ - UpstreamRef: &api.PackageRevisionRef{ - Name: "bar-12345", - }, - }, - }, - }, - ), - hasSameOrigin: false, - expectedErr: nil, - }, - "clone task porch, existing packagerevision with upstream ref to same package": { - obj: &api.PackageRevision{ - Spec: api.PackageRevisionSpec{ - Tasks: []api.Task{ - { - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{ - Upstream: api.UpstreamPackage{ - UpstreamRef: &api.PackageRevisionRef{ - Name: "foo-12345", - }, - }, - }, - }, - }, - }, - }, - existingRevs: toFakeRepoPkgRevSlice( - api.Task{ - Type: api.TaskTypeClone, - Clone: &api.PackageCloneTaskSpec{ - Upstream: api.UpstreamPackage{ - UpstreamRef: &api.PackageRevisionRef{ - Name: "foo-67890", - }, - }, - }, - }, - ), - repoRevs: []repository.PackageRevision{ - &fake.PackageRevision{ - Name: "foo-12345", - PackageRevisionKey: repository.PackageRevisionKey{ - Repository: "foo", - Package: "pkg", - }, - }, - &fake.PackageRevision{ - Name: "foo-67890", - PackageRevisionKey: repository.PackageRevisionKey{ - Repository: "foo", - Package: "pkg", - }, - }, - }, - hasSameOrigin: true, - expectedErr: nil, - }, - "edit task, existing packagerevision": { - obj: &api.PackageRevision{ - Spec: api.PackageRevisionSpec{ - Tasks: []api.Task{ - { - Type: api.TaskTypeEdit, - Edit: &api.PackageEditTaskSpec{ - Source: &api.PackageRevisionRef{ - Name: "foo-12345", - }, - }, - }, - }, - }, - }, - existingRevs: toFakeRepoPkgRevSlice( - api.Task{ - Type: api.TaskTypeInit, - Init: &api.PackageInitTaskSpec{}, - }, - ), - hasSameOrigin: true, - expectedErr: nil, - }, - } - - for tn := range testCases { - tc := testCases[tn] - t.Run(tn, func(t *testing.T) { - ctx := context.TODO() - repo := &fake.Repository{ - PackageRevisions: tc.repoRevs, - } - sameOrigin, err := ensureSameOrigin(ctx, repo, tc.obj, tc.existingRevs) - if tc.expectedErr != nil { - if err == nil { - t.Error("expected error, but didn't get one") - } - if err != tc.expectedErr { - t.Errorf("expected error %v, but got %v", tc.expectedErr, err) - } - } - - if sameOrigin != tc.hasSameOrigin { - t.Errorf("expected sameOrigin %t, but got %t", tc.hasSameOrigin, sameOrigin) - } - }) - } -} - -func toFakeRepoPkgRevSlice(task api.Task) []repository.PackageRevision { - return []repository.PackageRevision{ - &fake.PackageRevision{ - PackageRevision: &api.PackageRevision{ - Spec: api.PackageRevisionSpec{ - Tasks: []api.Task{task}, - }, - }, - }, - } -}