func extinguish(f *framework.Framework, totalNS int, maxAllowedAfterDel int, maxSeconds int) { var err error By("Creating testing namespaces") wg := &sync.WaitGroup{} wg.Add(totalNS) for n := 0; n < totalNS; n += 1 { go func(n int) { defer wg.Done() defer GinkgoRecover() _, err = f.CreateNamespace(fmt.Sprintf("nslifetest-%v", n), nil) Expect(err).NotTo(HaveOccurred()) }(n) } wg.Wait() //Wait 10 seconds, then SEND delete requests for all the namespaces. By("Waiting 10 seconds") time.Sleep(time.Duration(10 * time.Second)) deleted, err := framework.DeleteNamespaces(f.ClientSet, []string{"nslifetest"}, nil /* skipFilter */) Expect(err).NotTo(HaveOccurred()) Expect(len(deleted)).To(Equal(totalNS)) By("Waiting for namespaces to vanish") //Now POLL until all namespaces have been eradicated. framework.ExpectNoError(wait.Poll(2*time.Second, time.Duration(maxSeconds)*time.Second, func() (bool, error) { var cnt = 0 nsList, err := f.ClientSet.Core().Namespaces().List(v1.ListOptions{}) if err != nil { return false, err } for _, item := range nsList.Items { if strings.Contains(item.Name, "nslifetest") { cnt++ } } if cnt > maxAllowedAfterDel { framework.Logf("Remaining namespaces : %v", cnt) return false, nil } return true, nil })) }
var _ = ginkgo.SynchronizedBeforeSuite(func() []byte { // Run only on Ginkgo node 1 if err := setupProviderConfig(); err != nil { framework.Failf("Failed to setup provider config: %v", err) } c, err := framework.LoadClient() if err != nil { glog.Fatal("Error loading client: ", err) } // Delete any namespaces except default and kube-system. This ensures no // lingering resources are left over from a previous test run. if framework.TestContext.CleanStart { deleted, err := framework.DeleteNamespaces(c, nil /* deleteFilter */, []string{api.NamespaceSystem, api.NamespaceDefault}) if err != nil { framework.Failf("Error deleting orphaned namespaces: %v", err) } glog.Infof("Waiting for deletion of the following namespaces: %v", deleted) if err := framework.WaitForNamespacesDeleted(c, deleted, framework.NamespaceCleanupTimeout); err != nil { framework.Failf("Failed to delete orphaned namespaces %v: %v", deleted, err) } } // Ensure all pods are running and ready before starting tests (otherwise, // cluster infrastructure pods that are being pulled or started can block // test pods from running, and tests that ensure all pods are running and // ready will fail). podStartupTimeout := framework.TestContext.SystemPodsStartupTimeout if err := framework.WaitForPodsRunningReady(c, api.NamespaceSystem, int32(framework.TestContext.MinStartupPods), podStartupTimeout, framework.ImagePullerLabels); err != nil {
var _ = ginkgo.SynchronizedBeforeSuite(func() []byte { // Run only on Ginkgo node 1 if err := setupProviderConfig(); err != nil { framework.Failf("Failed to setup provider config: %v", err) } c, err := framework.LoadClientset() if err != nil { glog.Fatal("Error loading client: ", err) } // Delete any namespaces except default and kube-system. This ensures no // lingering resources are left over from a previous test run. if framework.TestContext.CleanStart { deleted, err := framework.DeleteNamespaces(c, nil /* deleteFilter */, []string{api.NamespaceSystem, v1.NamespaceDefault, federationapi.FederationNamespaceSystem}) if err != nil { framework.Failf("Error deleting orphaned namespaces: %v", err) } glog.Infof("Waiting for deletion of the following namespaces: %v", deleted) if err := framework.WaitForNamespacesDeleted(c, deleted, framework.NamespaceCleanupTimeout); err != nil { framework.Failf("Failed to delete orphaned namespaces %v: %v", deleted, err) } } // In large clusters we may get to this point but still have a bunch // of nodes without Routes created. Since this would make a node // unschedulable, we need to wait until all of them are schedulable. framework.ExpectNoError(framework.WaitForAllNodesSchedulable(c, framework.TestContext.NodeSchedulableTimeout)) // Ensure all pods are running and ready before starting tests (otherwise,