Commit eb75f98d authored by jayunit100's avatar jayunit100

Reintroduce soak test_ns so that it passes continuous E2E's easily, implemented…

Reintroduce soak test_ns so that it passes continuous E2E's easily, implemented polling alternative to channels, Moved to new file
parent 378f3026
...@@ -18,11 +18,11 @@ package e2e ...@@ -18,11 +18,11 @@ package e2e
import ( import (
"fmt" "fmt"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api" //"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/client" "github.com/GoogleCloudPlatform/kubernetes/pkg/client"
"github.com/GoogleCloudPlatform/kubernetes/pkg/fields" "github.com/GoogleCloudPlatform/kubernetes/pkg/fields"
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels" "github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
//"github.com/GoogleCloudPlatform/kubernetes/pkg/util" "github.com/GoogleCloudPlatform/kubernetes/pkg/util/wait"
"strings" "strings"
"time" "time"
...@@ -30,45 +30,32 @@ import ( ...@@ -30,45 +30,32 @@ import (
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
var _ = Describe("ns-soak", func() { 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
}
//This namespace is modified throughout the course of the test. func extinguish(c *client.Client, totalNS int, maxAllowedAfterDel int, maxSeconds int) {
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() { var err error
})
// 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 { for n := 0; n < totalNS; n += 1 {
namespace, err = createTestingNS(fmt.Sprintf("nslifetest-%v", n), c) _, err = createTestingNS(fmt.Sprintf("nslifetest-%v", n), c)
Expect(err).NotTo(HaveOccurred())
} }
//100 seconds after the ns are created, they should all be gone ! //Wait 10 seconds, then SEND delete requests for all the namespaces.
deletionCompleted := time.After(time.Duration(150) * time.Second) time.Sleep(time.Duration(10 * 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()) nsList, err := c.Namespaces().List(labels.Everything(), fields.Everything())
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
for _, item := range nsList.Items { for _, item := range nsList.Items {
if strings.Contains(item.Name, "nslifetest") { if strings.Contains(item.Name, "nslifetest") {
print(item.Name)
if err := c.Namespaces().Delete(item.Name); err != nil { if err := c.Namespaces().Delete(item.Name); err != nil {
Failf("Failed deleting error ::: --- %v ", err) Failf("Failed deleting error ::: --- %v ", err)
} }
...@@ -76,32 +63,39 @@ var _ = Describe("ns-soak", func() { ...@@ -76,32 +63,39 @@ var _ = Describe("ns-soak", func() {
Logf("namespace : %v api call to delete is complete ", item) Logf("namespace : %v api call to delete is complete ", item)
} }
case <-tick: //Now POLL until all namespaces have been eradicated.
nsList, err := c.Namespaces().List(labels.Everything(), fields.Everything()) expectNoError(wait.Poll(2*time.Second, time.Duration(maxSeconds)*time.Second,
Expect(err).NotTo(HaveOccurred()) func() (bool, error) {
var cnt = 0 if rem, err := countRemaining(c, "nslifetest"); err != nil || rem > maxAllowedAfterDel {
for _, item := range nsList.Items { Logf("Remaining namespaces : %v", rem)
if strings.Contains(item.Name, "nslifetest") { return false, err
cnt++ } else {
} return true, nil
}
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()) }
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()) 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)
}
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) })
}) })
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment