mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
contrib/raftexample: add test for struct httpKVAPI.
This commit is contained in:
parent
e1ca3b4434
commit
51cdbb6d1a
@ -15,9 +15,14 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"go.etcd.io/etcd/raft/raftpb"
|
||||
)
|
||||
@ -157,3 +162,61 @@ func TestCloseProposerInflight(t *testing.T) {
|
||||
t.Fatalf("Commit failed")
|
||||
}
|
||||
}
|
||||
|
||||
func TestPutAndGetKeyValue(t *testing.T) {
|
||||
clusters := []string{"http://127.0.0.1:9021"}
|
||||
|
||||
proposeC := make(chan string)
|
||||
defer close(proposeC)
|
||||
|
||||
confChangeC := make(chan raftpb.ConfChange)
|
||||
defer close(confChangeC)
|
||||
|
||||
var kvs *kvstore
|
||||
getSnapshot := func() ([]byte, error) { return kvs.getSnapshot() }
|
||||
commitC, errorC, snapshotterReady := newRaftNode(1, clusters, false, getSnapshot, proposeC, confChangeC)
|
||||
|
||||
kvs = newKVStore(<-snapshotterReady, proposeC, commitC, errorC)
|
||||
|
||||
srv := httptest.NewServer(&httpKVAPI{
|
||||
store: kvs,
|
||||
confChangeC: confChangeC,
|
||||
})
|
||||
defer srv.Close()
|
||||
|
||||
// wait server started
|
||||
<-time.After(time.Second * 3)
|
||||
|
||||
wantKey, wantValue := "test-key", "test-value"
|
||||
url := fmt.Sprintf("%s/%s", srv.URL, wantKey)
|
||||
body := bytes.NewBufferString(wantValue)
|
||||
cli := srv.Client()
|
||||
|
||||
req, err := http.NewRequest("PUT", url, body)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
req.Header.Set("Content-Type", "text/html; charset=utf-8")
|
||||
_, err = cli.Do(req)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// wait for a moment for processing message, otherwise get would be failed.
|
||||
<-time.After(time.Second)
|
||||
|
||||
resp, err := cli.Get(url)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
data, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if gotValue := string(data); wantValue != gotValue {
|
||||
t.Fatalf("expect %s, got %s", wantValue, gotValue)
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user