Skip to content

Commit eb92edb

Browse files
committed
ocm: added unit tests and increased policy coverage
This PR adds unit tests for list and validate for the policy resource in the OCM package.
1 parent f92fd0f commit eb92edb

File tree

5 files changed

+161
-3
lines changed

5 files changed

+161
-3
lines changed

pkg/ocm/ocm_test.go

Lines changed: 0 additions & 1 deletion
This file was deleted.

pkg/ocm/policy.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,13 +206,14 @@ func (builder *PolicyBuilder) Update(force bool) (*PolicyBuilder, error) {
206206
if err != nil {
207207
if force {
208208
glog.V(100).Infof(
209-
msg.FailToUpdateNotification("policy", builder.Definition.Name))
209+
msg.FailToUpdateNotification("policy", builder.Definition.Name, builder.Definition.Namespace))
210210

211211
builder, err := builder.Delete()
212+
builder.Definition.ResourceVersion = ""
212213

213214
if err != nil {
214215
glog.V(100).Infof(
215-
msg.FailToUpdateError("policy", builder.Definition.Name))
216+
msg.FailToUpdateError("policy", builder.Definition.Name, builder.Definition.Namespace))
216217

217218
return nil, err
218219
}

pkg/ocm/policy_test.go

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,11 @@ func TestPolicyUpdate(t *testing.T) {
278278
assert.Nil(t, err)
279279
}
280280

281+
// This causes an error while updating and allows us to test the code path for force updates.
282+
if testCase.force {
283+
testBuilder.Definition.ResourceVersion = testBuilder.Definition.Name
284+
}
285+
281286
assert.NotNil(t, testBuilder.Definition)
282287
assert.False(t, testBuilder.Definition.Spec.Disabled)
283288

@@ -422,6 +427,82 @@ func TestPolicyWaitUntilComplianceState(t *testing.T) {
422427
}
423428
}
424429

430+
func TestPolicyValidate(t *testing.T) {
431+
testCases := []struct {
432+
builderNil bool
433+
definitionNil bool
434+
apiClientNil bool
435+
builderErrorMsg string
436+
expectedError error
437+
}{
438+
{
439+
builderNil: false,
440+
definitionNil: false,
441+
apiClientNil: false,
442+
builderErrorMsg: "",
443+
expectedError: nil,
444+
},
445+
{
446+
builderNil: true,
447+
definitionNil: false,
448+
apiClientNil: false,
449+
builderErrorMsg: "",
450+
expectedError: fmt.Errorf("error: received nil policy builder"),
451+
},
452+
{
453+
builderNil: false,
454+
definitionNil: true,
455+
apiClientNil: false,
456+
builderErrorMsg: "",
457+
expectedError: fmt.Errorf("can not redefine the undefined policy"),
458+
},
459+
{
460+
builderNil: false,
461+
definitionNil: false,
462+
apiClientNil: true,
463+
builderErrorMsg: "",
464+
expectedError: fmt.Errorf("policy builder cannot have nil apiClient"),
465+
},
466+
{
467+
builderNil: false,
468+
definitionNil: false,
469+
apiClientNil: false,
470+
builderErrorMsg: "test error",
471+
expectedError: fmt.Errorf("test error"),
472+
},
473+
}
474+
475+
for _, testCase := range testCases {
476+
policyBuilder := buildValidPolicyTestBuilder(clients.GetTestClients(clients.TestClientParams{}))
477+
478+
if testCase.builderNil {
479+
policyBuilder = nil
480+
}
481+
482+
if testCase.definitionNil {
483+
policyBuilder.Definition = nil
484+
}
485+
486+
if testCase.apiClientNil {
487+
policyBuilder.apiClient = nil
488+
}
489+
490+
if testCase.builderErrorMsg != "" {
491+
policyBuilder.errorMsg = testCase.builderErrorMsg
492+
}
493+
494+
valid, err := policyBuilder.validate()
495+
496+
if testCase.expectedError != nil {
497+
assert.False(t, valid)
498+
assert.Equal(t, testCase.expectedError, err)
499+
} else {
500+
assert.True(t, valid)
501+
assert.Nil(t, err)
502+
}
503+
}
504+
}
505+
425506
// buildDummyPolicy returns a Policy with the provided name and namespace.
426507
func buildDummyPolicy(name, nsname string) *policiesv1.Policy {
427508
return &policiesv1.Policy{

pkg/ocm/policylist.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ import (
1414
func ListPoliciesInAllNamespaces(apiClient *clients.Settings,
1515
options ...runtimeclient.ListOptions) (
1616
[]*PolicyBuilder, error) {
17+
if apiClient == nil {
18+
glog.V(100).Info("Policies 'apiClient' parameter cannot be nil")
19+
20+
return nil, fmt.Errorf("failed to list policies, 'apiClient' parameter is nil")
21+
}
22+
1723
logMessage := string("Listing all policies in all namespaces")
1824
passedOptions := runtimeclient.ListOptions{}
1925

pkg/ocm/policylist_test.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package ocm
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/openshift-kni/eco-goinfra/pkg/clients"
8+
"github.com/stretchr/testify/assert"
9+
"k8s.io/apimachinery/pkg/labels"
10+
runtimeclient "sigs.k8s.io/controller-runtime/pkg/client"
11+
)
12+
13+
func TestListPoliciesInAllNamespaces(t *testing.T) {
14+
testCases := []struct {
15+
policies []*PolicyBuilder
16+
listOptions []runtimeclient.ListOptions
17+
expectedError error
18+
client bool
19+
}{
20+
{
21+
policies: []*PolicyBuilder{
22+
buildValidPolicyTestBuilder(buildTestClientWithDummyPolicy()),
23+
},
24+
listOptions: nil,
25+
expectedError: nil,
26+
client: true,
27+
},
28+
{
29+
policies: []*PolicyBuilder{
30+
buildValidPolicyTestBuilder(buildTestClientWithDummyPolicy()),
31+
},
32+
listOptions: []runtimeclient.ListOptions{{LabelSelector: labels.NewSelector()}},
33+
expectedError: nil,
34+
client: true,
35+
},
36+
{
37+
policies: []*PolicyBuilder{
38+
buildValidPolicyTestBuilder(buildTestClientWithDummyPolicy()),
39+
},
40+
listOptions: []runtimeclient.ListOptions{
41+
{LabelSelector: labels.NewSelector()},
42+
{LabelSelector: labels.NewSelector()},
43+
},
44+
expectedError: fmt.Errorf("error: more than one ListOptions was passed"),
45+
client: true,
46+
},
47+
{
48+
policies: []*PolicyBuilder{
49+
buildValidPolicyTestBuilder(buildTestClientWithDummyPolicy()),
50+
},
51+
listOptions: []runtimeclient.ListOptions{{LabelSelector: labels.NewSelector()}},
52+
expectedError: fmt.Errorf("failed to list policies, 'apiClient' parameter is nil"),
53+
client: false,
54+
},
55+
}
56+
57+
for _, testCase := range testCases {
58+
var testSettings *clients.Settings
59+
60+
if testCase.client {
61+
testSettings = buildTestClientWithDummyPolicy()
62+
}
63+
64+
builders, err := ListPoliciesInAllNamespaces(testSettings, testCase.listOptions...)
65+
assert.Equal(t, err, testCase.expectedError)
66+
67+
if testCase.expectedError == nil && len(testCase.listOptions) == 0 {
68+
assert.Equal(t, len(testCase.policies), len(builders))
69+
}
70+
}
71+
}

0 commit comments

Comments
 (0)