mod_leader_test.go 2.4 KB

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