Skip to content

Commit 5434400

Browse files
committed
ocm: increased placement binding coverage
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 b818b99 commit 5434400

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"
@@ -353,10 +352,6 @@ func SetScheme(crScheme *runtime.Scheme) error {
353352
return err
354353
}
355354

356-
if err := policiesv1.AddToScheme(crScheme); err != nil {
357-
return err
358-
}
359-
360355
if err := cguapiv1alpha1.AddToScheme(crScheme); err != nil {
361356
return err
362357
}
@@ -533,8 +528,6 @@ func GetTestClients(tcp TestClientParams) *Settings {
533528
genericClientObjects = append(genericClientObjects, v)
534529
case *routev1.Route:
535530
genericClientObjects = append(genericClientObjects, v)
536-
case *policiesv1.PlacementBinding:
537-
genericClientObjects = append(genericClientObjects, v)
538531
case *placementrulev1.PlacementRule:
539532
genericClientObjects = append(genericClientObjects, v)
540533
case *policiesv1beta1.PolicySet:

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)