mod_leader_test.go 2.0 KB

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