Skip to content

Commit 35f18ca

Browse files
committed
Fix "PVC already exists" error in tests
Signed-off-by: Dimitris Karakasilis <dimitris@karakasilis.me>
1 parent 37665cd commit 35f18ca

File tree

3 files changed

+23
-13
lines changed

3 files changed

+23
-13
lines changed

controllers/osartifact_controller.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,14 @@ func (r *OSArtifactReconciler) createPVC(ctx context.Context, artifact *osbuilde
128128
return pvc, err
129129
}
130130
if err := r.Create(ctx, pvc); err != nil {
131+
if apierrors.IsAlreadyExists(err) {
132+
// PVC already exists, fetch and return it
133+
existingPVC := &corev1.PersistentVolumeClaim{}
134+
if err := r.Get(ctx, client.ObjectKeyFromObject(pvc), existingPVC); err != nil {
135+
return pvc, err
136+
}
137+
return existingPVC, nil
138+
}
131139
return pvc, err
132140
}
133141

controllers/osartifact_controller_test.go

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
osbuilder "github.com/kairos-io/osbuilder/api/v1alpha2"
99
. "github.com/onsi/ginkgo/v2"
1010
. "github.com/onsi/gomega"
11-
"github.com/phayes/freeport"
1211
corev1 "k8s.io/api/core/v1"
1312
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1413
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -20,6 +19,7 @@ import (
2019
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
2120
"k8s.io/client-go/rest"
2221
ctrl "sigs.k8s.io/controller-runtime"
22+
"sigs.k8s.io/controller-runtime/pkg/client"
2323
)
2424

2525
var _ = Describe("OSArtifactReconciler", func() {
@@ -51,20 +51,15 @@ var _ = Describe("OSArtifactReconciler", func() {
5151
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
5252
utilruntime.Must(osbuilder.AddToScheme(scheme))
5353

54-
metricsPort, err := freeport.GetFreePort()
55-
Expect(err).ToNot(HaveOccurred())
56-
57-
fmt.Printf("metricsPort = %+v\n", metricsPort)
58-
mgr, err := ctrl.NewManager(restConfig, ctrl.Options{
59-
Scheme: scheme,
60-
MetricsBindAddress: fmt.Sprintf("127.0.0.1:%d", metricsPort),
61-
})
62-
Expect(err).ToNot(HaveOccurred())
63-
6454
r = &OSArtifactReconciler{
6555
ToolImage: fmt.Sprintf("quay.io/kairos/auroraboot:%s", CompatibleAurorabootVersion),
6656
}
67-
err = (r).SetupWithManager(mgr)
57+
58+
// Create a direct client (no cache) for tests - we don't need reconciliation
59+
// This avoids the complexity of managing a running manager
60+
directClient, err := client.New(restConfig, client.Options{Scheme: scheme})
61+
Expect(err).ToNot(HaveOccurred())
62+
err = r.InjectClient(directClient)
6863
Expect(err).ToNot(HaveOccurred())
6964
})
7065

controllers/suite_test.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@ import (
2121
"math/rand"
2222
"path/filepath"
2323
"testing"
24+
"time"
2425

2526
. "github.com/onsi/ginkgo/v2"
2627
. "github.com/onsi/gomega"
2728
v1 "k8s.io/api/core/v1"
29+
apierrors "k8s.io/apimachinery/pkg/api/errors"
2830
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2931
"k8s.io/client-go/kubernetes"
3032
"k8s.io/client-go/kubernetes/scheme"
@@ -73,7 +75,6 @@ var _ = BeforeSuite(func() {
7375
k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme})
7476
Expect(err).NotTo(HaveOccurred())
7577
Expect(k8sClient).NotTo(BeNil())
76-
7778
})
7879

7980
var _ = AfterSuite(func() {
@@ -106,4 +107,10 @@ func createRandomNamespace(clientset *kubernetes.Clientset) string {
106107
func deleteNamepace(clientset *kubernetes.Clientset, name string) {
107108
err := clientset.CoreV1().Namespaces().Delete(context.Background(), name, metav1.DeleteOptions{})
108109
Expect(err).ToNot(HaveOccurred())
110+
111+
// Wait for the namespace to be fully deleted to ensure clean test isolation
112+
Eventually(func() bool {
113+
_, err := clientset.CoreV1().Namespaces().Get(context.Background(), name, metav1.GetOptions{})
114+
return apierrors.IsNotFound(err)
115+
}, 30*time.Second, 500*time.Millisecond).Should(BeTrue(), "namespace should be deleted")
109116
}

0 commit comments

Comments
 (0)