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  }