@@ -18,6 +18,7 @@ package source
1818
1919import (
2020 "context"
21+ "errors"
2122 "fmt"
2223 "testing"
2324 "time"
@@ -34,6 +35,7 @@ import (
3435 imagev1 "github.com/fluxcd/image-automation-controller/api/v1beta2"
3536 "github.com/fluxcd/image-automation-controller/internal/testutil"
3637 "github.com/fluxcd/pkg/apis/meta"
38+ "github.com/fluxcd/pkg/auth/github"
3739 "github.com/fluxcd/pkg/git"
3840 sourcev1 "github.com/fluxcd/source-controller/api/v1"
3941)
@@ -141,49 +143,127 @@ func Test_getAuthOpts(t *testing.T) {
141143func Test_getAuthOpts_providerAuth (t * testing.T ) {
142144 tests := []struct {
143145 name string
146+ url string
147+ secret * corev1.Secret
144148 beforeFunc func (obj * sourcev1.GitRepository )
145149 wantProviderOptsName string
150+ wantErr error
146151 }{
147152 {
148153 name : "azure provider" ,
154+ url : "https://dev.azure.com/foo/bar/_git/baz" ,
149155 beforeFunc : func (obj * sourcev1.GitRepository ) {
150156 obj .Spec .Provider = sourcev1 .GitProviderAzure
151157 },
152158 wantProviderOptsName : sourcev1 .GitProviderAzure ,
153159 },
160+ {
161+ name : "github provider with no secret ref" ,
162+ url : "https://github.com/org/repo.git" ,
163+ beforeFunc : func (obj * sourcev1.GitRepository ) {
164+ obj .Spec .Provider = sourcev1 .GitProviderGitHub
165+ },
166+ wantProviderOptsName : sourcev1 .GitProviderGitHub ,
167+ wantErr : errors .New ("secretRef with github app data must be specified when provider is set to github: invalid source configuration" ),
168+ },
169+ {
170+ name : "github provider with secret ref that does not exist" ,
171+ url : "https://github.com/org/repo.git" ,
172+ beforeFunc : func (obj * sourcev1.GitRepository ) {
173+ obj .Spec .Provider = sourcev1 .GitProviderGitHub
174+ obj .Spec .SecretRef = & meta.LocalObjectReference {
175+ Name : "githubAppSecret" ,
176+ }
177+ },
178+ wantErr : errors .New ("failed to get auth secret '/githubAppSecret': secrets \" githubAppSecret\" not found" ),
179+ },
180+ {
181+ name : "github provider with github app data in secret" ,
182+ url : "https://example.com/org/repo" ,
183+ secret : & corev1.Secret {
184+ ObjectMeta : metav1.ObjectMeta {
185+ Name : "githubAppSecret" ,
186+ },
187+ Data : map [string ][]byte {
188+ github .AppIDKey : []byte ("123" ),
189+ github .AppInstallationIDKey : []byte ("456" ),
190+ github .AppPrivateKey : []byte ("abc" ),
191+ },
192+ },
193+ beforeFunc : func (obj * sourcev1.GitRepository ) {
194+ obj .Spec .Provider = sourcev1 .GitProviderGitHub
195+ obj .Spec .SecretRef = & meta.LocalObjectReference {
196+ Name : "githubAppSecret" ,
197+ }
198+ },
199+ wantProviderOptsName : sourcev1 .GitProviderGitHub ,
200+ },
201+ {
202+ name : "generic provider with github app data in secret" ,
203+ url : "https://example.com/org/repo" ,
204+ secret : & corev1.Secret {
205+ ObjectMeta : metav1.ObjectMeta {
206+ Name : "githubAppSecret" ,
207+ },
208+ Data : map [string ][]byte {
209+ github .AppIDKey : []byte ("123" ),
210+ },
211+ },
212+ beforeFunc : func (obj * sourcev1.GitRepository ) {
213+ obj .Spec .Provider = sourcev1 .GitProviderGeneric
214+ obj .Spec .SecretRef = & meta.LocalObjectReference {
215+ Name : "githubAppSecret" ,
216+ }
217+ },
218+ wantErr : errors .New ("secretRef '/githubAppSecret' has github app data but provider is not set to github: invalid source configuration" ),
219+ },
154220 {
155221 name : "generic provider" ,
222+ url : "https://example.com/org/repo" ,
156223 beforeFunc : func (obj * sourcev1.GitRepository ) {
157224 obj .Spec .Provider = sourcev1 .GitProviderGeneric
158225 },
159226 },
160227 {
161228 name : "no provider" ,
229+ url : "https://example.com/org/repo" ,
162230 },
163231 }
164232
165233 for _ , tt := range tests {
166234 t .Run (tt .name , func (t * testing.T ) {
167235 g := NewWithT (t )
236+ clientBuilder := fakeclient .NewClientBuilder ().
237+ WithScheme (scheme .Scheme ).
238+ WithStatusSubresource (& sourcev1.GitRepository {})
168239
240+ if tt .secret != nil {
241+ clientBuilder .WithObjects (tt .secret )
242+ }
243+ c := clientBuilder .Build ()
169244 obj := & sourcev1.GitRepository {
170245 Spec : sourcev1.GitRepositorySpec {
171- URL : "https://dev.azure.com/foo/bar/_git/baz" ,
246+ URL : tt . url ,
172247 },
173248 }
174249
175250 if tt .beforeFunc != nil {
176251 tt .beforeFunc (obj )
177252 }
178- opts , err := getAuthOpts (context .TODO (), nil , obj )
253+ opts , err := getAuthOpts (context .TODO (), c , obj )
179254
180- g .Expect (err ).ToNot (HaveOccurred ())
181- g .Expect (opts ).ToNot (BeNil ())
182- if tt .wantProviderOptsName != "" {
183- g .Expect (opts .ProviderOpts ).ToNot (BeNil ())
184- g .Expect (opts .ProviderOpts .Name ).To (Equal (tt .wantProviderOptsName ))
255+ if tt .wantErr != nil {
256+ g .Expect (err ).To (HaveOccurred ())
257+ g .Expect (err .Error ()).To (ContainSubstring (tt .wantErr .Error ()))
185258 } else {
186- g .Expect (opts .ProviderOpts ).To (BeNil ())
259+ g .Expect (err ).ToNot (HaveOccurred ())
260+ g .Expect (opts ).ToNot (BeNil ())
261+ if tt .wantProviderOptsName != "" {
262+ g .Expect (opts .ProviderOpts ).ToNot (BeNil ())
263+ g .Expect (opts .ProviderOpts .Name ).To (Equal (tt .wantProviderOptsName ))
264+ } else {
265+ g .Expect (opts .ProviderOpts ).To (BeNil ())
266+ }
187267 }
188268 })
189269 }
0 commit comments