From 378f302632285d2838734a3356ba5e0277687fdc Mon Sep 17 00:00:00 2001 From: jayunit100 Date: Mon, 18 May 2015 14:23:13 -0400 Subject: [PATCH 1/2] Revert "Merge pull request #8415 from GoogleCloudPlatform/revert-8325-ns_5152015" This reverts commit fec9a524dd886331565c5ba566de440c4e058713, reversing changes made to 26b27b5e0f8b3322af022c997e894476f21fdb61. --- test/e2e/soak_namespace.go | 107 +++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 test/e2e/soak_namespace.go diff --git a/test/e2e/soak_namespace.go b/test/e2e/soak_namespace.go new file mode 100644 index 00000000000..5217e4c5730 --- /dev/null +++ b/test/e2e/soak_namespace.go @@ -0,0 +1,107 @@ +/* +Copyright 2014 The Kubernetes Authors All rights reserved. + +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 e2e + +import ( + "fmt" + "github.com/GoogleCloudPlatform/kubernetes/pkg/api" + "github.com/GoogleCloudPlatform/kubernetes/pkg/client" + "github.com/GoogleCloudPlatform/kubernetes/pkg/fields" + "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" + //"github.com/GoogleCloudPlatform/kubernetes/pkg/util" + "strings" + "time" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("ns-soak", func() { + + //This namespace is modified throughout the course of the test. + var namespace *api.Namespace + var c *client.Client + var err error = nil + BeforeEach(func() { + By("Creating a kubernetes client") + c, err = loadClient() + Expect(err).NotTo(HaveOccurred()) + }) + + AfterEach(func() { + }) + + // First test because it has no dependencies on variables created later on. + totalNS := 100 + It("Namespaces should be deleted within 100 seconds", func() { + for n := 0; n < totalNS; n += 1 { + namespace, err = createTestingNS(fmt.Sprintf("nslifetest-%v", n), c) + } + + //100 seconds after the ns are created, they should all be gone ! + deletionCompleted := time.After(time.Duration(150) * time.Second) + deletionStart := time.After(time.Duration(10 * time.Second)) + tick := time.Tick(2 * time.Second) + T: + for { + select { + case <-deletionCompleted: + Logf("Timeout %v reached. Breaking!", deletionCompleted) + break T + case <-deletionStart: + print("STARTING DELETION") + nsList, err := c.Namespaces().List(labels.Everything(), fields.Everything()) + Expect(err).NotTo(HaveOccurred()) + for _, item := range nsList.Items { + if strings.Contains(item.Name, "nslifetest") { + print(item.Name) + if err := c.Namespaces().Delete(item.Name); err != nil { + Failf("Failed deleting error ::: --- %v ", err) + } + } + Logf("namespace : %v api call to delete is complete ", item) + } + + case <-tick: + nsList, err := c.Namespaces().List(labels.Everything(), fields.Everything()) + Expect(err).NotTo(HaveOccurred()) + var cnt = 0 + for _, item := range nsList.Items { + if strings.Contains(item.Name, "nslifetest") { + cnt++ + } + } + Logf("currently remaining NS == %v", cnt) + //if all the ns's are gone, we break early + if cnt == 0 { + break T + } + } + } + + nsList, err := c.Namespaces().List(labels.Everything(), fields.Everything()) + Expect(err).NotTo(HaveOccurred()) + for _, item := range nsList.Items { + if strings.Contains(item.Name, "nslifetest") { + Failf("FAILED. There is still a remaining ns %v", item.Name) + } + Logf("namespace : %v", item) + } + + }) + +}) From eb75f98ddc09e17140108812affb68985c7d2fe8 Mon Sep 17 00:00:00 2001 From: jayunit100 Date: Mon, 18 May 2015 15:41:46 -0400 Subject: [PATCH 2/2] Reintroduce soak test_ns so that it passes continuous E2E's easily, implemented polling alternative to channels, Moved to new file --- test/e2e/namespace.go | 101 ++++++++++++++++++++++++++++++++++ test/e2e/soak_namespace.go | 107 ------------------------------------- 2 files changed, 101 insertions(+), 107 deletions(-) create mode 100644 test/e2e/namespace.go delete mode 100644 test/e2e/soak_namespace.go diff --git a/test/e2e/namespace.go b/test/e2e/namespace.go new file mode 100644 index 00000000000..b7d438c3751 --- /dev/null +++ b/test/e2e/namespace.go @@ -0,0 +1,101 @@ +/* +Copyright 2014 The Kubernetes Authors All rights reserved. + +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 e2e + +import ( + "fmt" + //"github.com/GoogleCloudPlatform/kubernetes/pkg/api" + "github.com/GoogleCloudPlatform/kubernetes/pkg/client" + "github.com/GoogleCloudPlatform/kubernetes/pkg/fields" + "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" + "github.com/GoogleCloudPlatform/kubernetes/pkg/util/wait" + "strings" + "time" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +func countRemaining(c *client.Client, withName string) (int, error) { + var cnt = 0 + nsList, err := c.Namespaces().List(labels.Everything(), fields.Everything()) + for _, item := range nsList.Items { + if strings.Contains(item.Name, "nslifetest") { + cnt++ + } + } + return cnt, err +} + +func extinguish(c *client.Client, totalNS int, maxAllowedAfterDel int, maxSeconds int) { + + var err error + + for n := 0; n < totalNS; n += 1 { + _, err = createTestingNS(fmt.Sprintf("nslifetest-%v", n), c) + Expect(err).NotTo(HaveOccurred()) + } + + //Wait 10 seconds, then SEND delete requests for all the namespaces. + time.Sleep(time.Duration(10 * time.Second)) + nsList, err := c.Namespaces().List(labels.Everything(), fields.Everything()) + Expect(err).NotTo(HaveOccurred()) + for _, item := range nsList.Items { + if strings.Contains(item.Name, "nslifetest") { + if err := c.Namespaces().Delete(item.Name); err != nil { + Failf("Failed deleting error ::: --- %v ", err) + } + } + Logf("namespace : %v api call to delete is complete ", item) + } + + //Now POLL until all namespaces have been eradicated. + expectNoError(wait.Poll(2*time.Second, time.Duration(maxSeconds)*time.Second, + func() (bool, error) { + if rem, err := countRemaining(c, "nslifetest"); err != nil || rem > maxAllowedAfterDel { + Logf("Remaining namespaces : %v", rem) + return false, err + } else { + return true, nil + } + })) + +} + +var _ = Describe("Namespaces", func() { + + //This namespace is modified throughout the course of the test. + var c *client.Client + var err error = nil + BeforeEach(func() { + By("Creating a kubernetes client") + c, err = loadClient() + Expect(err).NotTo(HaveOccurred()) + }) + + AfterEach(func() { + }) + + //Confirms that namespace draining is functioning reasonably + //at minute intervals. + It("Delete 90 percent of 100 namespace in 150 seconds", + func() { extinguish(c, 100, 10, 150) }) + + //comprehensive draining ; uncomment after #7372 + PIt("Delete ALL of 100 namespace in 150 seconds", + func() { extinguish(c, 100, 0, 150) }) +}) diff --git a/test/e2e/soak_namespace.go b/test/e2e/soak_namespace.go deleted file mode 100644 index 5217e4c5730..00000000000 --- a/test/e2e/soak_namespace.go +++ /dev/null @@ -1,107 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors All rights reserved. - -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 e2e - -import ( - "fmt" - "github.com/GoogleCloudPlatform/kubernetes/pkg/api" - "github.com/GoogleCloudPlatform/kubernetes/pkg/client" - "github.com/GoogleCloudPlatform/kubernetes/pkg/fields" - "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" - //"github.com/GoogleCloudPlatform/kubernetes/pkg/util" - "strings" - "time" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("ns-soak", func() { - - //This namespace is modified throughout the course of the test. - var namespace *api.Namespace - var c *client.Client - var err error = nil - BeforeEach(func() { - By("Creating a kubernetes client") - c, err = loadClient() - Expect(err).NotTo(HaveOccurred()) - }) - - AfterEach(func() { - }) - - // First test because it has no dependencies on variables created later on. - totalNS := 100 - It("Namespaces should be deleted within 100 seconds", func() { - for n := 0; n < totalNS; n += 1 { - namespace, err = createTestingNS(fmt.Sprintf("nslifetest-%v", n), c) - } - - //100 seconds after the ns are created, they should all be gone ! - deletionCompleted := time.After(time.Duration(150) * time.Second) - deletionStart := time.After(time.Duration(10 * time.Second)) - tick := time.Tick(2 * time.Second) - T: - for { - select { - case <-deletionCompleted: - Logf("Timeout %v reached. Breaking!", deletionCompleted) - break T - case <-deletionStart: - print("STARTING DELETION") - nsList, err := c.Namespaces().List(labels.Everything(), fields.Everything()) - Expect(err).NotTo(HaveOccurred()) - for _, item := range nsList.Items { - if strings.Contains(item.Name, "nslifetest") { - print(item.Name) - if err := c.Namespaces().Delete(item.Name); err != nil { - Failf("Failed deleting error ::: --- %v ", err) - } - } - Logf("namespace : %v api call to delete is complete ", item) - } - - case <-tick: - nsList, err := c.Namespaces().List(labels.Everything(), fields.Everything()) - Expect(err).NotTo(HaveOccurred()) - var cnt = 0 - for _, item := range nsList.Items { - if strings.Contains(item.Name, "nslifetest") { - cnt++ - } - } - Logf("currently remaining NS == %v", cnt) - //if all the ns's are gone, we break early - if cnt == 0 { - break T - } - } - } - - nsList, err := c.Namespaces().List(labels.Everything(), fields.Everything()) - Expect(err).NotTo(HaveOccurred()) - for _, item := range nsList.Items { - if strings.Contains(item.Name, "nslifetest") { - Failf("FAILED. There is still a remaining ns %v", item.Name) - } - Logf("namespace : %v", item) - } - - }) - -})