Skip to content

Commit ce53027

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 ce53027

File tree

237 files changed

+17572
-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

+17572
-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: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
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+
23+
. "github.com/onsi/ginkgo"
24+
. "github.com/onsi/gomega"
25+
corev1 "k8s.io/api/core/v1"
26+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
27+
informers "k8s.io/client-go/informers"
28+
"k8s.io/client-go/kubernetes"
29+
"k8s.io/client-go/tools/cache"
30+
"k8s.io/client-go/tools/clientcmd"
31+
clusterv1alpha1 "sigs.k8s.io/cluster-api/pkg/apis/cluster/v1alpha1"
32+
clientset "sigs.k8s.io/cluster-api/pkg/client/clientset_generated/clientset"
33+
client "sigs.k8s.io/cluster-api/pkg/client/clientset_generated/clientset/typed/cluster/v1alpha1"
34+
)
35+
36+
var clusterSpec = &clusterv1alpha1.ClusterSpec{
37+
ClusterNetwork: clusterv1alpha1.ClusterNetworkingConfig{
38+
ServiceDomain: "mydomain.com",
39+
Services: clusterv1alpha1.NetworkRanges{
40+
CIDRBlocks: []string{"10.96.0.0/12"},
41+
},
42+
Pods: clusterv1alpha1.NetworkRanges{
43+
CIDRBlocks: []string{"192.168.0.0/16"},
44+
},
45+
},
46+
}
47+
48+
// Timeout for waiting events in seconds
49+
const TIMEOUT = 10
50+
51+
func TestCluster(t *testing.T) {
52+
RegisterFailHandler(Fail)
53+
RunSpecs(t, "Cluster-Controller")
54+
}
55+
56+
var _ = Describe("Cluster-Controller", func() {
57+
var clusterapi client.ClusterInterface
58+
var client *kubernetes.Clientset
59+
var stopper chan struct{}
60+
var informer cache.SharedIndexInformer
61+
var testNamespace string
62+
63+
BeforeEach(func() {
64+
// Load configuration
65+
kubeconfig := os.Getenv("KUBECONFIG")
66+
config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
67+
Expect(err).ShouldNot(HaveOccurred())
68+
69+
// Create kubernetes client
70+
client, err = kubernetes.NewForConfig(config)
71+
Expect(err).ShouldNot(HaveOccurred())
72+
73+
// Create namespace for test
74+
ns := &corev1.Namespace{ObjectMeta: metav1.ObjectMeta{GenerateName: "clusterapi-test-"}}
75+
ns, err = client.Core().Namespaces().Create(ns)
76+
Expect(err).ShouldNot(HaveOccurred())
77+
testNamespace = ns.ObjectMeta.Name
78+
79+
// Create informer for events in the namespace
80+
factory := informers.NewSharedInformerFactoryWithOptions(client, 0, informers.WithNamespace(testNamespace))
81+
informer = factory.Core().V1().Events().Informer()
82+
stopper = make(chan struct{})
83+
84+
// Create clusterapi client
85+
cs, err := clientset.NewForConfig(config)
86+
Expect(err).ShouldNot(HaveOccurred())
87+
clusterapi = cs.ClusterV1alpha1().Clusters(testNamespace)
88+
})
89+
90+
AfterEach(func() {
91+
close(stopper)
92+
client.Core().Namespaces().Delete(testNamespace, &metav1.DeleteOptions{})
93+
})
94+
95+
Describe("Create Cluster", func() {
96+
It("Should trigger an event", func(done Done) {
97+
// Register handler for cluster events
98+
events := make(chan *corev1.Event, 0)
99+
informer.AddEventHandler(cache.ResourceEventHandlerFuncs{
100+
AddFunc: func(obj interface{}) {
101+
// Guard against miscofigured informer not listening to Events
102+
Expect(obj).Should(BeAssignableToTypeOf(&corev1.Event{}))
103+
104+
e := obj.(*corev1.Event)
105+
if e.InvolvedObject.Kind == "Cluster" {
106+
events <- e
107+
}
108+
},
109+
})
110+
go informer.Run(stopper)
111+
Expect(cache.WaitForCacheSync(stopper, informer.HasSynced)).To(BeTrue())
112+
113+
// Create Cluster
114+
cluster := &clusterv1alpha1.Cluster{
115+
ObjectMeta: metav1.ObjectMeta{
116+
GenerateName: "cluster-",
117+
Namespace: testNamespace,
118+
},
119+
Spec: *clusterSpec.DeepCopy(),
120+
}
121+
_, err := clusterapi.Create(cluster)
122+
Expect(err).ShouldNot(HaveOccurred())
123+
124+
Expect(<-events).ShouldNot(BeNil())
125+
126+
close(done)
127+
}, TIMEOUT)
128+
})
129+
})

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)