-
Notifications
You must be signed in to change notification settings - Fork 53
/
environment_old.go
103 lines (86 loc) · 2.74 KB
/
environment_old.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
package test
import (
"context"
"fmt"
"sync"
"github.com/onsi/ginkgo/v2"
"github.com/onsi/gomega"
"github.com/phayes/freeport"
"github.com/rancher/opni/apis"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/envtest"
)
type Reconciler interface {
SetupWithManager(ctrl.Manager) error
}
var ExternalResources sync.WaitGroup
func RunTestEnvironment(
testEnv *envtest.Environment,
runControllerManager bool,
externalEnv bool,
reconcilers ...Reconciler,
) (stop context.CancelFunc, k8sManager ctrl.Manager, k8sClient client.Client) {
if !externalEnv && len(reconcilers) == 0 {
panic("no reconcilers")
}
var ctx context.Context
ctx, stop = context.WithCancel(ctrl.SetupSignalHandler())
cfg, err := testEnv.Start()
gomega.Expect(err).NotTo(gomega.HaveOccurred())
gomega.Expect(cfg).NotTo(gomega.BeNil())
ExternalResources.Add(1)
go func() {
defer ginkgo.GinkgoRecover()
defer ExternalResources.Done()
<-ctx.Done()
err := testEnv.Stop()
gomega.Expect(err).NotTo(gomega.HaveOccurred())
}()
if runControllerManager {
StartControllerManager(ctx, testEnv)
}
scheme := apis.NewScheme()
apis.InitScheme(scheme)
ports, err := freeport.GetFreePorts(2)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
// add the opnicluster manager
k8sManager, err = ctrl.NewManager(cfg, ctrl.Options{
Scheme: scheme,
MetricsBindAddress: fmt.Sprintf(":%d", ports[0]),
HealthProbeBindAddress: fmt.Sprintf(":%d", ports[1]),
})
gomega.Expect(err).NotTo(gomega.HaveOccurred())
k8sClient = k8sManager.GetClient()
gomega.Expect(k8sClient).NotTo(gomega.BeNil())
for _, rec := range reconcilers {
gomega.Expect(rec.SetupWithManager(k8sManager)).NotTo(gomega.HaveOccurred())
}
go func() {
defer ginkgo.GinkgoRecover()
err = k8sManager.Start(ctx)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
}()
err = k8sClient.Create(context.Background(), &corev1.Namespace{
ObjectMeta: metav1.ObjectMeta{
Name: "opnicluster-test",
},
})
gomega.Expect(err).Should(gomega.Or(gomega.BeNil(), gomega.WithTransform(errors.IsAlreadyExists, gomega.BeTrue())))
err = k8sClient.Create(context.Background(), &corev1.Namespace{
ObjectMeta: metav1.ObjectMeta{
Name: "opnidemo-test",
},
})
gomega.Expect(err).Should(gomega.Or(gomega.BeNil(), gomega.WithTransform(errors.IsAlreadyExists, gomega.BeTrue())))
err = k8sClient.Create(context.Background(), &corev1.Namespace{
ObjectMeta: metav1.ObjectMeta{
Name: "logadapter-test",
},
})
gomega.Expect(err).Should(gomega.Or(gomega.BeNil(), gomega.WithTransform(errors.IsAlreadyExists, gomega.BeTrue())))
return
}