package tests import ( "io/ioutil" "os" "time" "github.com/coreos/etcd/store" "github.com/coreos/etcd/server" ) const ( testName = "ETCDTEST" testClientURL = "localhost:4401" testRaftURL = "localhost:7701" ) // Starts a server in a temporary directory. func RunServer(f func(*server.Server)) { path, _ := ioutil.TempDir("", "etcd-") defer os.RemoveAll(path) store := store.New() registry := server.NewRegistry(store) ps := server.NewPeerServer(testName, path, testRaftURL, testRaftURL, &server.TLSConfig{Scheme:"http"}, &server.TLSInfo{}, registry, store) s := server.New(testName, testClientURL, testClientURL, &server.TLSConfig{Scheme:"http"}, &server.TLSInfo{}, ps, registry, store) ps.SetServer(s) // Start up peer server. c := make(chan bool) go func() { c <- true ps.ListenAndServe(false, []string{}) }() <- c // Start up etcd server. go func() { c <- true s.ListenAndServe() }() <- c // Wait to make sure servers have started. time.Sleep(5 * time.Millisecond) // Execute the function passed in. f(s) // Clean up servers. ps.Close() s.Close() }