Skip to content

Commit 8ff5cbe

Browse files
authored
ocm: increased placement binding coverage (rh-ecosystem-edge#550)
This PR adds unit tests for list and validate for the placement binding resource in the OCM package. It also removes the PlacementBinding from the clients package.
1 parent 543b7d0 commit 8ff5cbe

File tree

5 files changed

+261
-49
lines changed

5 files changed

+261
-49
lines changed

pkg/clients/clients.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ import (
7575
"k8s.io/client-go/kubernetes/scheme"
7676
coreV1Client "k8s.io/client-go/kubernetes/typed/core/v1"
7777
storageV1Client "k8s.io/client-go/kubernetes/typed/storage/v1"
78-
policiesv1 "open-cluster-management.io/governance-policy-propagator/api/v1"
7978

8079
plumbingv1 "github.com/k8snetworkplumbingwg/multi-networkpolicy/pkg/apis/k8s.cni.cncf.io/v1beta1"
8180
fakeMultiNetPolicyClient "github.com/k8snetworkplumbingwg/multi-networkpolicy/pkg/client/clientset/versioned/fake"
@@ -352,10 +351,6 @@ func SetScheme(crScheme *runtime.Scheme) error {
352351
return err
353352
}
354353

355-
if err := policiesv1.AddToScheme(crScheme); err != nil {
356-
return err
357-
}
358-
359354
if err := cguapiv1alpha1.AddToScheme(crScheme); err != nil {
360355
return err
361356
}
@@ -528,8 +523,6 @@ func GetTestClients(tcp TestClientParams) *Settings {
528523
genericClientObjects = append(genericClientObjects, v)
529524
case *routev1.Route:
530525
genericClientObjects = append(genericClientObjects, v)
531-
case *policiesv1.PlacementBinding:
532-
genericClientObjects = append(genericClientObjects, v)
533526
case *policiesv1beta1.PolicySet:
534527
genericClientObjects = append(genericClientObjects, v)
535528
case *configV1.Node:

pkg/ocm/placementbinding.go

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ type PlacementBindingBuilder struct {
2020
// created placementBinding object.
2121
Object *policiesv1.PlacementBinding
2222
// api client to interact with the cluster.
23-
apiClient *clients.Settings
23+
apiClient runtimeclient.Client
2424
// used to store latest error message upon defining or mutating placementBinding definition.
2525
errorMsg string
2626
}
@@ -36,8 +36,21 @@ func NewPlacementBindingBuilder(
3636
"Initializing new placement binding structure with the following params: name: %s, nsname: %s",
3737
name, nsname)
3838

39+
if apiClient == nil {
40+
glog.V(100).Info("The apiClient of the PlacementBinding is nil")
41+
42+
return nil
43+
}
44+
45+
err := apiClient.AttachScheme(policiesv1.AddToScheme)
46+
if err != nil {
47+
glog.V(100).Info("Failed to add PlacementBinding scheme to client schemes")
48+
49+
return nil
50+
}
51+
3952
builder := PlacementBindingBuilder{
40-
apiClient: apiClient,
53+
apiClient: apiClient.Client,
4154
Definition: &policiesv1.PlacementBinding{
4255
ObjectMeta: metav1.ObjectMeta{
4356
Name: name,
@@ -77,8 +90,15 @@ func PullPlacementBinding(apiClient *clients.Settings, name, nsname string) (*Pl
7790
return nil, fmt.Errorf("placementBinding's 'apiClient' cannot be empty")
7891
}
7992

93+
err := apiClient.AttachScheme(policiesv1.AddToScheme)
94+
if err != nil {
95+
glog.V(100).Info("Failed to add PlacementBinding scheme to client schemes")
96+
97+
return nil, err
98+
}
99+
80100
builder := PlacementBindingBuilder{
81-
apiClient: apiClient,
101+
apiClient: apiClient.Client,
82102
Definition: &policiesv1.PlacementBinding{
83103
ObjectMeta: metav1.ObjectMeta{
84104
Name: name,
@@ -196,23 +216,29 @@ func (builder *PlacementBindingBuilder) Update(force bool) (*PlacementBindingBui
196216
return builder, err
197217
}
198218

219+
if !builder.Exists() {
220+
glog.V(100).Infof(
221+
"PlacementBinding %s does not exist in namespace %s", builder.Definition.Name, builder.Definition.Namespace)
222+
223+
return nil, fmt.Errorf("cannot update non-existent placementBinding")
224+
}
225+
199226
glog.V(100).Infof("Updating the placementBinding object: %s in namespace: %s",
200227
builder.Definition.Name, builder.Definition.Namespace)
201228

229+
builder.Definition.ResourceVersion = builder.Object.ResourceVersion
202230
err := builder.apiClient.Update(context.TODO(), builder.Definition)
203231

204232
if err != nil {
205233
if force {
206234
glog.V(100).Infof(
207-
"Failed to update the placementBinding object %s. "+
208-
"Note: Force flag set, executed delete/create methods instead", builder.Definition.Name)
235+
msg.FailToUpdateNotification("placementBinding", builder.Definition.Name, builder.Definition.Namespace))
209236

210237
builder, err := builder.Delete()
238+
builder.Definition.ResourceVersion = ""
211239

212240
if err != nil {
213-
glog.V(100).Infof(
214-
"Failed to update the placementBinding object %s, "+
215-
"due to error in delete function", builder.Definition.Name)
241+
glog.V(100).Infof(msg.FailToUpdateError("placementBinding", builder.Definition.Name, builder.Definition.Namespace))
216242

217243
return nil, err
218244
}
@@ -221,9 +247,7 @@ func (builder *PlacementBindingBuilder) Update(force bool) (*PlacementBindingBui
221247
}
222248
}
223249

224-
if err == nil {
225-
builder.Object = builder.Definition
226-
}
250+
builder.Object = builder.Definition
227251

228252
return builder, err
229253
}

pkg/ocm/placementbindingList.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,19 @@ import (
1414
func ListPlacementBindingsInAllNamespaces(apiClient *clients.Settings,
1515
options ...runtimeclient.ListOptions) (
1616
[]*PlacementBindingBuilder, error) {
17+
if apiClient == nil {
18+
glog.V(100).Info("PlacementBindings 'apiClient' parameter cannot be nil")
19+
20+
return nil, fmt.Errorf("failed to list placementBindings, 'apiClient' parameter is nil")
21+
}
22+
23+
err := apiClient.AttachScheme(policiesv1.AddToScheme)
24+
if err != nil {
25+
glog.V(100).Info("Failed to add PlacementBinding scheme to client schemes")
26+
27+
return nil, err
28+
}
29+
1730
logMessage := string("Listing all placementBindings in all namespaces")
1831
passedOptions := runtimeclient.ListOptions{}
1932

@@ -30,9 +43,8 @@ func ListPlacementBindingsInAllNamespaces(apiClient *clients.Settings,
3043

3144
glog.V(100).Infof(logMessage)
3245

33-
placementBindingList := &policiesv1.PlacementBindingList{}
34-
35-
err := apiClient.Client.List(context.TODO(), placementBindingList, &passedOptions)
46+
placementBindingList := new(policiesv1.PlacementBindingList)
47+
err = apiClient.Client.List(context.TODO(), placementBindingList, &passedOptions)
3648

3749
if err != nil {
3850
glog.V(100).Infof("Failed to list all placementBindings in all namespaces due to %s", err.Error())
@@ -45,7 +57,7 @@ func ListPlacementBindingsInAllNamespaces(apiClient *clients.Settings,
4557
for _, placementBinding := range placementBindingList.Items {
4658
copiedplacementBinding := placementBinding
4759
placementBinding := &PlacementBindingBuilder{
48-
apiClient: apiClient,
60+
apiClient: apiClient.Client,
4961
Object: &copiedplacementBinding,
5062
Definition: &copiedplacementBinding,
5163
}

0 commit comments

Comments
 (0)