server_utils.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package tests
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "time"
  6. "github.com/coreos/etcd/server"
  7. "github.com/coreos/etcd/store"
  8. )
  9. const (
  10. testName = "ETCDTEST"
  11. testClientURL = "localhost:4401"
  12. testRaftURL = "localhost:7701"
  13. testSnapshotCount = 10000
  14. testHeartbeatTimeout = time.Duration(50) * time.Millisecond
  15. testElectionTimeout = time.Duration(200) * time.Millisecond
  16. )
  17. // Starts a server in a temporary directory.
  18. func RunServer(f func(*server.Server)) {
  19. path, _ := ioutil.TempDir("", "etcd-")
  20. defer os.RemoveAll(path)
  21. store := store.New()
  22. registry := server.NewRegistry(store)
  23. corsInfo, _ := server.NewCORSInfo([]string{})
  24. psConfig := server.PeerServerConfig{
  25. Name: testName,
  26. Path: path,
  27. URL: "http://"+testRaftURL,
  28. Scheme: "http",
  29. SnapshotCount: testSnapshotCount,
  30. HeartbeatTimeout: testHeartbeatTimeout,
  31. ElectionTimeout: testElectionTimeout,
  32. MaxClusterSize: 9,
  33. CORS: corsInfo,
  34. }
  35. ps := server.NewPeerServer(psConfig, &server.TLSConfig{Scheme: "http"}, &server.TLSInfo{}, registry, store, nil)
  36. psListener, err := server.NewListener(testRaftURL)
  37. if err != nil {
  38. panic(err)
  39. }
  40. sConfig := server.ServerConfig{
  41. Name: testName,
  42. URL: "http://"+testClientURL,
  43. CORS: corsInfo,
  44. }
  45. s := server.New(sConfig, ps, registry, store, nil)
  46. sListener, err := server.NewListener(testClientURL)
  47. if err != nil {
  48. panic(err)
  49. }
  50. ps.SetServer(s)
  51. // Start up peer server.
  52. c := make(chan bool)
  53. go func() {
  54. c <- true
  55. ps.Serve(psListener, false, []string{})
  56. }()
  57. <-c
  58. // Start up etcd server.
  59. go func() {
  60. c <- true
  61. s.Serve(sListener)
  62. }()
  63. <-c
  64. // Wait to make sure servers have started.
  65. time.Sleep(50 * time.Millisecond)
  66. // Execute the function passed in.
  67. f(s)
  68. // Clean up servers.
  69. ps.Close()
  70. s.Close()
  71. }