Skip to content

Commit 21a7dfe

Browse files
committed
controllers: HelmChart Reconcile test
Signed-off-by: Hidde Beydals <[email protected]>
1 parent fb45032 commit 21a7dfe

File tree

2 files changed

+100
-0
lines changed

2 files changed

+100
-0
lines changed

controllers/helmchart_controller_test.go

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
"github.com/darkowlzz/controller-check/status"
3333
. "github.com/onsi/gomega"
3434
corev1 "k8s.io/api/core/v1"
35+
apierrors "k8s.io/apimachinery/pkg/api/errors"
3536
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3637
"k8s.io/client-go/tools/record"
3738
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -50,6 +51,95 @@ import (
5051
sreconcile "github.com/fluxcd/source-controller/internal/reconcile"
5152
)
5253

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+
53143
func TestHelmChartReconciler_reconcileStorage(t *testing.T) {
54144
tests := []struct {
55145
name string

controllers/suite_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,16 @@ func TestMain(m *testing.M) {
126126
panic(fmt.Sprintf("Failed to start HelmRepositoryReconciler: %v", err))
127127
}
128128

129+
if err := (&HelmChartReconciler{
130+
Client: testEnv,
131+
EventRecorder: record.NewFakeRecorder(32),
132+
Metrics: testMetricsH,
133+
Getters: testGetters,
134+
Storage: testStorage,
135+
}).SetupWithManager(testEnv); err != nil {
136+
panic(fmt.Sprintf("Failed to start HelmRepositoryReconciler: %v", err))
137+
}
138+
129139
go func() {
130140
fmt.Println("Starting the test environment")
131141
if err := testEnv.Start(ctx); err != nil {

0 commit comments

Comments
 (0)