@@ -18,7 +18,9 @@ package controllers
1818
1919import (
2020 "context"
21+ "crypto/tls"
2122 "fmt"
23+ "net/http"
2224 "net/url"
2325 "os"
2426 "path"
@@ -30,6 +32,8 @@ import (
3032 "github.com/go-git/go-git/v5/config"
3133 "github.com/go-git/go-git/v5/plumbing"
3234 "github.com/go-git/go-git/v5/plumbing/object"
35+ "github.com/go-git/go-git/v5/plumbing/transport/client"
36+ httptransport "github.com/go-git/go-git/v5/plumbing/transport/http"
3337 "github.com/go-git/go-git/v5/storage/memory"
3438 . "github.com/onsi/ginkgo"
3539 . "github.com/onsi/ginkgo/extensions/table"
@@ -40,6 +44,7 @@ import (
4044
4145 "github.com/fluxcd/pkg/gittestserver"
4246
47+ "github.com/fluxcd/pkg/apis/meta"
4348 sourcev1 "github.com/fluxcd/source-controller/api/v1beta1"
4449)
4550
@@ -65,6 +70,18 @@ var _ = Describe("GitRepositoryReconciler", func() {
6570 err = k8sClient .Create (context .Background (), namespace )
6671 Expect (err ).NotTo (HaveOccurred (), "failed to create test namespace" )
6772
73+ cert := corev1.Secret {
74+ ObjectMeta : metav1.ObjectMeta {
75+ Name : "cert" ,
76+ Namespace : namespace .Name ,
77+ },
78+ Data : map [string ][]byte {
79+ "caFile" : exampleCA ,
80+ },
81+ }
82+ err = k8sClient .Create (context .Background (), & cert )
83+ Expect (err ).NotTo (HaveOccurred ())
84+
6885 gitServer , err = gittestserver .NewTempGitServer ()
6986 Expect (err ).NotTo (HaveOccurred ())
7087 gitServer .AutoCreate ()
@@ -87,6 +104,7 @@ var _ = Describe("GitRepositoryReconciler", func() {
87104 expectMessage string
88105 expectRevision string
89106
107+ secretRef * meta.LocalObjectReference
90108 gitImplementation string
91109 }
92110
@@ -274,6 +292,55 @@ var _ = Describe("GitRepositoryReconciler", func() {
274292 Expect (err ).NotTo (HaveOccurred ())
275293 u .Path = path .Join (u .Path , fmt .Sprintf ("repository-%s.git" , randStringRunes (5 )))
276294
295+ var transport = httptransport .NewClient (& http.Client {
296+ Transport : & http.Transport {
297+ TLSClientConfig : & tls.Config {InsecureSkipVerify : true },
298+ },
299+ })
300+ client .InstallProtocol ("https" , transport )
301+
302+ fs := memfs .New ()
303+ gitrepo , err := git .Init (memory .NewStorage (), fs )
304+ Expect (err ).NotTo (HaveOccurred ())
305+
306+ wt , err := gitrepo .Worktree ()
307+ Expect (err ).NotTo (HaveOccurred ())
308+
309+ ff , _ := fs .Create ("fixture" )
310+ _ = ff .Close ()
311+ _ , err = wt .Add (fs .Join ("fixture" ))
312+ Expect (err ).NotTo (HaveOccurred ())
313+
314+ commit , err := wt .Commit ("Sample" , & git.CommitOptions {Author : & object.Signature {
315+ Name : "John Doe" ,
316+ 317+ When : time .Now (),
318+ }})
319+ Expect (err ).NotTo (HaveOccurred ())
320+
321+ gitrepo .Worktree ()
322+
323+ for _ , ref := range t .createRefs {
324+ hRef := plumbing .NewHashReference (plumbing .ReferenceName (ref ), commit )
325+ err = gitrepo .Storer .SetReference (hRef )
326+ Expect (err ).NotTo (HaveOccurred ())
327+ }
328+
329+ remote , err := gitrepo .CreateRemote (& config.RemoteConfig {
330+ Name : "origin" ,
331+ URLs : []string {u .String ()},
332+ })
333+ Expect (err ).NotTo (HaveOccurred ())
334+
335+ err = remote .Push (& git.PushOptions {
336+ RefSpecs : []config.RefSpec {"refs/heads/*:refs/heads/*" , "refs/tags/*:refs/tags/*" },
337+ })
338+ Expect (err ).NotTo (HaveOccurred ())
339+
340+ t .reference .Commit = strings .Replace (t .reference .Commit , "<commit>" , commit .String (), 1 )
341+
342+ client .InstallProtocol ("https" , httptransport .DefaultClient )
343+
277344 key := types.NamespacedName {
278345 Name : fmt .Sprintf ("git-ref-test-%s" , randStringRunes (5 )),
279346 Namespace : namespace .Name ,
@@ -288,6 +355,7 @@ var _ = Describe("GitRepositoryReconciler", func() {
288355 Interval : metav1.Duration {Duration : indexInterval },
289356 Reference : t .reference ,
290357 GitImplementation : t .gitImplementation ,
358+ SecretRef : t .secretRef ,
291359 },
292360 }
293361 Expect (k8sClient .Create (context .Background (), created )).Should (Succeed ())
@@ -316,13 +384,22 @@ var _ = Describe("GitRepositoryReconciler", func() {
316384 expectStatus : metav1 .ConditionFalse ,
317385 expectMessage : "x509: certificate signed by unknown authority" ,
318386 }),
319- Entry ("self signed v2" , refTestCase {
387+ Entry ("self signed v2 without CA " , refTestCase {
320388 reference : & sourcev1.GitRepositoryRef {Branch : "main" },
321389 waitForReason : sourcev1 .GitOperationFailedReason ,
322390 expectStatus : metav1 .ConditionFalse ,
323391 expectMessage : "error: user rejected certificate" ,
324392 gitImplementation : sourcev1 .LibGit2Implementation ,
325393 }),
394+ Entry ("self signed v2 with CA" , refTestCase {
395+ reference : & sourcev1.GitRepositoryRef {Branch : "some-branch" },
396+ createRefs : []string {"refs/heads/some-branch" },
397+ waitForReason : sourcev1 .GitOperationSucceedReason ,
398+ expectStatus : metav1 .ConditionTrue ,
399+ expectRevision : "some-branch" ,
400+ secretRef : & meta.LocalObjectReference {Name : "cert" },
401+ gitImplementation : sourcev1 .LibGit2Implementation ,
402+ }),
326403 )
327404 })
328405})
0 commit comments