From 28ed7875e74ab863b55dc8e2aabacdadbecfe57f Mon Sep 17 00:00:00 2001 From: Vy Ta Date: Thu, 1 Nov 2018 14:19:14 -0700 Subject: [PATCH 01/14] Adding density test --- test/e2e/e2e_test.go | 1 + test/e2e/windows/density.go | 319 ++++++++++++++++++++++++++++++++++ test/e2e/windows/framework.go | 23 +++ 3 files changed, 343 insertions(+) create mode 100644 test/e2e/windows/density.go create mode 100644 test/e2e/windows/framework.go diff --git a/test/e2e/e2e_test.go b/test/e2e/e2e_test.go index 9aeb5fd189a..d7028ebfed2 100644 --- a/test/e2e/e2e_test.go +++ b/test/e2e/e2e_test.go @@ -44,6 +44,7 @@ import ( _ "k8s.io/kubernetes/test/e2e/servicecatalog" _ "k8s.io/kubernetes/test/e2e/storage" _ "k8s.io/kubernetes/test/e2e/ui" + _ "k8s.io/kubernetes/test/e2e/windows" ) var viperConfig = flag.String("viper-config", "", "The name of a viper config file (https://github.com/spf13/viper#what-is-viper). All e2e command line parameters can also be configured in such a file. May contain a path and may or may not contain the file suffix. The default is to look for an optional file with `e2e` as base name. If a file is specified explicitly, it must be present.") diff --git a/test/e2e/windows/density.go b/test/e2e/windows/density.go new file mode 100644 index 00000000000..58baf1d7925 --- /dev/null +++ b/test/e2e/windows/density.go @@ -0,0 +1,319 @@ +/* +Copyright 2018 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 windows + +import ( + "fmt" + "sort" + "sync" + "time" + + "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/tools/cache" + stats "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" + "k8s.io/kubernetes/test/e2e/framework" + imageutils "k8s.io/kubernetes/test/utils/image" + "k8s.io/apimachinery/pkg/util/uuid" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = SIGDescribe("Density [Serial] [Slow]", func() { + + f := framework.NewDefaultFramework("density-test-windows") + + Context("create a batch of pods", func() { + // TODO(coufon): the values are generous, set more precise limits with benchmark data + // and add more tests + dTests := []densityTest{ + { + podsNr: 10, + interval: 0 * time.Millisecond, + cpuLimits: framework.ContainersCPUSummary{ + stats.SystemContainerKubelet: {0.50: 0.30, 0.95: 0.50}, + stats.SystemContainerRuntime: {0.50: 0.40, 0.95: 0.60}, + }, + memLimits: framework.ResourceUsagePerContainer{ + stats.SystemContainerKubelet: &framework.ContainerResourceUsage{MemoryRSSInBytes: 100 * 1024 * 1024}, + stats.SystemContainerRuntime: &framework.ContainerResourceUsage{MemoryRSSInBytes: 500 * 1024 * 1024}, + }, + // percentile limit of single pod startup latency + podStartupLimits: framework.LatencyMetric{ + Perc50: 30 * time.Second, + Perc90: 54 * time.Second, + Perc99: 59 * time.Second, + }, + // upbound of startup latency of a batch of pods + podBatchStartupLimit: 10 * time.Minute, + }, + } + + for _, testArg := range dTests { + itArg := testArg + desc := fmt.Sprintf("latency/resource should be within limit when create %d pods with %v interval", itArg.podsNr, itArg.interval) + It(desc, func() { + itArg.createMethod = "batch" + + runDensityBatchTest(f, itArg) + + }) + } + }) + + +}) + +type densityTest struct { + // number of pods + podsNr int + // number of background pods + bgPodsNr int + // interval between creating pod (rate control) + interval time.Duration + // create pods in 'batch' or 'sequence' + createMethod string + // API QPS limit + APIQPSLimit int + // performance limits + cpuLimits framework.ContainersCPUSummary + memLimits framework.ResourceUsagePerContainer + podStartupLimits framework.LatencyMetric + podBatchStartupLimit time.Duration +} + +// runDensityBatchTest runs the density batch pod creation test +func runDensityBatchTest(f *framework.Framework, testArg densityTest) (time.Duration, []framework.PodLatencyData) { + const ( + podType = "density_test_pod" + sleepBeforeCreatePods = 30 * time.Second + ) + var ( + mutex = &sync.Mutex{} + watchTimes = make(map[string]metav1.Time, 0) + stopCh = make(chan struct{}) + ) + + // create test pod data structure + pods := newTestPods(testArg.podsNr, false, imageutils.GetPauseImageName(), podType) + + // the controller watches the change of pod status + controller := newInformerWatchPod(f, mutex, watchTimes, podType) + go controller.Run(stopCh) + defer close(stopCh) + + // TODO(coufon): in the test we found kubelet starts while it is busy on something, as a result 'syncLoop' + // does not response to pod creation immediately. Creating the first pod has a delay around 5s. + // The node status has already been 'ready' so `wait and check node being ready does not help here. + // Now wait here for a grace period to let 'syncLoop' be ready + time.Sleep(sleepBeforeCreatePods) + + //rc.Start() + + By("Creating a batch of pods") + // It returns a map['pod name']'creation time' containing the creation timestamps + createTimes := createBatchPodWithRateControl(f, pods, testArg.interval) + + By("Waiting for all Pods to be observed by the watch...") + + Eventually(func() bool { + return len(watchTimes) == testArg.podsNr + }, 10*time.Minute, 10*time.Second).Should(BeTrue()) + + if len(watchTimes) < testArg.podsNr { + framework.Failf("Timeout reached waiting for all Pods to be observed by the watch.") + } + + // Analyze results + var ( + firstCreate metav1.Time + lastRunning metav1.Time + init = true + e2eLags = make([]framework.PodLatencyData, 0) + ) + + for name, create := range createTimes { + watch, ok := watchTimes[name] + Expect(ok).To(Equal(true)) + + e2eLags = append(e2eLags, + framework.PodLatencyData{Name: name, Latency: watch.Time.Sub(create.Time)}) + + if !init { + if firstCreate.Time.After(create.Time) { + firstCreate = create + } + if lastRunning.Time.Before(watch.Time) { + lastRunning = watch + } + } else { + init = false + firstCreate, lastRunning = create, watch + } + } + + sort.Sort(framework.LatencySlice(e2eLags)) + batchLag := lastRunning.Time.Sub(firstCreate.Time) + + deletePodsSync(f, pods) + + return batchLag, e2eLags +} + +// createBatchPodWithRateControl creates a batch of pods concurrently, uses one goroutine for each creation. +// between creations there is an interval for throughput control +func createBatchPodWithRateControl(f *framework.Framework, pods []*v1.Pod, interval time.Duration) map[string]metav1.Time { + createTimes := make(map[string]metav1.Time) + for _, pod := range pods { + createTimes[pod.ObjectMeta.Name] = metav1.Now() + go f.PodClient().Create(pod) + time.Sleep(interval) + } + return createTimes +} + +// newInformerWatchPod creates an informer to check whether all pods are running. +func newInformerWatchPod(f *framework.Framework, mutex *sync.Mutex, watchTimes map[string]metav1.Time, podType string) cache.Controller { + ns := f.Namespace.Name + checkPodRunning := func(p *v1.Pod) { + mutex.Lock() + defer mutex.Unlock() + defer GinkgoRecover() + + if p.Status.Phase == v1.PodRunning { + if _, found := watchTimes[p.Name]; !found { + watchTimes[p.Name] = metav1.Now() + } + } + } + + _, controller := cache.NewInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + options.LabelSelector = labels.SelectorFromSet(labels.Set{"type": podType}).String() + obj, err := f.ClientSet.CoreV1().Pods(ns).List(options) + return runtime.Object(obj), err + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + options.LabelSelector = labels.SelectorFromSet(labels.Set{"type": podType}).String() + return f.ClientSet.CoreV1().Pods(ns).Watch(options) + }, + }, + &v1.Pod{}, + 0, + cache.ResourceEventHandlerFuncs{ + AddFunc: func(obj interface{}) { + p, ok := obj.(*v1.Pod) + Expect(ok).To(Equal(true)) + go checkPodRunning(p) + }, + UpdateFunc: func(oldObj, newObj interface{}) { + p, ok := newObj.(*v1.Pod) + Expect(ok).To(Equal(true)) + go checkPodRunning(p) + }, + }, + ) + return controller +} + + +// newTestPods creates a list of pods (specification) for test. +func newTestPods(numPods int, volume bool, imageName, podType string) []*v1.Pod { + var pods []*v1.Pod + for i := 0; i < numPods; i++ { + podName := "test-" + string(uuid.NewUUID()) + labels := map[string]string{ + "type": podType, + "name": podName, + } + if volume { + pods = append(pods, + &v1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: podName, + Labels: labels, + }, + Spec: v1.PodSpec{ + // Restart policy is always (default). + Containers: []v1.Container{ + { + Image: imageName, + Name: podName, + VolumeMounts: []v1.VolumeMount{ + {MountPath: "/test-volume-mnt", Name: podName + "-volume"}, + }, + }, + }, + NodeSelector: map[string]string{ + "beta.kubernetes.io/os": "windows", + }, + Volumes: []v1.Volume{ + {Name: podName + "-volume", VolumeSource: v1.VolumeSource{EmptyDir: &v1.EmptyDirVolumeSource{}}}, + }, + }, + }) + } else { + pods = append(pods, + &v1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: podName, + Labels: labels, + }, + Spec: v1.PodSpec{ + // Restart policy is always (default). + Containers: []v1.Container{ + { + Image: imageName, + Name: podName, + }, + }, + NodeSelector: map[string]string{ + "beta.kubernetes.io/os": "windows", + }, + }, + }) + } + + } + return pods +} + +// deletePodsSync deletes a list of pods and block until pods disappear. +func deletePodsSync(f *framework.Framework, pods []*v1.Pod) { + var wg sync.WaitGroup + for _, pod := range pods { + wg.Add(1) + go func(pod *v1.Pod) { + defer GinkgoRecover() + defer wg.Done() + + err := f.PodClient().Delete(pod.ObjectMeta.Name, metav1.NewDeleteOptions(30)) + Expect(err).NotTo(HaveOccurred()) + + Expect(framework.WaitForPodToDisappear(f.ClientSet, f.Namespace.Name, pod.ObjectMeta.Name, labels.Everything(), + 30*time.Second, 10*time.Minute)).NotTo(HaveOccurred()) + }(pod) + } + wg.Wait() + return +} + diff --git a/test/e2e/windows/framework.go b/test/e2e/windows/framework.go new file mode 100644 index 00000000000..ef806ed72cb --- /dev/null +++ b/test/e2e/windows/framework.go @@ -0,0 +1,23 @@ +/* +Copyright 2017 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 windows + +import "github.com/onsi/ginkgo" + +func SIGDescribe(text string, body func()) bool { + return ginkgo.Describe("[sig-windows] "+text, body) +} From 0a09b1d2a7ccb669fe056e847b35d4da39659877 Mon Sep 17 00:00:00 2001 From: Vy Ta Date: Mon, 10 Dec 2018 16:09:10 -0800 Subject: [PATCH 02/14] Adding README.md --- test/e2e/windows/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 test/e2e/windows/README.md diff --git a/test/e2e/windows/README.md b/test/e2e/windows/README.md new file mode 100644 index 00000000000..e4305170ed0 --- /dev/null +++ b/test/e2e/windows/README.md @@ -0,0 +1,10 @@ +# Notes to run sig-windows tests + +1. Prereqs: + * KUBECONFIG=path/to/kubeconfig + * curl https://raw.githubusercontent.com/e2e-win/e2e-win-prow-deployment/master/repo-list.txt -o repo_list.yaml + * export KUBE_TEST_REPO_LIST=$(pwd)/repo_list.yaml + +1. Run only sig-windows tests: + + ```./e2e.test --provider=local --ginkgo.noColor --ginkgo.focus=.*sig-windows*``` From 906aceb89a87f19e000f5795537eaeeac87542ef Mon Sep 17 00:00:00 2001 From: Vy Ta Date: Thu, 27 Dec 2018 15:46:26 -0700 Subject: [PATCH 03/14] Making requested changes --- test/e2e/windows/density.go | 18 ------------------ test/e2e/windows/framework.go | 2 +- 2 files changed, 1 insertion(+), 19 deletions(-) diff --git a/test/e2e/windows/density.go b/test/e2e/windows/density.go index 58baf1d7925..4416e80ca4c 100644 --- a/test/e2e/windows/density.go +++ b/test/e2e/windows/density.go @@ -28,7 +28,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/tools/cache" - stats "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" "k8s.io/kubernetes/test/e2e/framework" imageutils "k8s.io/kubernetes/test/utils/image" "k8s.io/apimachinery/pkg/util/uuid" @@ -48,14 +47,6 @@ var _ = SIGDescribe("Density [Serial] [Slow]", func() { { podsNr: 10, interval: 0 * time.Millisecond, - cpuLimits: framework.ContainersCPUSummary{ - stats.SystemContainerKubelet: {0.50: 0.30, 0.95: 0.50}, - stats.SystemContainerRuntime: {0.50: 0.40, 0.95: 0.60}, - }, - memLimits: framework.ResourceUsagePerContainer{ - stats.SystemContainerKubelet: &framework.ContainerResourceUsage{MemoryRSSInBytes: 100 * 1024 * 1024}, - stats.SystemContainerRuntime: &framework.ContainerResourceUsage{MemoryRSSInBytes: 500 * 1024 * 1024}, - }, // percentile limit of single pod startup latency podStartupLimits: framework.LatencyMetric{ Perc50: 30 * time.Second, @@ -104,7 +95,6 @@ type densityTest struct { func runDensityBatchTest(f *framework.Framework, testArg densityTest) (time.Duration, []framework.PodLatencyData) { const ( podType = "density_test_pod" - sleepBeforeCreatePods = 30 * time.Second ) var ( mutex = &sync.Mutex{} @@ -120,14 +110,6 @@ func runDensityBatchTest(f *framework.Framework, testArg densityTest) (time.Dura go controller.Run(stopCh) defer close(stopCh) - // TODO(coufon): in the test we found kubelet starts while it is busy on something, as a result 'syncLoop' - // does not response to pod creation immediately. Creating the first pod has a delay around 5s. - // The node status has already been 'ready' so `wait and check node being ready does not help here. - // Now wait here for a grace period to let 'syncLoop' be ready - time.Sleep(sleepBeforeCreatePods) - - //rc.Start() - By("Creating a batch of pods") // It returns a map['pod name']'creation time' containing the creation timestamps createTimes := createBatchPodWithRateControl(f, pods, testArg.interval) diff --git a/test/e2e/windows/framework.go b/test/e2e/windows/framework.go index ef806ed72cb..e6e03def3a0 100644 --- a/test/e2e/windows/framework.go +++ b/test/e2e/windows/framework.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 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. From 8d3ea6590df8a28f5ee46d31b847d22b4fc48e0d Mon Sep 17 00:00:00 2001 From: Vy Ta Date: Thu, 27 Dec 2018 15:51:44 -0700 Subject: [PATCH 04/14] Adding diff summary --- test/e2e/windows/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/e2e/windows/README.md b/test/e2e/windows/README.md index e4305170ed0..a79bff6016d 100644 --- a/test/e2e/windows/README.md +++ b/test/e2e/windows/README.md @@ -8,3 +8,8 @@ 1. Run only sig-windows tests: ```./e2e.test --provider=local --ginkgo.noColor --ginkgo.focus=.*sig-windows*``` + + +# e2e_node/density_test diff + +This test is borrowed from the density test in e2e_node/density_test. All but the first test were omitted as well as some logging. \ No newline at end of file From ecee40158c9827221f547bff2ae04c8fe9c36266 Mon Sep 17 00:00:00 2001 From: Vy Ta Date: Thu, 27 Dec 2018 15:55:10 -0700 Subject: [PATCH 05/14] Adding Feature tag --- test/e2e/windows/density.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/windows/density.go b/test/e2e/windows/density.go index 4416e80ca4c..bd1f6b55d91 100644 --- a/test/e2e/windows/density.go +++ b/test/e2e/windows/density.go @@ -36,7 +36,7 @@ import ( . "github.com/onsi/gomega" ) -var _ = SIGDescribe("Density [Serial] [Slow]", func() { +var _ = SIGDescribe("[Feature:Windows] Density [Serial] [Slow]", func() { f := framework.NewDefaultFramework("density-test-windows") From 210bf624ea7eda4acd3af16c90eb1ea0d51667ba Mon Sep 17 00:00:00 2001 From: Patrick Lang Date: Mon, 7 Jan 2019 22:34:37 +0000 Subject: [PATCH 06/14] Adding OWNERS --- test/e2e/windows/OWNERS | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 test/e2e/windows/OWNERS diff --git a/test/e2e/windows/OWNERS b/test/e2e/windows/OWNERS new file mode 100644 index 00000000000..42be2d20a56 --- /dev/null +++ b/test/e2e/windows/OWNERS @@ -0,0 +1,12 @@ +approvers: +- dchen1107 +- michmike +- patricklang +reviewers: +- adelina-t +- bclau +- benmoss +- dineshgovindasamy +- feiskyer +- madhanrm +- yujuhong From 084a763926d296b7a3eff849800eb4acb0b191fb Mon Sep 17 00:00:00 2001 From: Patrick Lang Date: Mon, 7 Jan 2019 22:53:40 +0000 Subject: [PATCH 07/14] Maybe fix bazel build --- test/e2e/BUILD | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/e2e/BUILD b/test/e2e/BUILD index a7f1864dc93..477f449c40d 100644 --- a/test/e2e/BUILD +++ b/test/e2e/BUILD @@ -32,7 +32,8 @@ go_test( "//test/e2e/servicecatalog:go_default_library", "//test/e2e/storage:go_default_library", "//test/e2e/ui:go_default_library", - ], + "//test/e2e/windows:go_default_library", + ], ) go_library( From 8f858afe699479c98d88f7425d1861004765966b Mon Sep 17 00:00:00 2001 From: Patrick Lang Date: Tue, 8 Jan 2019 06:34:48 +0000 Subject: [PATCH 08/14] Ran hack/update-bazel.sh --- test/e2e/BUILD | 2 +- test/e2e/windows/BUILD | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 test/e2e/windows/BUILD diff --git a/test/e2e/BUILD b/test/e2e/BUILD index 477f449c40d..1625d51ea0d 100644 --- a/test/e2e/BUILD +++ b/test/e2e/BUILD @@ -33,7 +33,7 @@ go_test( "//test/e2e/storage:go_default_library", "//test/e2e/ui:go_default_library", "//test/e2e/windows:go_default_library", - ], + ], ) go_library( diff --git a/test/e2e/windows/BUILD b/test/e2e/windows/BUILD new file mode 100644 index 00000000000..ad526c96ad3 --- /dev/null +++ b/test/e2e/windows/BUILD @@ -0,0 +1,24 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "density.go", + "framework.go", + ], + importpath = "k8s.io/kubernetes/test/e2e/windows", + visibility = ["//visibility:public"], + deps = [ + "//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/labels:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + "//test/e2e/framework:go_default_library", + "//test/utils/image:go_default_library", + "//vendor/github.com/onsi/ginkgo:go_default_library", + "//vendor/github.com/onsi/gomega:go_default_library", + ], +) From 765057765c5b24d928ed8bfb34ffbd0fb2d350da Mon Sep 17 00:00:00 2001 From: Vy Ta Date: Tue, 8 Jan 2019 10:11:35 -0800 Subject: [PATCH 09/14] golint failure updates, and added skip check for non-windows --- hack/.golint_failures | 1 + test/e2e/BUILD | 1 + test/e2e/windows/density.go | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/hack/.golint_failures b/hack/.golint_failures index bee5a5a403d..2abec9c894b 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -749,6 +749,7 @@ test/e2e/ui test/e2e/upgrades test/e2e/upgrades/apps test/e2e/upgrades/storage +test/e2e/windows test/e2e_kubeadm test/e2e_node test/e2e_node/builder diff --git a/test/e2e/BUILD b/test/e2e/BUILD index 1625d51ea0d..550d1a23bac 100644 --- a/test/e2e/BUILD +++ b/test/e2e/BUILD @@ -121,6 +121,7 @@ filegroup( "//test/e2e/testing-manifests:all-srcs", "//test/e2e/ui:all-srcs", "//test/e2e/upgrades:all-srcs", + "//test/e2e/windows:all-srcs" ], tags = ["automanaged"], ) diff --git a/test/e2e/windows/density.go b/test/e2e/windows/density.go index bd1f6b55d91..03370d74b4f 100644 --- a/test/e2e/windows/density.go +++ b/test/e2e/windows/density.go @@ -40,6 +40,11 @@ var _ = SIGDescribe("[Feature:Windows] Density [Serial] [Slow]", func() { f := framework.NewDefaultFramework("density-test-windows") + BeforeEach(func() { + // NOTE(vyta): these tests are Windows specific + framework.SkipUnlessNodeOSDistroIs("windows") + }) + Context("create a batch of pods", func() { // TODO(coufon): the values are generous, set more precise limits with benchmark data // and add more tests From 4bf6b670a2cb99501c5c4f54a3b2417bdc21f7c5 Mon Sep 17 00:00:00 2001 From: Vy Ta Date: Tue, 8 Jan 2019 10:35:23 -0800 Subject: [PATCH 10/14] fix bazel test --- test/e2e/windows/BUILD | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/e2e/windows/BUILD b/test/e2e/windows/BUILD index ad526c96ad3..0df9efe1ead 100644 --- a/test/e2e/windows/BUILD +++ b/test/e2e/windows/BUILD @@ -1,3 +1,5 @@ +package(default_visibility = ["//visibility:public"]) + load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( @@ -22,3 +24,16 @@ go_library( "//vendor/github.com/onsi/gomega:go_default_library", ], ) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) \ No newline at end of file From 5fe882553053a3a7d138376fed7d17e39c789b50 Mon Sep 17 00:00:00 2001 From: Vy Ta Date: Tue, 8 Jan 2019 13:21:19 -0800 Subject: [PATCH 11/14] Adding newlines --- test/e2e/windows/BUILD | 2 +- test/e2e/windows/README.md | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/test/e2e/windows/BUILD b/test/e2e/windows/BUILD index 0df9efe1ead..98bb0a34cdf 100644 --- a/test/e2e/windows/BUILD +++ b/test/e2e/windows/BUILD @@ -36,4 +36,4 @@ filegroup( name = "all-srcs", srcs = [":package-srcs"], tags = ["automanaged"], -) \ No newline at end of file +) diff --git a/test/e2e/windows/README.md b/test/e2e/windows/README.md index a79bff6016d..c3d7935dc83 100644 --- a/test/e2e/windows/README.md +++ b/test/e2e/windows/README.md @@ -7,7 +7,9 @@ 1. Run only sig-windows tests: - ```./e2e.test --provider=local --ginkgo.noColor --ginkgo.focus=.*sig-windows*``` + ```bash + ./e2e.test --provider=local --ginkgo.noColor --ginkgo.focus=.*sig-windows* + ``` # e2e_node/density_test diff From 6ac7838a19f4e513be413a83880694931250d5f9 Mon Sep 17 00:00:00 2001 From: Vy Ta Date: Tue, 8 Jan 2019 22:39:40 +0000 Subject: [PATCH 12/14] ran ./hack/update-bazel.sh --- test/e2e/BUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/BUILD b/test/e2e/BUILD index 550d1a23bac..05780965216 100644 --- a/test/e2e/BUILD +++ b/test/e2e/BUILD @@ -121,7 +121,7 @@ filegroup( "//test/e2e/testing-manifests:all-srcs", "//test/e2e/ui:all-srcs", "//test/e2e/upgrades:all-srcs", - "//test/e2e/windows:all-srcs" + "//test/e2e/windows:all-srcs", ], tags = ["automanaged"], ) From ec8151d7bbf47993aca47c5fa792558c35c5862f Mon Sep 17 00:00:00 2001 From: Vy Ta Date: Tue, 8 Jan 2019 22:40:38 +0000 Subject: [PATCH 13/14] Ran ./hack/update-gofmt.sh --- test/e2e/windows/density.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/test/e2e/windows/density.go b/test/e2e/windows/density.go index 03370d74b4f..0bdc777b4db 100644 --- a/test/e2e/windows/density.go +++ b/test/e2e/windows/density.go @@ -26,11 +26,11 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/uuid" "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/tools/cache" "k8s.io/kubernetes/test/e2e/framework" imageutils "k8s.io/kubernetes/test/utils/image" - "k8s.io/apimachinery/pkg/util/uuid" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" @@ -75,7 +75,6 @@ var _ = SIGDescribe("[Feature:Windows] Density [Serial] [Slow]", func() { } }) - }) type densityTest struct { @@ -99,7 +98,7 @@ type densityTest struct { // runDensityBatchTest runs the density batch pod creation test func runDensityBatchTest(f *framework.Framework, testArg densityTest) (time.Duration, []framework.PodLatencyData) { const ( - podType = "density_test_pod" + podType = "density_test_pod" ) var ( mutex = &sync.Mutex{} @@ -222,7 +221,6 @@ func newInformerWatchPod(f *framework.Framework, mutex *sync.Mutex, watchTimes m return controller } - // newTestPods creates a list of pods (specification) for test. func newTestPods(numPods int, volume bool, imageName, podType string) []*v1.Pod { var pods []*v1.Pod @@ -303,4 +301,3 @@ func deletePodsSync(f *framework.Framework, pods []*v1.Pod) { wg.Wait() return } - From 9468ca420ded086c4e0a1e71beb9aec8b8f0062d Mon Sep 17 00:00:00 2001 From: Patrick Lang Date: Wed, 9 Jan 2019 00:45:25 +0000 Subject: [PATCH 14/14] Updating README.md with fixed repo-list and --node-os-distro --- test/e2e/windows/README.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/test/e2e/windows/README.md b/test/e2e/windows/README.md index c3d7935dc83..6abd38b2b5e 100644 --- a/test/e2e/windows/README.md +++ b/test/e2e/windows/README.md @@ -1,17 +1,20 @@ # Notes to run sig-windows tests 1. Prereqs: - * KUBECONFIG=path/to/kubeconfig - * curl https://raw.githubusercontent.com/e2e-win/e2e-win-prow-deployment/master/repo-list.txt -o repo_list.yaml - * export KUBE_TEST_REPO_LIST=$(pwd)/repo_list.yaml + +```bash +KUBECONFIG=path/to/kubeconfig +curl https://raw.githubusercontent.com/e2e-win/e2e-win-prow-deployment/master/repo-list -o repo_list +export KUBE_TEST_REPO_LIST=$(pwd)/repo_list +``` 1. Run only sig-windows tests: ```bash - ./e2e.test --provider=local --ginkgo.noColor --ginkgo.focus=.*sig-windows* + ./e2e.test --provider=local --ginkgo.noColor --ginkgo.focus="\[sig-windows\]" --node-os-distro="windows" ``` # e2e_node/density_test diff -This test is borrowed from the density test in e2e_node/density_test. All but the first test were omitted as well as some logging. \ No newline at end of file +This test is borrowed from the density test in e2e_node/density_test. All but the first test were omitted as well as some logging.