github.com/jpetazzo/etcd@v0.2.1-0.20140113055439-97f1363afac5/server/v2/tests/post_handler_test.go (about)

     1  package v2
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  	"net/http"
     7  
     8  	"github.com/coreos/etcd/server"
     9  	"github.com/coreos/etcd/tests"
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  // Ensures a unique value is added to the key's children.
    14  //
    15  //   $ curl -X POST localhost:4001/v2/keys/foo/bar
    16  //   $ curl -X POST localhost:4001/v2/keys/foo/bar
    17  //   $ curl -X POST localhost:4001/v2/keys/foo/baz
    18  //
    19  func TestV2CreateUnique(t *testing.T) {
    20  	tests.RunServer(func(s *server.Server) {
    21  		// POST should add index to list.
    22  		fullURL := fmt.Sprintf("%s%s", s.URL(), "/v2/keys/foo/bar")
    23  		resp, _ := tests.PostForm(fullURL, nil)
    24  		assert.Equal(t, resp.StatusCode, http.StatusCreated)
    25  		body := tests.ReadBodyJSON(resp)
    26  		assert.Equal(t, body["action"], "create", "")
    27  
    28  		node := body["node"].(map[string]interface{})
    29  		assert.Equal(t, node["key"], "/foo/bar/2", "")
    30  		assert.Nil(t, node["dir"], "")
    31  		assert.Equal(t, node["modifiedIndex"], 2, "")
    32  
    33  		// Second POST should add next index to list.
    34  		resp, _ = tests.PostForm(fullURL, nil)
    35  		assert.Equal(t, resp.StatusCode, http.StatusCreated)
    36  		body = tests.ReadBodyJSON(resp)
    37  
    38  		node = body["node"].(map[string]interface{})
    39  		assert.Equal(t, node["key"], "/foo/bar/3", "")
    40  
    41  		// POST to a different key should add index to that list.
    42  		resp, _ = tests.PostForm(fmt.Sprintf("%s%s", s.URL(), "/v2/keys/foo/baz"), nil)
    43  		assert.Equal(t, resp.StatusCode, http.StatusCreated)
    44  		body = tests.ReadBodyJSON(resp)
    45  
    46  		node = body["node"].(map[string]interface{})
    47  		assert.Equal(t, node["key"], "/foo/baz/4", "")
    48  	})
    49  }