github.com/jpetazzo/etcd@v0.2.1-0.20140113055439-97f1363afac5/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/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, err := testSetLeader(s, "foo", "xxx", 10) 18 assert.NoError(t, err) 19 assert.Equal(t, body, "2") 20 21 // Check that the leader is set. 22 body, err = testGetLeader(s, "foo") 23 assert.NoError(t, err) 24 assert.Equal(t, body, "xxx") 25 26 // Delete leader. 27 body, err = testDeleteLeader(s, "foo", "xxx") 28 assert.NoError(t, err) 29 assert.Equal(t, body, "") 30 31 // Check that the leader is removed. 32 body, err = testGetLeader(s, "foo") 33 assert.NoError(t, err) 34 assert.Equal(t, body, "") 35 }) 36 } 37 38 // Ensure that a leader can be renewed. 39 func TestModLeaderRenew(t *testing.T) { 40 tests.RunServer(func(s *server.Server) { 41 // Set leader. 42 body, err := testSetLeader(s, "foo", "xxx", 2) 43 assert.NoError(t, err) 44 assert.Equal(t, body, "2") 45 46 time.Sleep(1 * time.Second) 47 48 // Renew leader. 49 body, err = testSetLeader(s, "foo", "xxx", 3) 50 assert.NoError(t, err) 51 assert.Equal(t, body, "2") 52 53 time.Sleep(2 * time.Second) 54 55 // Check that the leader is set. 56 body, err = testGetLeader(s, "foo") 57 assert.NoError(t, err) 58 assert.Equal(t, body, "xxx") 59 }) 60 } 61 62 63 64 func testSetLeader(s *server.Server, key string, name string, ttl int) (string, error) { 65 resp, err := tests.PutForm(fmt.Sprintf("%s/mod/v2/leader/%s?name=%s&ttl=%d", s.URL(), key, name, ttl), nil) 66 ret := tests.ReadBody(resp) 67 return string(ret), err 68 } 69 70 func testGetLeader(s *server.Server, key string) (string, error) { 71 resp, err := tests.Get(fmt.Sprintf("%s/mod/v2/leader/%s", s.URL(), key)) 72 ret := tests.ReadBody(resp) 73 return string(ret), err 74 } 75 76 func testDeleteLeader(s *server.Server, key string, name string) (string, error) { 77 resp, err := tests.DeleteForm(fmt.Sprintf("%s/mod/v2/leader/%s?name=%s", s.URL(), key, name), nil) 78 ret := tests.ReadBody(resp) 79 return string(ret), err 80 }