// Ensure that a leader can be renewed. func TestModLeaderRenew(t *testing.T) { tests.RunServer(func(s *server.Server) { // Set leader. body, status, err := testSetLeader(s, "foo", "xxx", 2) assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "2") time.Sleep(1 * time.Second) // Renew leader. body, status, err = testSetLeader(s, "foo", "xxx", 3) assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "2") time.Sleep(2 * time.Second) // Check that the leader is set. body, status, err = testGetLeader(s, "foo") assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "xxx") }) }
// Ensure that a lock can be acquired with a value and released by value. func TestModLockAcquireAndReleaseByValue(t *testing.T) { tests.RunServer(func(s *server.Server) { // Acquire lock. body, status, err := testAcquireLock(s, "foo", "XXX", 10) assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "2") // Check that we have the lock. body, status, err = testGetLockValue(s, "foo") assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "XXX") // Release lock. body, status, err = testReleaseLock(s, "foo", "", "XXX") assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "") // Check that we released the lock. body, status, err = testGetLockValue(s, "foo") assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "") }) }
// Ensure that a leader can be set and read. func TestModLeaderSet(t *testing.T) { tests.RunServer(func(s *server.Server) { // Set leader. body, status, err := testSetLeader(s, "foo", "xxx", 10) assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "2") // Check that the leader is set. body, status, err = testGetLeader(s, "foo") assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "xxx") // Delete leader. body, status, err = testDeleteLeader(s, "foo", "xxx") assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "") // Check that the leader is removed. body, status, err = testGetLeader(s, "foo") assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "") }) }
// Ensure that a lock can be acquired and another process is blocked until released. func TestModLockBlockUntilAcquire(t *testing.T) { tests.RunServer(func(s *server.Server) { c := make(chan bool) // Acquire lock #1. go func() { body, status, err := testAcquireLock(s, "foo", "", 10) assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "2") c <- true }() <-c // Acquire lock #2. waiting := true go func() { c <- true body, status, err := testAcquireLock(s, "foo", "", 10) assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "4") waiting = false }() <-c time.Sleep(1 * time.Second) // Check that we have the lock #1. body, status, err := testGetLockIndex(s, "foo") assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "2") // Check that we are still waiting for lock #2. assert.Equal(t, waiting, true) // Release lock #1. _, status, err = testReleaseLock(s, "foo", "2", "") assert.NoError(t, err) assert.Equal(t, status, 200) // Check that we have lock #2. body, status, err = testGetLockIndex(s, "foo") assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "4") // Release lock #2. _, status, err = testReleaseLock(s, "foo", "4", "") assert.NoError(t, err) assert.Equal(t, status, 200) // Check that we have no lock. body, status, err = testGetLockIndex(s, "foo") assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "") }) }
func TestConfigDeprecatedAddrFlag(t *testing.T) { _, stderr := capture(func() { c := New() err := c.LoadFlags([]string{"-c", "127.0.0.1:4002"}) assert.NoError(t, err) assert.Equal(t, c.Addr, "127.0.0.1:4002") }) assert.Equal(t, stderr, "[deprecated] use -addr, not -c\n") }
func TestConfigDeprecatedMaxRetryAttemptsFlag(t *testing.T) { _, stderr := capture(func() { c := New() err := c.LoadFlags([]string{"-r", "10"}) assert.NoError(t, err) assert.Equal(t, c.MaxRetryAttempts, 10, "") }) assert.Equal(t, stderr, "[deprecated] use -max-retry-attempts, not -r\n", "") }
func TestConfigDeprecatedPeerBindAddrFlag(t *testing.T) { _, stderr := capture(func() { c := New() err := c.LoadFlags([]string{"-sl", "127.0.0.1:4003"}) assert.NoError(t, err) assert.Equal(t, c.Peer.BindAddr, "127.0.0.1:4003", "") }) assert.Equal(t, stderr, "[deprecated] use -peer-bind-addr, not -sl\n", "") }
func TestConfigDeprecatedPeerKeyFileFlag(t *testing.T) { _, stderr := capture(func() { c := New() err := c.LoadFlags([]string{"-serverKey", "/tmp/peer/file.key"}) assert.NoError(t, err) assert.Equal(t, c.Peer.KeyFile, "/tmp/peer/file.key", "") }) assert.Equal(t, stderr, "[deprecated] use -peer-key-file, not -serverKey\n", "") }
func TestConfigDeprecatedNameFlag(t *testing.T) { _, stderr := capture(func() { c := New() err := c.LoadFlags([]string{"-n", "test-name"}) assert.NoError(t, err) assert.Equal(t, c.Name, "test-name", "") }) assert.Equal(t, stderr, "[deprecated] use -name, not -n\n", "") }
func TestConfigDeprecatedPeerAddrFlag(t *testing.T) { _, stderr := capture(func() { c := New() err := c.LoadFlags([]string{"-s", "localhost:7002"}) assert.NoError(t, err) assert.Equal(t, c.Peer.Addr, "localhost:7002", "") }) assert.Equal(t, stderr, "[deprecated] use -peer-addr, not -s\n", "") }
func TestConfigDeprecatedCertFileFlag(t *testing.T) { _, stderr := capture(func() { c := New() err := c.LoadFlags([]string{"-clientCert", "/tmp/file.cert"}) assert.NoError(t, err) assert.Equal(t, c.CertFile, "/tmp/file.cert", "") }) assert.Equal(t, stderr, "[deprecated] use -cert-file, not -clientCert\n", "") }
func TestConfigDeprecatedMaxResultBufferFlag(t *testing.T) { _, stderr := capture(func() { c := New() err := c.LoadFlags([]string{"-m", "512"}) assert.NoError(t, err) assert.Equal(t, c.MaxResultBuffer, 512, "") }) assert.Equal(t, stderr, "[deprecated] use -max-result-buffer, not -m\n", "") }
func TestConfigDeprecatedMaxClusterSizeFlag(t *testing.T) { _, stderr := capture(func() { c := New() err := c.LoadFlags([]string{"-maxsize", "5"}) assert.NoError(t, err) assert.Equal(t, c.MaxClusterSize, 5, "") }) assert.Equal(t, stderr, "[deprecated] use -max-cluster-size, not -maxsize\n", "") }
func TestConfigDeprecatedPeersFileFlag(t *testing.T) { _, stderr := capture(func() { c := New() err := c.LoadFlags([]string{"-CF", "/tmp/machines"}) assert.NoError(t, err) assert.Equal(t, c.PeersFile, "/tmp/machines", "") }) assert.Equal(t, stderr, "[deprecated] use -peers-file, not -CF\n", "") }
func TestConfigDeprecatedPeersFlag(t *testing.T) { _, stderr := capture(func() { c := New() err := c.LoadFlags([]string{"-C", "coreos.com:4001,coreos.com:4002"}) assert.NoError(t, err) assert.Equal(t, c.Peers, []string{"coreos.com:4001", "coreos.com:4002"}, "") }) assert.Equal(t, stderr, "[deprecated] use -peers, not -C\n", "") }
// Ensure that a lock will be released after the TTL. func TestModLockExpireAndRelease(t *testing.T) { tests.RunServer(func(s *server.Server) { c := make(chan bool) // Acquire lock #1. go func() { body, status, err := testAcquireLock(s, "foo", "", 2) assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "2") c <- true }() <-c // Acquire lock #2. go func() { c <- true body, status, err := testAcquireLock(s, "foo", "", 10) assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "4") }() <-c time.Sleep(1 * time.Second) // Check that we have the lock #1. body, status, err := testGetLockIndex(s, "foo") assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "2") // Wait for lock #1 TTL. time.Sleep(2 * time.Second) // Check that we have lock #2. body, status, err = testGetLockIndex(s, "foo") assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "4") }) }
// Ensure that a lock can be renewed. func TestModLockRenew(t *testing.T) { tests.RunServer(func(s *server.Server) { // Acquire lock. body, status, err := testAcquireLock(s, "foo", "", 3) assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "2") time.Sleep(2 * time.Second) // Check that we have the lock. body, status, err = testGetLockIndex(s, "foo") assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "2") // Renew lock. body, status, err = testRenewLock(s, "foo", "2", "", 3) assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "") time.Sleep(2 * time.Second) // Check that we still have the lock. body, status, err = testGetLockIndex(s, "foo") assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "2") time.Sleep(2 * time.Second) // Check that lock was released. body, status, err = testGetLockIndex(s, "foo") assert.NoError(t, err) assert.Equal(t, status, 200) assert.Equal(t, body, "") }) }