github.com/huiliang/nomad@v0.2.1-0.20151124023127-7a8b664699ff/nomad/server_test.go (about) 1 package nomad 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "net" 7 "sync/atomic" 8 "testing" 9 "time" 10 ) 11 12 var nextPort uint32 = 15000 13 14 func getPort() int { 15 return int(atomic.AddUint32(&nextPort, 1)) 16 } 17 18 func tmpDir(t *testing.T) string { 19 dir, err := ioutil.TempDir("", "nomad") 20 if err != nil { 21 t.Fatalf("err: %v", err) 22 } 23 return dir 24 } 25 26 func testServer(t *testing.T, cb func(*Config)) *Server { 27 // Setup the default settings 28 config := DefaultConfig() 29 config.Build = "unittest" 30 config.DevMode = true 31 config.RPCAddr = &net.TCPAddr{ 32 IP: []byte{127, 0, 0, 1}, 33 Port: getPort(), 34 } 35 config.NodeName = fmt.Sprintf("Node %d", config.RPCAddr.Port) 36 37 // Tighten the Serf timing 38 config.SerfConfig.MemberlistConfig.BindAddr = "127.0.0.1" 39 config.SerfConfig.MemberlistConfig.BindPort = getPort() 40 config.SerfConfig.MemberlistConfig.SuspicionMult = 2 41 config.SerfConfig.MemberlistConfig.RetransmitMult = 2 42 config.SerfConfig.MemberlistConfig.ProbeTimeout = 50 * time.Millisecond 43 config.SerfConfig.MemberlistConfig.ProbeInterval = 100 * time.Millisecond 44 config.SerfConfig.MemberlistConfig.GossipInterval = 100 * time.Millisecond 45 46 // Tighten the Raft timing 47 config.RaftConfig.LeaderLeaseTimeout = 50 * time.Millisecond 48 config.RaftConfig.HeartbeatTimeout = 50 * time.Millisecond 49 config.RaftConfig.ElectionTimeout = 50 * time.Millisecond 50 config.RaftTimeout = 500 * time.Millisecond 51 52 // Invoke the callback if any 53 if cb != nil { 54 cb(config) 55 } 56 57 // Enable raft as leader if we have bootstrap on 58 config.RaftConfig.StartAsLeader = !config.DevDisableBootstrap 59 60 // Create server 61 server, err := NewServer(config) 62 if err != nil { 63 t.Fatalf("err: %v", err) 64 } 65 return server 66 } 67 68 func testJoin(t *testing.T, s1 *Server, other ...*Server) { 69 addr := fmt.Sprintf("127.0.0.1:%d", 70 s1.config.SerfConfig.MemberlistConfig.BindPort) 71 for _, s2 := range other { 72 if num, err := s2.Join([]string{addr}); err != nil { 73 t.Fatalf("err: %v", err) 74 } else if num != 1 { 75 t.Fatalf("bad: %d", num) 76 } 77 } 78 } 79 80 func TestServer_RPC(t *testing.T) { 81 s1 := testServer(t, nil) 82 defer s1.Shutdown() 83 84 var out struct{} 85 if err := s1.RPC("Status.Ping", struct{}{}, &out); err != nil { 86 t.Fatalf("err: %v", err) 87 } 88 }