@@ -32,6 +32,7 @@ import (
32
32
"github.com/darkowlzz/controller-check/status"
33
33
. "github.com/onsi/gomega"
34
34
corev1 "k8s.io/api/core/v1"
35
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
35
36
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
36
37
"k8s.io/client-go/tools/record"
37
38
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -50,6 +51,95 @@ import (
50
51
sreconcile "github.com/fluxcd/source-controller/internal/reconcile"
51
52
)
52
53
54
+ func TestHelmChartReconciler_Reconcile (t * testing.T ) {
55
+ g := NewWithT (t )
56
+
57
+ const (
58
+ chartName = "helmchart"
59
+ chartVersion = "0.2.0"
60
+ chartPath = "testdata/charts/helmchart"
61
+ )
62
+
63
+ server , err := helmtestserver .NewTempHelmServer ()
64
+ g .Expect (err ).NotTo (HaveOccurred ())
65
+ defer os .RemoveAll (server .Root ())
66
+
67
+ g .Expect (server .PackageChartWithVersion (chartPath , chartVersion )).To (Succeed ())
68
+ g .Expect (server .GenerateIndex ()).To (Succeed ())
69
+
70
+ server .Start ()
71
+ defer server .Stop ()
72
+
73
+ ns , err := testEnv .CreateNamespace (ctx , "helmchart" )
74
+ g .Expect (err ).ToNot (HaveOccurred ())
75
+ defer func () { g .Expect (testEnv .Delete (ctx , ns )).To (Succeed ()) }()
76
+
77
+ repository := & sourcev1.HelmRepository {
78
+ ObjectMeta : metav1.ObjectMeta {
79
+ GenerateName : "helmrepository-" ,
80
+ Namespace : ns .Name ,
81
+ },
82
+ Spec : sourcev1.HelmRepositorySpec {
83
+ URL : server .URL (),
84
+ },
85
+ }
86
+ g .Expect (testEnv .CreateAndWait (ctx , repository )).To (Succeed ())
87
+
88
+ obj := & sourcev1.HelmChart {
89
+ ObjectMeta : metav1.ObjectMeta {
90
+ GenerateName : "helmrepository-reconcile-" ,
91
+ Namespace : ns .Name ,
92
+ },
93
+ Spec : sourcev1.HelmChartSpec {
94
+ Chart : chartName ,
95
+ Version : chartVersion ,
96
+ SourceRef : sourcev1.LocalHelmChartSourceReference {
97
+ Kind : sourcev1 .HelmRepositoryKind ,
98
+ Name : repository .Name ,
99
+ },
100
+ },
101
+ }
102
+ g .Expect (testEnv .Create (ctx , obj )).To (Succeed ())
103
+
104
+ key := client.ObjectKey {Name : obj .Name , Namespace : obj .Namespace }
105
+
106
+ // Wait for finalizer to be set
107
+ g .Eventually (func () bool {
108
+ if err := testEnv .Get (ctx , key , obj ); err != nil {
109
+ return false
110
+ }
111
+ return len (obj .Finalizers ) > 0
112
+ }, timeout ).Should (BeTrue ())
113
+
114
+ // Wait for HelmChart to be Ready
115
+ g .Eventually (func () bool {
116
+ if err := testEnv .Get (ctx , key , obj ); err != nil {
117
+ return false
118
+ }
119
+ if ! conditions .IsReady (obj ) || obj .Status .Artifact == nil {
120
+ return false
121
+ }
122
+ readyCondition := conditions .Get (obj , meta .ReadyCondition )
123
+ return obj .Generation == readyCondition .ObservedGeneration &&
124
+ obj .Generation == obj .Status .ObservedGeneration
125
+ }, timeout ).Should (BeTrue ())
126
+
127
+ // Check if the object status is valid.
128
+ condns := & status.Conditions {NegativePolarity : helmChartReadyDepsNegative }
129
+ checker := status .NewChecker (testEnv .Client , testEnv .GetScheme (), condns )
130
+ checker .CheckErr (ctx , obj )
131
+
132
+ g .Expect (testEnv .Delete (ctx , obj )).To (Succeed ())
133
+
134
+ // Wait for HelmChart to be deleted
135
+ g .Eventually (func () bool {
136
+ if err := testEnv .Get (ctx , key , obj ); err != nil {
137
+ return apierrors .IsNotFound (err )
138
+ }
139
+ return false
140
+ }, timeout ).Should (BeTrue ())
141
+ }
142
+
53
143
func TestHelmChartReconciler_reconcileStorage (t * testing.T ) {
54
144
tests := []struct {
55
145
name string
0 commit comments