@@ -17,12 +17,14 @@ limitations under the License.
17
17
package loadbalancer
18
18
19
19
import (
20
- "fmt"
21
20
"testing"
22
21
23
22
"github.com/go-logr/logr"
24
23
"github.com/golang/mock/gomock"
24
+ "github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/listeners"
25
25
"github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/loadbalancers"
26
+ "github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/monitors"
27
+ "github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/pools"
26
28
. "github.com/onsi/gomega"
27
29
28
30
infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha5"
@@ -35,16 +37,21 @@ func Test_ReconcileLoadBalancer(t *testing.T) {
35
37
mockCtrl := gomock .NewController (t )
36
38
defer mockCtrl .Finish ()
37
39
38
- openStackCluster := & infrav1.OpenStackCluster {Status : infrav1. OpenStackClusterStatus {
39
- ExternalNetwork : & infrav1.Network {
40
- ID : "aaaaaaaa-bbbb-cccc-dddd-111111111111" ,
40
+ openStackCluster := & infrav1.OpenStackCluster {
41
+ Spec : infrav1.OpenStackClusterSpec {
42
+ DisableAPIServerFloatingIP : true ,
41
43
},
42
- Network : & infrav1.Network {
43
- Subnet : & infrav1.Subnet {
44
- ID : "aaaaaaaa-bbbb-cccc-dddd-222222222222" ,
44
+ Status : infrav1.OpenStackClusterStatus {
45
+ ExternalNetwork : & infrav1.Network {
46
+ ID : "aaaaaaaa-bbbb-cccc-dddd-111111111111" ,
47
+ },
48
+ Network : & infrav1.Network {
49
+ Subnet : & infrav1.Subnet {
50
+ ID : "aaaaaaaa-bbbb-cccc-dddd-222222222222" ,
51
+ },
45
52
},
46
53
},
47
- }}
54
+ }
48
55
type serviceFields struct {
49
56
projectID string
50
57
networkingClient * mock_networking.MockNetworkClient
@@ -59,7 +66,7 @@ func Test_ReconcileLoadBalancer(t *testing.T) {
59
66
wantError error
60
67
}{
61
68
{
62
- name : "reconcile loadbalancer in non active state should should cause error " ,
69
+ name : "reconcile loadbalancer in non active state should wait for active state " ,
63
70
prepareServiceMock : func (sf * serviceFields ) {
64
71
sf .networkingClient = mock_networking .NewMockNetworkClient (mockCtrl )
65
72
sf .loadbalancerClient = mock_loadbalancer .NewMockLbClient (mockCtrl )
@@ -68,17 +75,46 @@ func Test_ReconcileLoadBalancer(t *testing.T) {
68
75
// add network api call results here
69
76
},
70
77
expectLoadBalancer : func (m * mock_loadbalancer.MockLbClientMockRecorder ) {
78
+ pendingLB := loadbalancers.LoadBalancer {
79
+ ID : "aaaaaaaa-bbbb-cccc-dddd-333333333333" ,
80
+ Name : "k8s-clusterapi-cluster-AAAAA-kubeapi" ,
81
+ ProvisioningStatus : "PENDING_CREATE" ,
82
+ }
83
+ activeLB := pendingLB
84
+ activeLB .ProvisioningStatus = "ACTIVE"
85
+
71
86
// return existing loadbalancer in non-active state
72
- lbList := []loadbalancers.LoadBalancer {
87
+ lbList := []loadbalancers.LoadBalancer {pendingLB }
88
+ m .ListLoadBalancers (loadbalancers.ListOpts {Name : pendingLB .Name }).Return (lbList , nil )
89
+
90
+ // wait for active loadbalancer by returning active loadbalancer on second call
91
+ m .GetLoadBalancer ("aaaaaaaa-bbbb-cccc-dddd-333333333333" ).Return (& pendingLB , nil ).Return (& activeLB , nil )
92
+
93
+ listenerList := []listeners.Listener {
94
+ {
95
+ ID : "aaaaaaaa-bbbb-cccc-dddd-444444444444" ,
96
+ Name : "k8s-clusterapi-cluster-AAAAA-kubeapi-0" ,
97
+ },
98
+ }
99
+ m .ListListeners (listeners.ListOpts {Name : listenerList [0 ].Name }).Return (listenerList , nil )
100
+
101
+ poolList := []pools.Pool {
102
+ {
103
+ ID : "aaaaaaaa-bbbb-cccc-dddd-555555555555" ,
104
+ Name : "k8s-clusterapi-cluster-AAAAA-kubeapi-0" ,
105
+ },
106
+ }
107
+ m .ListPools (pools.ListOpts {Name : poolList [0 ].Name }).Return (poolList , nil )
108
+
109
+ monitorList := []monitors.Monitor {
73
110
{
74
- ID : "aaaaaaaa-bbbb-cccc-dddd-333333333333" ,
75
- Name : "k8s-clusterapi-cluster-AAAAA-kubeapi" ,
76
- ProvisioningStatus : "PENDING_CREATE" ,
111
+ ID : "aaaaaaaa-bbbb-cccc-dddd-666666666666" ,
112
+ Name : "k8s-clusterapi-cluster-AAAAA-kubeapi-0" ,
77
113
},
78
114
}
79
- m .ListLoadBalancers (loadbalancers .ListOpts {Name : "k8s-clusterapi-cluster-AAAAA-kubeapi" }).Return (lbList , nil )
115
+ m .ListMonitors (monitors .ListOpts {Name : monitorList [ 0 ]. Name }).Return (monitorList , nil )
80
116
},
81
- wantError : fmt . Errorf ( "load balancer %q is not in expected state %s, current state is %s" , "aaaaaaaa-bbbb-cccc-dddd-333333333333" , "ACTIVE" , "PENDING_CREATE" ) ,
117
+ wantError : nil ,
82
118
},
83
119
}
84
120
for _ , tt := range lbtests {
@@ -90,7 +126,11 @@ func Test_ReconcileLoadBalancer(t *testing.T) {
90
126
tt .expectNetwork (tt .fields .networkingClient .EXPECT ())
91
127
tt .expectLoadBalancer (tt .fields .loadbalancerClient .EXPECT ())
92
128
err := lbs .ReconcileLoadBalancer (openStackCluster , "AAAAA" , 0 )
93
- g .Expect (err ).To (MatchError (tt .wantError ))
129
+ if tt .wantError != nil {
130
+ g .Expect (err ).To (MatchError (tt .wantError ))
131
+ } else {
132
+ g .Expect (err ).NotTo (HaveOccurred ())
133
+ }
94
134
})
95
135
}
96
136
}
0 commit comments