From 68bb8b827b3827cbee61d3fcc560738beba3e110 Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Thu, 4 Mar 2021 09:51:52 -0500 Subject: [PATCH] Fix or remove tests that don't work in race mode --- pkg/controlplane/instance_openapi_test.go | 95 ------------------- .../tools/cache/mutation_detector_test.go | 24 ++--- 2 files changed, 10 insertions(+), 109 deletions(-) delete mode 100644 pkg/controlplane/instance_openapi_test.go diff --git a/pkg/controlplane/instance_openapi_test.go b/pkg/controlplane/instance_openapi_test.go deleted file mode 100644 index 8af7b7ccbe5..00000000000 --- a/pkg/controlplane/instance_openapi_test.go +++ /dev/null @@ -1,95 +0,0 @@ -// +build !race - -/* -Copyright 2014 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 controlplane - -// This test file is separated from master_test.go so we would be able to disable -// race check for it. TestValidOpenAPISpec will became extremely slow if -race -// flag exists, and will cause the tests to timeout. - -import ( - "net/http" - "net/http/httptest" - "testing" - - "github.com/go-openapi/loads" - "github.com/go-openapi/spec" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/validate" - openapinamer "k8s.io/apiserver/pkg/endpoints/openapi" - genericapiserver "k8s.io/apiserver/pkg/server" - "k8s.io/kubernetes/pkg/api/legacyscheme" - openapigen "k8s.io/kubernetes/pkg/generated/openapi" -) - -// TestValidOpenAPISpec verifies that the open api is added -// at the proper endpoint and the spec is valid. -func TestValidOpenAPISpec(t *testing.T) { - etcdserver, config, assert := setUp(t) - defer etcdserver.Terminate(t) - - config.GenericConfig.EnableIndex = true - config.GenericConfig.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(openapigen.GetOpenAPIDefinitions, openapinamer.NewDefinitionNamer(legacyscheme.Scheme)) - config.GenericConfig.OpenAPIConfig.Info = &spec.Info{ - InfoProps: spec.InfoProps{ - Title: "Kubernetes", - Version: "unversioned", - }, - } - - master, err := config.Complete().New(genericapiserver.NewEmptyDelegate()) - if err != nil { - t.Fatalf("Error in bringing up the master: %v", err) - } - - // make sure swagger.json is not registered before calling PrepareRun. - server := httptest.NewServer(master.GenericAPIServer.Handler.Director) - defer server.Close() - resp, err := http.Get(server.URL + "/openapi/v2") - if !assert.NoError(err) { - t.Errorf("unexpected error: %v", err) - } - assert.Equal(http.StatusNotFound, resp.StatusCode) - - master.GenericAPIServer.PrepareRun() - - resp, err = http.Get(server.URL + "/openapi/v2") - if !assert.NoError(err) { - t.Errorf("unexpected error: %v", err) - } - assert.Equal(http.StatusOK, resp.StatusCode) - - // as json schema - var sch spec.Schema - if assert.NoError(decodeResponse(resp, &sch)) { - validator := validate.NewSchemaValidator(spec.MustLoadSwagger20Schema(), nil, "", strfmt.Default) - res := validator.Validate(&sch) - assert.NoError(res.AsError()) - } - - // Validate OpenApi spec - doc, err := loads.Spec(server.URL + "/openapi/v2") - if assert.NoError(err) { - validator := validate.NewSpecValidator(doc.Schema(), strfmt.Default) - res, warns := validator.Validate(doc) - assert.NoError(res.AsError()) - if !warns.IsValid() { - t.Logf("Open API spec on root has some warnings : %v", warns) - } - } -} diff --git a/staging/src/k8s.io/client-go/tools/cache/mutation_detector_test.go b/staging/src/k8s.io/client-go/tools/cache/mutation_detector_test.go index 41b6942f5b1..6d8f2c3c5e4 100644 --- a/staging/src/k8s.io/client-go/tools/cache/mutation_detector_test.go +++ b/staging/src/k8s.io/client-go/tools/cache/mutation_detector_test.go @@ -1,5 +1,3 @@ -// +build !race - /* Copyright 2016 The Kubernetes Authors. @@ -25,6 +23,7 @@ import ( "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" ) @@ -46,33 +45,30 @@ func TestMutationDetector(t *testing.T) { } stopCh := make(chan struct{}) defer close(stopCh) - addReceived := make(chan bool) mutationFound := make(chan bool) informer := NewSharedInformer(lw, &v1.Pod{}, 1*time.Second).(*sharedIndexInformer) - informer.cacheMutationDetector = &defaultCacheMutationDetector{ + detector := &defaultCacheMutationDetector{ name: "name", period: 1 * time.Second, failureFunc: func(message string) { mutationFound <- true }, } - informer.AddEventHandler( - ResourceEventHandlerFuncs{ - AddFunc: func(obj interface{}) { - addReceived <- true - }, - }, - ) + informer.cacheMutationDetector = detector go informer.Run(stopCh) fakeWatch.Add(pod) - select { - case <-addReceived: - } + wait.PollImmediate(100*time.Millisecond, wait.ForeverTestTimeout, func() (bool, error) { + detector.addedObjsLock.Lock() + defer detector.addedObjsLock.Unlock() + return len(detector.addedObjs) > 0, nil + }) + detector.compareObjectsLock.Lock() pod.Labels["change"] = "true" + detector.compareObjectsLock.Unlock() select { case <-mutationFound: