// create a cluster and run test func runTest(t *Test, pltfrm string) error { var err error var cluster platform.Cluster if pltfrm == "qemu" { cluster, err = platform.NewQemuCluster(*QemuImage) } else if pltfrm == "gce" { cluster, err = platform.NewGCECluster(GCEOpts()) } else { plog.Errorf("Invalid platform: %v", pltfrm) } if err != nil { return fmt.Errorf("Cluster failed: %v", err) } defer func() { if err := cluster.Destroy(); err != nil { plog.Errorf("cluster.Destroy(): %v", err) } }() url, err := cluster.GetDiscoveryURL(t.ClusterSize) if err != nil { return fmt.Errorf("Failed to create discovery endpoint: %v", err) } cfgs := makeConfigs(url, t.CloudConfig, t.ClusterSize) for i := 0; i < t.ClusterSize; i++ { _, err := cluster.NewMachine(cfgs[i]) if err != nil { return fmt.Errorf("Cluster failed starting machine: %v", err) } plog.Infof("%v instance up", pltfrm) } // pass along all registered native functions var names []string for k := range t.NativeFuncs { names = append(names, k) } // Cluster -> TestCluster tcluster := platform.TestCluster{t.Name, names, cluster} // drop kolet binary on machines if t.NativeFuncs != nil { err = scpKolet(tcluster) if err != nil { return fmt.Errorf("dropping kolet binary: %v", err) } } // run test err = t.Run(tcluster) return err }
// create a cluster and run test func RunTest(t *Test, pltfrm string) error { var err error var cluster platform.Cluster switch pltfrm { case "qemu": cluster, err = platform.NewQemuCluster(QEMUOptions) case "gce": cluster, err = platform.NewGCECluster(GCEOptions) case "aws": cluster, err = platform.NewAWSCluster(AWSOptions) default: err = fmt.Errorf("invalid platform %q", pltfrm) } if err != nil { return fmt.Errorf("Cluster failed: %v", err) } defer func() { if err := cluster.Destroy(); err != nil { plog.Errorf("cluster.Destroy(): %v", err) } }() url, err := cluster.GetDiscoveryURL(t.ClusterSize) if err != nil { return fmt.Errorf("Failed to create discovery endpoint: %v", err) } cfgs := makeConfigs(url, t.CloudConfig, t.ClusterSize) if t.ClusterSize > 0 { _, err := platform.NewMachines(cluster, cfgs) if err != nil { return fmt.Errorf("Cluster failed starting machines: %v", err) } } // pass along all registered native functions var names []string for k := range t.NativeFuncs { names = append(names, k) } // prevent unsafe access if tests ever become parallel and access tempTestOptions := make(map[string]string, 0) for k, v := range testOptions { tempTestOptions[k] = v } // Cluster -> TestCluster tcluster := platform.TestCluster{ Name: t.Name, NativeFuncs: names, Options: tempTestOptions, Cluster: cluster, } // drop kolet binary on machines if t.NativeFuncs != nil { err = scpKolet(tcluster) if err != nil { return fmt.Errorf("dropping kolet binary: %v", err) } } // run test err = t.Run(tcluster) // give some time for the remote journal to be flushed so it can be read // before we run the deferred machine destruction if err != nil { time.Sleep(10 * time.Second) } return err }