-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcommon.go
94 lines (77 loc) · 1.94 KB
/
common.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
package kubetest
import (
"bytes"
"gopkg.in/yaml.v2"
"io/ioutil"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/client-go/util/jsonpath"
)
// getKubeClientSet returns a kubernetes client set which can be used to connect to kubernetes cluster
func getKubeClient(incluster bool, filepath string) (*kubernetes.Clientset, error) {
var config *rest.Config
var clientset *kubernetes.Clientset
var err error
if incluster == true {
config, err = rest.InClusterConfig()
} else {
config, err = clientcmd.BuildConfigFromFlags("", filepath)
}
if err != nil {
return nil, err
}
clientset, err = kubernetes.NewForConfig(config)
if err != nil {
return nil, err
}
return clientset, nil
}
func decodeTestFile(client *kubernetes.Clientset, filePath string) (*kubeTest, error) {
kubeTest := &kubeTest{}
data, err := ioutil.ReadFile(filePath)
if err != nil {
return nil, err
}
err = yaml.Unmarshal(data, &kubeTest)
if err != nil {
return nil, err
}
return kubeTest, nil
}
func assertJSONPath(objs []runtime.Object, path, value string) (bool, error) {
jp := jsonpath.New("assertJsonpath")
jp.AllowMissingKeys(true)
err := jp.Parse("{" + path + "}")
passed := true
if err != nil {
log.Error(err, "Cannot parse JSONPath")
return false, err
}
buf := new(bytes.Buffer)
for _, i := range objs {
err = jp.Execute(buf, i)
if err != nil {
log.Error(err, "Cannot execute JSONPath")
passed = false
break
} else if buf.String() != value {
log.WarnWithFields(map[string]interface{}{
"jsonpath": path,
"expected": value,
"got": buf.String(),
"status": "FAILED",
}, "Failed asserting jsonpath on obj")
passed = false
break
}
buf.Reset()
}
log.InfoWithFields(map[string]interface{}{
"test": "AssertJSONPath",
"path": path,
"status": "PASSED",
}, "JSON Path matches expected value.")
return passed, err
}