/
mapper.go
114 lines (93 loc) · 3.57 KB
/
mapper.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
Copyright 2021 The KubeVela Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package mock
import (
"github.com/oam-dev/kubevela/pkg/oam/discoverymapper"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime/schema"
)
var _ discoverymapper.DiscoveryMapper = &DiscoveryMapper{}
// GetMapper is func type for mock convenience
type GetMapper func() (meta.RESTMapper, error)
// Refresh is func type for mock convenience
type Refresh func() (meta.RESTMapper, error)
// RESTMapping is func type for mock convenience
type RESTMapping func(gk schema.GroupKind, versions ...string) (*meta.RESTMapping, error)
// KindsFor is func type for mock convenience
type KindsFor func(input schema.GroupVersionResource) ([]schema.GroupVersionKind, error)
// ResourcesFor is func type for mock convenience
type ResourcesFor func(input schema.GroupVersionKind) (schema.GroupVersionResource, error)
// NewMockDiscoveryMapper for unit test only
func NewMockDiscoveryMapper() *DiscoveryMapper {
return &DiscoveryMapper{
MockRESTMapping: NewMockRESTMapping(""),
MockKindsFor: NewMockKindsFor(""),
}
}
// NewMockRESTMapping for unit test only
func NewMockRESTMapping(resource string) RESTMapping {
return func(gk schema.GroupKind, versions ...string) (*meta.RESTMapping, error) {
return &meta.RESTMapping{Resource: schema.GroupVersionResource{Resource: resource, Version: versions[0], Group: gk.Group}}, nil
}
}
// NewMockKindsFor for unit test only
func NewMockKindsFor(kind string, version ...string) KindsFor {
return func(input schema.GroupVersionResource) ([]schema.GroupVersionKind, error) {
if len(kind) <= 1 {
return []schema.GroupVersionKind{{Version: input.Version, Group: input.Group, Kind: kind}}, nil
}
var ss []schema.GroupVersionKind
for _, v := range version {
gvk := schema.GroupVersionKind{Version: v, Group: input.Group, Kind: kind}
if input.Version != "" && input.Version == v {
return []schema.GroupVersionKind{gvk}, nil
}
ss = append(ss, gvk)
}
return ss, nil
}
}
// DiscoveryMapper for unit test only, use GetMapper and refresh will panic
type DiscoveryMapper struct {
MockGetMapper GetMapper
MockRefresh Refresh
MockRESTMapping RESTMapping
MockKindsFor KindsFor
MockResourcesFor ResourcesFor
}
// GetMapper for mock
func (m *DiscoveryMapper) GetMapper() (meta.RESTMapper, error) {
return m.MockGetMapper()
}
// Refresh for mock
func (m *DiscoveryMapper) Refresh() (meta.RESTMapper, error) {
return m.MockRefresh()
}
// RESTMapping for mock
func (m *DiscoveryMapper) RESTMapping(gk schema.GroupKind, versions ...string) (*meta.RESTMapping, error) {
return m.MockRESTMapping(gk, versions...)
}
// KindsFor for mock
func (m *DiscoveryMapper) KindsFor(input schema.GroupVersionResource) ([]schema.GroupVersionKind, error) {
return m.MockKindsFor(input)
}
// ResourcesFor for mock
func (m *DiscoveryMapper) ResourcesFor(input schema.GroupVersionKind) (schema.GroupVersionResource, error) {
var gvr schema.GroupVersionResource
mapping, err := m.RESTMapping(input.GroupKind(), input.Version)
if err != nil {
return gvr, err
}
gvr = mapping.Resource
return gvr, nil
}