github.com/ghodss/etcd@v0.3.1-0.20140417172404-cc329bfa55cb/mod/leader/v2/tests/mod_leader_test.go (about) 1 package leader 2 3 import ( 4 "fmt" 5 "testing" 6 "time" 7 8 "github.com/coreos/etcd/server" 9 "github.com/coreos/etcd/tests" 10 "github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert" 11 ) 12 13 // Ensure that a leader can be set and read. 14 func TestModLeaderSet(t *testing.T) { 15 tests.RunServer(func(s *server.Server) { 16 // Set leader. 17 body, status, err := testSetLeader(s, "foo", "xxx", 10) 18 assert.NoError(t, err) 19 assert.Equal(t, status, 200) 20 assert.Equal(t, body, "2") 21 22 // Check that the leader is set. 23 body, status, err = testGetLeader(s, "foo") 24 assert.NoError(t, err) 25 assert.Equal(t, status, 200) 26 assert.Equal(t, body, "xxx") 27 28 // Delete leader. 29 body, status, err = testDeleteLeader(s, "foo", "xxx") 30 assert.NoError(t, err) 31 assert.Equal(t, status, 200) 32 assert.Equal(t, body, "") 33 34 // Check that the leader is removed. 35 body, status, err = testGetLeader(s, "foo") 36 assert.NoError(t, err) 37 assert.Equal(t, status, 200) 38 assert.Equal(t, body, "") 39 }) 40 } 41 42 // Ensure that a leader can be renewed. 43 func TestModLeaderRenew(t *testing.T) { 44 tests.RunServer(func(s *server.Server) { 45 // Set leader. 46 body, status, err := testSetLeader(s, "foo", "xxx", 2) 47 assert.NoError(t, err) 48 assert.Equal(t, status, 200) 49 assert.Equal(t, body, "2") 50 51 time.Sleep(1 * time.Second) 52 53 // Renew leader. 54 body, status, err = testSetLeader(s, "foo", "xxx", 3) 55 assert.NoError(t, err) 56 assert.Equal(t, status, 200) 57 assert.Equal(t, body, "2") 58 59 time.Sleep(2 * time.Second) 60 61 // Check that the leader is set. 62 body, status, err = testGetLeader(s, "foo") 63 assert.NoError(t, err) 64 assert.Equal(t, status, 200) 65 assert.Equal(t, body, "xxx") 66 }) 67 } 68 69 func testSetLeader(s *server.Server, key string, name string, ttl int) (string, int, error) { 70 resp, err := tests.PutForm(fmt.Sprintf("%s/mod/v2/leader/%s?name=%s&ttl=%d", s.URL(), key, name, ttl), nil) 71 ret := tests.ReadBody(resp) 72 return string(ret), resp.StatusCode, err 73 } 74 75 func testGetLeader(s *server.Server, key string) (string, int, error) { 76 resp, err := tests.Get(fmt.Sprintf("%s/mod/v2/leader/%s", s.URL(), key)) 77 ret := tests.ReadBody(resp) 78 return string(ret), resp.StatusCode, err 79 } 80 81 func testDeleteLeader(s *server.Server, key string, name string) (string, int, error) { 82 resp, err := tests.DeleteForm(fmt.Sprintf("%s/mod/v2/leader/%s?name=%s", s.URL(), key, name), nil) 83 ret := tests.ReadBody(resp) 84 return string(ret), resp.StatusCode, err 85 }