func TestOVirtCloudConfiguration(t *testing.T) { config1 := (io.Reader)(nil) _, err1 := cloudprovider.GetCloudProvider("ovirt", config1) if err1 == nil { t.Fatalf("An error is expected when the configuration is missing") } config2 := strings.NewReader("") _, err2 := cloudprovider.GetCloudProvider("ovirt", config2) if err2 == nil { t.Fatalf("An error is expected when the configuration is empty") } config3 := strings.NewReader(` [connection] `) _, err3 := cloudprovider.GetCloudProvider("ovirt", config3) if err3 == nil { t.Fatalf("An error is expected when the uri is missing") } config4 := strings.NewReader(` [connection] uri = https://localhost:8443/ovirt-engine/api `) _, err4 := cloudprovider.GetCloudProvider("ovirt", config4) if err4 != nil { t.Fatalf("Unexpected error creating the provider: %s", err4) } }
// Return cloud provider func getCloudProvider() (*gce_cloud.GCECloud, error) { gceCloudProvider, err := cloudprovider.GetCloudProvider("gce", nil) if err != nil || gceCloudProvider == nil { return nil, err } // The conversion must be safe otherwise bug in GetCloudProvider() return gceCloudProvider.(*gce_cloud.GCECloud), nil }
// NewClusterManager creates a cluster manager for shared resources. // - name: is the name used to tag cluster wide shared resources. This is the // string passed to glbc via --gce-cluster-name. // - defaultBackendNodePort: is the node port of glbc's default backend. This is // the kubernetes Service that serves the 404 page if no urls match. // - defaultHealthCheckPath: is the default path used for L7 health checks, eg: "/healthz" func NewClusterManager( name string, defaultBackendNodePort int64, defaultHealthCheckPath string) (*ClusterManager, error) { cloudInterface, err := cloudprovider.GetCloudProvider("gce", nil) if err != nil { return nil, err } cloud := cloudInterface.(*gce.GCECloud) cluster := ClusterManager{ClusterName: name} cluster.instancePool = NewNodePool(cloud) healthChecker := NewHealthChecker(cloud, defaultHealthCheckPath) cluster.backendPool = NewBackendPool( cloud, healthChecker, cluster.instancePool) defaultBackendHealthChecker := NewHealthChecker(cloud, "/healthz") defaultBackendPool := NewBackendPool( cloud, defaultBackendHealthChecker, cluster.instancePool) cluster.defaultBackendNodePort = defaultBackendNodePort cluster.l7Pool = NewLoadBalancerPool( cloud, defaultBackendPool, defaultBackendNodePort) return &cluster, nil }
func TestE2E(t *testing.T) { util.ReallyCrash = true util.InitLogs() defer util.FlushLogs() if *reportDir != "" { if err := os.MkdirAll(*reportDir, 0755); err != nil { glog.Errorf("Failed creating report directory: %v", err) } defer CoreDump(*reportDir) } if testContext.Provider == "" { glog.Info("The --provider flag is not set. Treating as a conformance test. Some tests may not be run.") } if testContext.Provider == "aws" { awsConfig := "[Global]\n" if cloudConfig.Zone == "" { glog.Fatal("gce-zone must be specified for AWS") } awsConfig += fmt.Sprintf("Zone=%s\n", cloudConfig.Zone) if cloudConfig.ClusterTag == "" { glog.Fatal("--cluster-tag must be specified for AWS") } awsConfig += fmt.Sprintf("KubernetesClusterTag=%s\n", cloudConfig.ClusterTag) var err error cloudConfig.Provider, err = cloudprovider.GetCloudProvider(testContext.Provider, strings.NewReader(awsConfig)) if err != nil { glog.Fatal("Error building AWS provider: ", err) } } // Disable skipped tests unless they are explicitly requested. if config.GinkgoConfig.FocusString == "" && config.GinkgoConfig.SkipString == "" { config.GinkgoConfig.SkipString = "Skipped" } gomega.RegisterFailHandler(ginkgo.Fail) c, err := 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 testContext.CleanStart { deleted, err := deleteNamespaces(c, nil /* deleteFilter */, []string{api.NamespaceSystem, api.NamespaceDefault}) if err != nil { t.Errorf("Error deleting orphaned namespaces: %v", err) } glog.Infof("Waiting for deletion of the following namespaces: %v", deleted) if err := waitForNamespacesDeleted(c, deleted, namespaceCleanupTimeout); err != nil { glog.Fatalf("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). if err := waitForPodsRunningReady(api.NamespaceSystem, testContext.MinStartupPods, podStartupTimeout); err != nil { t.Errorf("Error waiting for all pods to be running and ready: %v", err) return } // Run tests through the Ginkgo runner with output to console + JUnit for Jenkins var r []ginkgo.Reporter if *reportDir != "" { r = append(r, reporters.NewJUnitReporter(path.Join(*reportDir, fmt.Sprintf("junit_%02d.xml", config.GinkgoConfig.ParallelNode)))) } ginkgo.RunSpecsWithDefaultAndCustomReporters(t, "Kubernetes e2e suite", r) }