Skip to content

Commit 9e61367

Browse files
author
Pablo Chacin
committed
Integration test skeleton
Introduces an skeleton for integration tests using the events generated by the test provider. Signed-off-by: Pablo Chacin <[email protected]>
1 parent fab4c07 commit 9e61367

File tree

237 files changed

+17582
-2
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

237 files changed

+17582
-2
lines changed

Gopkg.lock

Lines changed: 78 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

scripts/fetch_ext_bins.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ k8s_version=1.11.0
3131
goarch=amd64
3232
goos="unknown"
3333

34-
if [[ "$OSTYPE" == "linux-gnu" ]]; then
34+
if [[ "$OSTYPE" == "linux"* ]]; then
3535
goos="linux"
3636
elif [[ "$OSTYPE" == "darwin"* ]]; then
3737
goos="darwin"

test/integration/cluster/BUILD.bazel

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
load("@io_bazel_rules_go//go:def.bzl", "go_test")
2+
3+
go_test(
4+
name = "go_default_test",
5+
srcs = ["cluster_test.go"],
6+
deps = [
7+
"//pkg/apis/cluster/v1alpha1:go_default_library",
8+
"//pkg/client/clientset_generated/clientset:go_default_library",
9+
"//pkg/client/clientset_generated/clientset/typed/cluster/v1alpha1:go_default_library",
10+
"//vendor/github.com/onsi/ginkgo:go_default_library",
11+
"//vendor/github.com/onsi/gomega:go_default_library",
12+
"//vendor/k8s.io/api/core/v1:go_default_library",
13+
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
14+
"//vendor/k8s.io/client-go/informers:go_default_library",
15+
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
16+
"//vendor/k8s.io/client-go/tools/cache:go_default_library",
17+
"//vendor/k8s.io/client-go/tools/clientcmd:go_default_library",
18+
],
19+
)
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
/*
2+
Copyright 2019 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package integration
18+
19+
import (
20+
"os"
21+
"testing"
22+
"time"
23+
24+
. "github.com/onsi/ginkgo"
25+
. "github.com/onsi/gomega"
26+
corev1 "k8s.io/api/core/v1"
27+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
28+
informers "k8s.io/client-go/informers"
29+
"k8s.io/client-go/kubernetes"
30+
"k8s.io/client-go/tools/cache"
31+
"k8s.io/client-go/tools/clientcmd"
32+
clusterv1alpha1 "sigs.k8s.io/cluster-api/pkg/apis/cluster/v1alpha1"
33+
clientset "sigs.k8s.io/cluster-api/pkg/client/clientset_generated/clientset"
34+
client "sigs.k8s.io/cluster-api/pkg/client/clientset_generated/clientset/typed/cluster/v1alpha1"
35+
)
36+
37+
var clusterSpec = &clusterv1alpha1.ClusterSpec{
38+
ClusterNetwork: clusterv1alpha1.ClusterNetworkingConfig{
39+
ServiceDomain: "mydomain.com",
40+
Services: clusterv1alpha1.NetworkRanges{
41+
CIDRBlocks: []string{"10.96.0.0/12"},
42+
},
43+
Pods: clusterv1alpha1.NetworkRanges{
44+
CIDRBlocks: []string{"192.168.0.0/16"},
45+
},
46+
},
47+
}
48+
49+
// Constructs a function for async event retrieval
50+
// amenable to be used with Gomega's Eventually assertion
51+
func checkEvents(c chan *corev1.Event) func() *corev1.Event {
52+
return func() *corev1.Event {
53+
select {
54+
case e := <-c:
55+
return e
56+
default:
57+
return nil
58+
}
59+
}
60+
}
61+
62+
const TIMEOUT = 10 * time.Second
63+
const RETRY = 100 * time.Millisecond
64+
65+
func TestCluster(t *testing.T) {
66+
RegisterFailHandler(Fail)
67+
RunSpecs(t, "Cluster-Controller")
68+
}
69+
70+
var _ = Describe("Cluster-Controller", func() {
71+
var clusterapi client.ClusterInterface
72+
var client *kubernetes.Clientset
73+
var stopper chan struct{}
74+
var informer cache.SharedIndexInformer
75+
var testNamespace string
76+
77+
BeforeEach(func() {
78+
// Load configuration
79+
kubeconfig := os.Getenv("KUBECONFIG")
80+
config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
81+
Expect(err).ShouldNot(HaveOccurred())
82+
83+
// Create kubernetes client
84+
client, err = kubernetes.NewForConfig(config)
85+
Expect(err).ShouldNot(HaveOccurred())
86+
87+
// Create namespace for test
88+
ns := &corev1.Namespace{ObjectMeta: metav1.ObjectMeta{GenerateName: "clusterapi-test-"}}
89+
ns, err = client.Core().Namespaces().Create(ns)
90+
Expect(err).ShouldNot(HaveOccurred())
91+
testNamespace = ns.ObjectMeta.Name
92+
93+
// Create informer for events in the namespace
94+
factory := informers.NewSharedInformerFactoryWithOptions(client, 0, informers.WithNamespace(testNamespace))
95+
informer = factory.Core().V1().Events().Informer()
96+
stopper = make(chan struct{})
97+
98+
// Create clusterapi client
99+
cs, err := clientset.NewForConfig(config)
100+
Expect(err).ShouldNot(HaveOccurred())
101+
clusterapi = cs.ClusterV1alpha1().Clusters(testNamespace)
102+
})
103+
104+
AfterEach(func() {
105+
close(stopper)
106+
client.Core().Namespaces().Delete(testNamespace, &metav1.DeleteOptions{})
107+
})
108+
109+
Describe("Create Cluster", func() {
110+
It("Should trigger an event", func() {
111+
// Register handler for cluster events
112+
events := make(chan *corev1.Event, 0)
113+
informer.AddEventHandler(cache.ResourceEventHandlerFuncs{
114+
AddFunc: func(obj interface{}) {
115+
e := obj.(*corev1.Event)
116+
if e.InvolvedObject.Kind == "Cluster" {
117+
events <- e
118+
}
119+
},
120+
})
121+
go informer.Run(stopper)
122+
Expect(cache.WaitForCacheSync(stopper, informer.HasSynced)).To(BeTrue())
123+
124+
// Create Cluster
125+
cluster := &clusterv1alpha1.Cluster{
126+
ObjectMeta: metav1.ObjectMeta{
127+
GenerateName: "cluster-",
128+
Namespace: testNamespace,
129+
},
130+
Spec: *clusterSpec.DeepCopy(),
131+
}
132+
_, err := clusterapi.Create(cluster)
133+
Expect(err).ShouldNot(HaveOccurred())
134+
135+
Eventually(checkEvents(events), TIMEOUT, RETRY).ShouldNot(BeNil())
136+
137+
})
138+
})
139+
})

vendor/k8s.io/client-go/informers/admissionregistration/interface.go

Lines changed: 54 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)