/
gomega.go
124 lines (110 loc) · 3.49 KB
/
gomega.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
115
116
117
118
119
120
121
122
123
124
/*
* Copyright 2017-2018 IBM Corporation
*
* 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 test
import (
"fmt"
"github.com/apache/incubator-openwhisk-client-go/whisk"
"k8s.io/apimachinery/pkg/runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/manager"
Ω "github.com/onsi/gomega"
context "github.com/ibm/cloud-operators/pkg/context"
resv1 "github.com/ibm/cloud-operators/pkg/lib/resource/v1"
)
// StartTestManager starts the manager
func StartTestManager(mgr manager.Manager) chan struct{} {
stop := make(chan struct{})
go func() {
Ω.Expect(mgr.Start(stop)).NotTo(Ω.HaveOccurred())
}()
return stop
}
// GetObject gets the object from the store
func GetObject(context context.Context, obj runtime.Object) func() runtime.Object {
return func() runtime.Object {
key, err := client.ObjectKeyFromObject(obj)
if err != nil {
return nil
}
if err := context.Client().Get(context, key, obj); err != nil {
return nil
}
return obj
}
}
// GetState gets the object status from the store
func GetState(context context.Context, obj runtime.Object) func() string {
return func() string {
if obj := GetObject(context, obj)(); obj != nil {
if status := resv1.GetStatus(obj); status != nil {
return status.GetState()
}
}
return ""
}
}
// GetAction tries to get the action.
func GetAction(client *whisk.Client, actionName string) func() (*whisk.Action, error) {
return func() (*whisk.Action, error) {
action, _, err := client.Actions.Get(actionName, true)
if err == nil {
return action, nil
}
return nil, err
}
}
// GetPackage tries to get the package.
func GetPackage(client *whisk.Client, pkgName string) func() (*whisk.Package, error) {
return func() (*whisk.Package, error) {
pkg, _, err := client.Packages.Get(pkgName)
if err == nil {
return pkg, nil
}
return nil, err
}
}
// ActionInvocation invokes the given action, dropping the response for gomega compatibility
func ActionInvocation(wskclient *whisk.Client, actionName string, payload interface{}) (map[string]interface{}, error) {
result, _, err := wskclient.Actions.Invoke(actionName, payload, true, true)
return result, err
}
// GetActivation tries to get activations for the action.
func GetActivation(client *whisk.Client, actionName string) func() (*whisk.Activation, error) {
return func() (*whisk.Activation, error) {
activations, _, err := client.Activations.List(&whisk.ActivationListOptions{Since: ts})
if err != nil {
return nil, err
}
for _, activation := range activations {
if activation.Name == actionName {
return &activation, nil
}
}
return nil, fmt.Errorf("No activation found for %s", actionName)
}
}
// Result extracts response.result
func Result(httpResponse map[string]interface{}) map[string]interface{} {
if httpResponse == nil {
return nil
}
if response, ok := httpResponse["response"]; ok {
if result, ok := response.(map[string]interface{})["result"]; ok {
return result.(map[string]interface{})
}
}
return nil
}