@@ -18,9 +18,12 @@ package controllers
1818
1919import (
2020 "context"
21+ "errors"
2122 "path/filepath"
2223 "testing"
2324
25+ "github.com/go-logr/logr"
26+ "github.com/golang/mock/gomock"
2427 . "github.com/onsi/ginkgo/v2"
2528 . "github.com/onsi/gomega"
2629 corev1 "k8s.io/api/core/v1"
@@ -29,11 +32,14 @@ import (
2932 "k8s.io/apimachinery/pkg/types"
3033 "k8s.io/client-go/kubernetes/scheme"
3134 "k8s.io/client-go/rest"
35+ clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
3236 "sigs.k8s.io/cluster-api/test/framework"
3337 "sigs.k8s.io/controller-runtime/pkg/client"
3438 "sigs.k8s.io/controller-runtime/pkg/envtest"
3539
3640 infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha7"
41+ "sigs.k8s.io/cluster-api-provider-openstack/pkg/cloud/services/compute"
42+ "sigs.k8s.io/cluster-api-provider-openstack/pkg/scope"
3743 "sigs.k8s.io/cluster-api-provider-openstack/test/helpers/external"
3844)
3945
@@ -90,7 +96,7 @@ var _ = AfterSuite(func() {
9096})
9197
9298var _ = Describe ("EnvTest sanity check" , func () {
93- ctx : = context .TODO ()
99+ ctx = context .TODO ()
94100 It ("should be able to create a namespace" , func () {
95101 testNamespace := "capo-test"
96102 namespacedName := types.NamespacedName {
@@ -117,3 +123,44 @@ var _ = Describe("EnvTest sanity check", func() {
117123 // will actually stay in "Terminating" state and never be completely gone.
118124 })
119125})
126+
127+ var _ = Describe ("When calling getOrCreate" , func () {
128+ var (
129+ logger logr.Logger
130+ reconsiler OpenStackMachineReconciler
131+ mockCtrl * gomock.Controller
132+ mockScopeFactory * scope.MockScopeFactory
133+ computeService * compute.Service
134+ err error
135+ )
136+
137+ BeforeEach (func () {
138+ ctx = context .Background ()
139+ logger = logr .Discard ()
140+ reconsiler = OpenStackMachineReconciler {}
141+ mockCtrl = gomock .NewController (GinkgoT ())
142+ mockScopeFactory = scope .NewMockScopeFactory (mockCtrl , "1234" , logger )
143+ computeService , err = compute .NewService (mockScopeFactory )
144+ Expect (err ).NotTo (HaveOccurred ())
145+ })
146+
147+ It ("should return an error if unable to get instance" , func () {
148+ cluster := & clusterv1.Cluster {}
149+ openStackCluster := & infrav1.OpenStackCluster {}
150+ machine := & clusterv1.Machine {}
151+ openStackMachine := & infrav1.OpenStackMachine {}
152+
153+ mockScopeFactory .ComputeClient .EXPECT ().ListServers (gomock .Any ()).Return (nil , errors .New ("Test error when listing servers" ))
154+ instanceStatus , err := reconsiler .getOrCreate (logger , cluster , openStackCluster , machine , openStackMachine , computeService , "" )
155+ Expect (err ).To (HaveOccurred ())
156+ Expect (instanceStatus ).To (BeNil ())
157+ conditions := openStackMachine .GetConditions ()
158+ Expect (len (conditions ) > 0 ).To (BeTrue ())
159+ for i := range conditions {
160+ if conditions [i ].Type == infrav1 .InstanceReadyCondition {
161+ Expect (conditions [i ].Reason ).To (Equal (infrav1 .OpenStackErrorReason ))
162+ break
163+ }
164+ }
165+ })
166+ })
0 commit comments