Merge pull request #78486 from yastij/event-integration-test
add integration test for core/v1beta1 event compatibility
This commit is contained in:
		| @@ -48,6 +48,7 @@ filegroup( | ||||
|         "//test/integration/disruption:all-srcs", | ||||
|         "//test/integration/dryrun:all-srcs", | ||||
|         "//test/integration/etcd:all-srcs", | ||||
|         "//test/integration/events:all-srcs", | ||||
|         "//test/integration/evictions:all-srcs", | ||||
|         "//test/integration/examples:all-srcs", | ||||
|         "//test/integration/framework:all-srcs", | ||||
|   | ||||
| @@ -25,7 +25,7 @@ import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	"k8s.io/api/core/v1" | ||||
| 	v1 "k8s.io/api/core/v1" | ||||
| 	apierrors "k8s.io/apimachinery/pkg/api/errors" | ||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||
| 	"k8s.io/apimachinery/pkg/fields" | ||||
| @@ -36,6 +36,7 @@ import ( | ||||
| 	"k8s.io/apimachinery/pkg/util/wait" | ||||
| 	"k8s.io/apimachinery/pkg/watch" | ||||
| 	clientset "k8s.io/client-go/kubernetes" | ||||
|  | ||||
| 	kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing" | ||||
| 	"k8s.io/kubernetes/pkg/api/legacyscheme" | ||||
| 	"k8s.io/kubernetes/pkg/version" | ||||
|   | ||||
							
								
								
									
										37
									
								
								test/integration/events/BUILD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								test/integration/events/BUILD
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| load("@io_bazel_rules_go//go:def.bzl", "go_test") | ||||
|  | ||||
| go_test( | ||||
|     name = "go_default_test", | ||||
|     srcs = [ | ||||
|         "events_test.go", | ||||
|         "main_test.go", | ||||
|     ], | ||||
|     tags = ["integration"], | ||||
|     deps = [ | ||||
|         "//cmd/kube-apiserver/app/testing:go_default_library", | ||||
|         "//staging/src/k8s.io/api/core/v1:go_default_library", | ||||
|         "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", | ||||
|         "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", | ||||
|         "//staging/src/k8s.io/client-go/kubernetes:go_default_library", | ||||
|         "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", | ||||
|         "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", | ||||
|         "//staging/src/k8s.io/client-go/tools/events:go_default_library", | ||||
|         "//staging/src/k8s.io/client-go/tools/record:go_default_library", | ||||
|         "//staging/src/k8s.io/client-go/tools/reference:go_default_library", | ||||
|         "//test/integration/framework:go_default_library", | ||||
|     ], | ||||
| ) | ||||
|  | ||||
| filegroup( | ||||
|     name = "package-srcs", | ||||
|     srcs = glob(["**"]), | ||||
|     tags = ["automanaged"], | ||||
|     visibility = ["//visibility:private"], | ||||
| ) | ||||
|  | ||||
| filegroup( | ||||
|     name = "all-srcs", | ||||
|     srcs = [":package-srcs"], | ||||
|     tags = ["automanaged"], | ||||
|     visibility = ["//visibility:public"], | ||||
| ) | ||||
							
								
								
									
										94
									
								
								test/integration/events/events_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								test/integration/events/events_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | ||||
| /* | ||||
| Copyright 2019 The Kubernetes Authors. | ||||
|  | ||||
| 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 events | ||||
|  | ||||
| import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	v1 "k8s.io/api/core/v1" | ||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||
| 	clientset "k8s.io/client-go/kubernetes" | ||||
|  | ||||
| 	"k8s.io/apimachinery/pkg/util/wait" | ||||
| 	"k8s.io/client-go/kubernetes/scheme" | ||||
| 	typedv1 "k8s.io/client-go/kubernetes/typed/core/v1" | ||||
| 	"k8s.io/client-go/tools/events" | ||||
| 	"k8s.io/client-go/tools/record" | ||||
| 	ref "k8s.io/client-go/tools/reference" | ||||
| 	kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing" | ||||
| 	"k8s.io/kubernetes/test/integration/framework" | ||||
| ) | ||||
|  | ||||
| func TestEventCompatibility(t *testing.T) { | ||||
| 	result := kubeapiservertesting.StartTestServerOrDie(t, nil, []string{"--disable-admission-plugins", "ServiceAccount"}, framework.SharedEtcd()) | ||||
| 	defer result.TearDownFn() | ||||
|  | ||||
| 	client := clientset.NewForConfigOrDie(result.ClientConfig) | ||||
|  | ||||
| 	testPod := &v1.Pod{ | ||||
| 		ObjectMeta: metav1.ObjectMeta{ | ||||
| 			SelfLink:  "/api/version/pods/foo", | ||||
| 			Name:      "foo", | ||||
| 			Namespace: "default", | ||||
| 			UID:       "bar", | ||||
| 		}, | ||||
| 	} | ||||
|  | ||||
| 	regarding, err := ref.GetReference(scheme.Scheme, testPod) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
|  | ||||
| 	related, err := ref.GetPartialReference(scheme.Scheme, testPod, ".spec.containers[0]") | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	stopCh := make(chan struct{}) | ||||
| 	oldBroadcaster := record.NewBroadcaster() | ||||
| 	oldRecorder := oldBroadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: "integration"}) | ||||
| 	oldBroadcaster.StartRecordingToSink(&typedv1.EventSinkImpl{Interface: client.CoreV1().Events("")}) | ||||
| 	oldRecorder.Eventf(regarding, v1.EventTypeNormal, "started", "note") | ||||
|  | ||||
| 	newBroadcaster := events.NewBroadcaster(&events.EventSinkImpl{Interface: client.EventsV1beta1().Events("")}) | ||||
| 	newRecorder := newBroadcaster.NewRecorder(scheme.Scheme, "k8s.io/kube-scheduler") | ||||
| 	newBroadcaster.StartRecordingToSink(stopCh) | ||||
| 	newRecorder.Eventf(regarding, related, v1.EventTypeNormal, "memoryPressure", "killed", "memory pressure") | ||||
| 	err = wait.PollImmediate(100*time.Millisecond, 20*time.Second, func() (done bool, err error) { | ||||
| 		v1beta1Events, err := client.EventsV1beta1().Events("").List(metav1.ListOptions{}) | ||||
| 		if err != nil { | ||||
| 			return false, err | ||||
| 		} | ||||
|  | ||||
| 		if len(v1beta1Events.Items) != 2 { | ||||
| 			return false, nil | ||||
| 		} | ||||
|  | ||||
| 		events, err := client.CoreV1().Events("").List(metav1.ListOptions{}) | ||||
| 		if err != nil { | ||||
| 			return false, err | ||||
| 		} | ||||
|  | ||||
| 		if len(events.Items) != 2 { | ||||
| 			return false, nil | ||||
| 		} | ||||
| 		return true, nil | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("unexpected err: %v", err) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										27
									
								
								test/integration/events/main_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								test/integration/events/main_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| /* | ||||
| Copyright 2019 The Kubernetes Authors. | ||||
|  | ||||
| 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 events | ||||
|  | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"k8s.io/kubernetes/test/integration/framework" | ||||
| ) | ||||
|  | ||||
| func TestMain(m *testing.M) { | ||||
| 	framework.EtcdMain(m.Run) | ||||
| } | ||||
							
								
								
									
										1
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							| @@ -1514,6 +1514,7 @@ k8s.io/client-go/tools/clientcmd | ||||
| k8s.io/client-go/tools/clientcmd/api | ||||
| k8s.io/client-go/tools/clientcmd/api/latest | ||||
| k8s.io/client-go/tools/clientcmd/api/v1 | ||||
| k8s.io/client-go/tools/events | ||||
| k8s.io/client-go/tools/leaderelection | ||||
| k8s.io/client-go/tools/leaderelection/resourcelock | ||||
| k8s.io/client-go/tools/metrics | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Kubernetes Prow Robot
					Kubernetes Prow Robot