@@ -23,39 +23,15 @@ import (
23
23
"github.com/GoogleContainerTools/kpt/porch/api/porchconfig/v1alpha1"
24
24
"github.com/GoogleContainerTools/kpt/porch/pkg/git"
25
25
"github.com/GoogleContainerTools/kpt/porch/pkg/repository"
26
+ gogit "github.com/go-git/go-git/v5"
26
27
"github.com/google/go-cmp/cmp"
27
28
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
28
29
)
29
30
30
31
func TestLatestPackages (t * testing.T ) {
31
- tempdir := t .TempDir ()
32
- tarfile := filepath .Join (".." , "git" , "testdata" , "nested-repository.tar" )
33
- _ , address := git .ServeGitRepository (t , tarfile , tempdir )
34
-
35
32
ctx := context .Background ()
36
-
37
- cache := NewCache (t .TempDir (), CacheOptions {})
38
- cachedGit , err := cache .OpenRepository (ctx , & v1alpha1.Repository {
39
- TypeMeta : metav1.TypeMeta {
40
- Kind : v1alpha1 .RepositoryGVK .Kind ,
41
- APIVersion : v1alpha1 .RepositoryGVK .GroupVersion ().Identifier (),
42
- },
43
- ObjectMeta : metav1.ObjectMeta {
44
- Name : "nested" ,
45
- Namespace : "default" ,
46
- },
47
- Spec : v1alpha1.RepositorySpec {
48
- Deployment : false ,
49
- Type : v1alpha1 .RepositoryTypeGit ,
50
- Content : v1alpha1 .RepositoryContentPackage ,
51
- Git : & v1alpha1.GitRepository {
52
- Repo : address ,
53
- },
54
- },
55
- })
56
- if err != nil {
57
- t .Fatalf ("OpenRepository(%q) of %q failed; %v" , address , tarfile , err )
58
- }
33
+ tarfile := filepath .Join (".." , "git" , "testdata" , "nested-repository.tar" )
34
+ _ , cachedGit := openRepositoryFromArchive (t , ctx , tarfile , "nested" )
59
35
60
36
wantLatest := map [string ]string {
61
37
"sample" : "v2" ,
@@ -93,3 +69,78 @@ func TestLatestPackages(t *testing.T) {
93
69
t .Errorf ("Latest package revisions differ (-want,+got): %s" , cmp .Diff (wantLatest , gotLatest ))
94
70
}
95
71
}
72
+
73
+ func TestPublishedLatest (t * testing.T ) {
74
+ ctx := context .Background ()
75
+ tarfile := filepath .Join (".." , "git" , "testdata" , "nested-repository.tar" )
76
+ _ , cached := openRepositoryFromArchive (t , ctx , tarfile , "publish-test" )
77
+
78
+ revisions , err := cached .ListPackageRevisions (ctx , repository.ListPackageRevisionFilter {
79
+ Package : "catalog/gcp/bucket" ,
80
+ Revision : "v2" ,
81
+ })
82
+ if err != nil {
83
+ t .Fatalf ("ListPackageRevisions failed: %v" , err )
84
+ }
85
+
86
+ // Expect a single result
87
+ if got , want := len (revisions ), 1 ; got != want {
88
+ t .Fatalf ("ListPackageRevisions returned %d packages; want %d" , got , want )
89
+ }
90
+
91
+ bucket := revisions [0 ]
92
+ // Expect draft package
93
+ if got , want := bucket .Lifecycle (), api .PackageRevisionLifecycleDraft ; got != want {
94
+ t .Fatalf ("Bucket package lifecycle: got %s, want %s" , got , want )
95
+ }
96
+
97
+ update , err := cached .UpdatePackage (ctx , bucket )
98
+ if err != nil {
99
+ t .Fatalf ("UpdatePackaeg(%s) failed: %v" , bucket .Key (), err )
100
+ }
101
+ if err := update .UpdateLifecycle (ctx , api .PackageRevisionLifecyclePublished ); err != nil {
102
+ t .Fatalf ("UpdateLifecycle failed; %v" , err )
103
+ }
104
+ closed , err := update .Close (ctx )
105
+ if err != nil {
106
+ t .Fatalf ("Close failed: %v" , err )
107
+ }
108
+ resource := closed .GetPackageRevision ()
109
+ if got , ok := resource .Labels [api .LatestPackageRevisionKey ]; ! ok {
110
+ t .Errorf ("Label %s not found as expected" , api .LatestPackageRevisionKey )
111
+ } else if want := api .LatestPackageRevisionValue ; got != want {
112
+ t .Errorf ("Latest label: got %s, want %s" , got , want )
113
+ }
114
+ }
115
+
116
+ func openRepositoryFromArchive (t * testing.T , ctx context.Context , tarfile , name string ) (* gogit.Repository , * cachedRepository ) {
117
+ t .Helper ()
118
+
119
+ tempdir := t .TempDir ()
120
+ repo , address := git .ServeGitRepository (t , tarfile , tempdir )
121
+
122
+ cache := NewCache (t .TempDir (), CacheOptions {})
123
+ cachedGit , err := cache .OpenRepository (ctx , & v1alpha1.Repository {
124
+ TypeMeta : metav1.TypeMeta {
125
+ Kind : v1alpha1 .RepositoryGVK .Kind ,
126
+ APIVersion : v1alpha1 .RepositoryGVK .GroupVersion ().Identifier (),
127
+ },
128
+ ObjectMeta : metav1.ObjectMeta {
129
+ Name : name ,
130
+ Namespace : "default" ,
131
+ },
132
+ Spec : v1alpha1.RepositorySpec {
133
+ Deployment : false ,
134
+ Type : v1alpha1 .RepositoryTypeGit ,
135
+ Content : v1alpha1 .RepositoryContentPackage ,
136
+ Git : & v1alpha1.GitRepository {
137
+ Repo : address ,
138
+ },
139
+ },
140
+ })
141
+ if err != nil {
142
+ t .Fatalf ("OpenRepository(%q) of %q failed; %v" , address , tarfile , err )
143
+ }
144
+
145
+ return repo , cachedGit
146
+ }
0 commit comments