Skip to content

Commit fab55ed

Browse files
committed
Add unit test case for CRD validation
Signed-off-by: Vu Dinh <[email protected]>
1 parent a7119ae commit fab55ed

File tree

5 files changed

+155
-0
lines changed

5 files changed

+155
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package internal
2+
3+
import (
4+
"io/ioutil"
5+
"testing"
6+
7+
"github.com/operator-framework/api/pkg/validation/errors"
8+
"github.com/stretchr/testify/require"
9+
v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
10+
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
11+
12+
"github.com/ghodss/yaml"
13+
)
14+
15+
func TestValidateCRD(t *testing.T) {
16+
var table = []struct {
17+
description string
18+
directory string
19+
version string
20+
hasError bool
21+
errString string
22+
}{
23+
{
24+
description: "registryv1 bundle/valid crd",
25+
directory: "./testdata/v1beta1.crd.yaml",
26+
version: "v1beta1",
27+
hasError: false,
28+
errString: "",
29+
},
30+
{
31+
description: "registryv1 bundle/invalid crd",
32+
directory: "./testdata/duplicateVersions.crd.yaml",
33+
version: "v1beta1",
34+
hasError: true,
35+
errString: "must contain unique version names",
36+
},
37+
{
38+
description: "registryv1 bundle/invalid crd",
39+
directory: "./testdata/v1.crd.yaml",
40+
version: "v1",
41+
hasError: false,
42+
errString: "",
43+
},
44+
{
45+
description: "registryv1 bundle/invalid crd",
46+
directory: "./testdata/deprecatedVersion.crd.yaml",
47+
version: "v1",
48+
hasError: true,
49+
errString: "must have exactly one version marked as storage version",
50+
},
51+
}
52+
53+
for _, tt := range table {
54+
b, err := ioutil.ReadFile(tt.directory)
55+
if err != nil {
56+
t.Fatalf("Error reading CRD path %s: %v", tt.directory, err)
57+
}
58+
59+
results := []errors.ManifestResult{}
60+
switch tt.version {
61+
case "v1":
62+
crd := &v1.CustomResourceDefinition{}
63+
if err = yaml.Unmarshal(b, crd); err != nil {
64+
t.Fatalf("Error unmarshalling CRD at path %s: %v", tt.directory, err)
65+
}
66+
results = CRDValidator.Validate(crd)
67+
default:
68+
crd := &v1beta1.CustomResourceDefinition{}
69+
if err = yaml.Unmarshal(b, crd); err != nil {
70+
t.Fatalf("Error unmarshalling CRD at path %s: %v", tt.directory, err)
71+
}
72+
results = CRDValidator.Validate(crd)
73+
}
74+
75+
if len(results) > 0 {
76+
require.Equal(t, results[0].HasError(), tt.hasError)
77+
if results[0].HasError() {
78+
require.Contains(t, results[0].Errors[0].Error(), tt.errString)
79+
}
80+
}
81+
}
82+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
apiVersion: apiextensions.k8s.io/v1
2+
kind: CustomResourceDefinition
3+
metadata:
4+
name: etcdclusters.etcd.database.coreos.com
5+
spec:
6+
group: etcd.database.coreos.com
7+
names:
8+
kind: EtcdCluster
9+
listKind: EtcdClusterList
10+
plural: etcdclusters
11+
shortNames:
12+
- etcdclus
13+
- etcd
14+
singular: etcdcluster
15+
scope: Namespaced
16+
version: v1beta2
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
apiVersion: apiextensions.k8s.io/v1beta1
2+
kind: CustomResourceDefinition
3+
metadata:
4+
name: etcdclusters.etcd.database.coreos.com
5+
spec:
6+
group: etcd.database.coreos.com
7+
names:
8+
kind: EtcdCluster
9+
listKind: EtcdClusterList
10+
plural: etcdclusters
11+
shortNames:
12+
- etcdclus
13+
- etcd
14+
singular: etcdcluster
15+
scope: Namespaced
16+
versions:
17+
- name: v1beta2
18+
served: true
19+
storage: true
20+
- name: v1beta2
21+
served: true
22+
storage: false
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
apiVersion: apiextensions.k8s.io/v1
2+
kind: CustomResourceDefinition
3+
metadata:
4+
name: etcdclusters.etcd.database.coreos.com
5+
spec:
6+
group: etcd.database.coreos.com
7+
names:
8+
kind: EtcdCluster
9+
listKind: EtcdClusterList
10+
plural: etcdclusters
11+
shortNames:
12+
- etcdclus
13+
- etcd
14+
singular: etcdcluster
15+
scope: Namespaced
16+
versions:
17+
- name: v1beta2
18+
served: true
19+
storage: true
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
apiVersion: apiextensions.k8s.io/v1beta1
2+
kind: CustomResourceDefinition
3+
metadata:
4+
name: etcdclusters.etcd.database.coreos.com
5+
spec:
6+
group: etcd.database.coreos.com
7+
names:
8+
kind: EtcdCluster
9+
listKind: EtcdClusterList
10+
plural: etcdclusters
11+
shortNames:
12+
- etcdclus
13+
- etcd
14+
singular: etcdcluster
15+
scope: Namespaced
16+
version: v1beta2

0 commit comments

Comments
 (0)