http_functional_test.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package functional
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "net/http/httptest"
  6. "net/url"
  7. "reflect"
  8. "testing"
  9. "time"
  10. "github.com/coreos/etcd/etcdserver"
  11. "github.com/coreos/etcd/etcdserver/etcdhttp"
  12. "github.com/coreos/etcd/raft"
  13. "github.com/coreos/etcd/raft/raftpb"
  14. "github.com/coreos/etcd/store"
  15. "github.com/coreos/etcd/third_party/code.google.com/p/go.net/context"
  16. )
  17. func nopSave(st raftpb.HardState, ents []raftpb.Entry) {}
  18. func nopSend(m []raftpb.Message) {}
  19. func TestSet(t *testing.T) {
  20. ctx, cancel := context.WithCancel(context.Background())
  21. defer cancel()
  22. n := raft.Start(1, []int64{1}, 0, 0)
  23. n.Campaign(ctx)
  24. srv := &etcdserver.EtcdServer{
  25. Store: store.New(),
  26. Node: n,
  27. Storage: nopStorage{},
  28. Send: etcdserver.SendFunc(nopSend),
  29. }
  30. srv.Start()
  31. defer srv.Stop()
  32. h := etcdhttp.NewClientHandler(srv, nil, time.Hour)
  33. s := httptest.NewServer(h)
  34. defer s.Close()
  35. resp, err := http.PostForm(s.URL+"/v2/keys/foo", url.Values{"value": {"bar"}})
  36. if err != nil {
  37. t.Fatal(err)
  38. }
  39. if resp.StatusCode != 201 {
  40. t.Errorf("StatusCode = %d, expected %d", resp.StatusCode, 201)
  41. }
  42. g := new(store.Event)
  43. if err := json.NewDecoder(resp.Body).Decode(&g); err != nil {
  44. t.Fatal(err)
  45. }
  46. w := &store.NodeExtern{
  47. Key: "/foo/1",
  48. Value: stringp("bar"),
  49. ModifiedIndex: 1,
  50. CreatedIndex: 1,
  51. }
  52. if !reflect.DeepEqual(g.Node, w) {
  53. t.Errorf("g = %+v, want %+v", g.Node, w)
  54. }
  55. }
  56. func stringp(s string) *string { return &s }
  57. type nopStorage struct{}
  58. func (np nopStorage) Save(st raftpb.HardState, ents []raftpb.Entry) {}
  59. func (np nopStorage) Cut() error { return nil }
  60. func (np nopStorage) SaveSnap(st raftpb.Snapshot) {}