|
@ -33,14 +33,14 @@ func TestServerClient(t *testing.T) { |
|
|
|
|
|
|
|
|
time.Sleep(time.Second) // 等待启动完毕
|
|
|
time.Sleep(time.Second) // 等待启动完毕
|
|
|
// client启动
|
|
|
// client启动
|
|
|
c := clientPkg.Client{PeerIds: peerIds, Transport: threadTransport} |
|
|
|
|
|
|
|
|
c := clientPkg.NewClient("0", peerIds, threadTransport) |
|
|
|
|
|
|
|
|
// 写入
|
|
|
// 写入
|
|
|
var s clientPkg.Status |
|
|
var s clientPkg.Status |
|
|
for i := 0; i < 10; i++ { |
|
|
for i := 0; i < 10; i++ { |
|
|
key := strconv.Itoa(i) |
|
|
key := strconv.Itoa(i) |
|
|
newlog := nodes.LogEntry{Key: key, Value: "hello"} |
|
|
newlog := nodes.LogEntry{Key: key, Value: "hello"} |
|
|
s = c.Write(nodes.LogEntryCall{LogE: newlog}) |
|
|
|
|
|
|
|
|
s = c.Write(newlog) |
|
|
if s != clientPkg.Ok { |
|
|
if s != clientPkg.Ok { |
|
|
t.Errorf("write test fail") |
|
|
t.Errorf("write test fail") |
|
|
} |
|
|
} |
|
@ -67,3 +67,73 @@ func TestServerClient(t *testing.T) { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func TestRepeatClientReq(t *testing.T) { |
|
|
|
|
|
// 登记结点信息
|
|
|
|
|
|
n := 5 |
|
|
|
|
|
var peerIds []string |
|
|
|
|
|
for i := 0; i < n; i++ { |
|
|
|
|
|
peerIds = append(peerIds, strconv.Itoa(i + 1)) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 结点启动
|
|
|
|
|
|
var quitCollections []chan struct{} |
|
|
|
|
|
var nodeCollections []*nodes.Node |
|
|
|
|
|
ctx := nodes.NewCtx() |
|
|
|
|
|
threadTransport := nodes.NewThreadTransport(ctx) |
|
|
|
|
|
for i := 0; i < n; i++ { |
|
|
|
|
|
n, quitChan := ExecuteNodeI(strconv.Itoa(i + 1), false, peerIds, threadTransport) |
|
|
|
|
|
quitCollections = append(quitCollections, quitChan) |
|
|
|
|
|
nodeCollections = append(nodeCollections, n) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 通知所有node结束
|
|
|
|
|
|
defer func(){ |
|
|
|
|
|
for _, quitChan := range quitCollections { |
|
|
|
|
|
close(quitChan) |
|
|
|
|
|
} |
|
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
|
|
time.Sleep(time.Second) // 等待启动完毕
|
|
|
|
|
|
// client启动
|
|
|
|
|
|
c := clientPkg.NewClient("0", peerIds, threadTransport) |
|
|
|
|
|
for i := 0; i < n; i++ { |
|
|
|
|
|
ctx.SetBehavior("", nodeCollections[i].SelfId, nodes.RetryRpc, 0, 2) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 写入
|
|
|
|
|
|
var s clientPkg.Status |
|
|
|
|
|
for i := 0; i < 10; i++ { |
|
|
|
|
|
key := strconv.Itoa(i) |
|
|
|
|
|
newlog := nodes.LogEntry{Key: key, Value: "hello"} |
|
|
|
|
|
s = c.Write(newlog) |
|
|
|
|
|
if s != clientPkg.Ok { |
|
|
|
|
|
t.Errorf("write test fail") |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
time.Sleep(time.Second) // 等待写入完毕
|
|
|
|
|
|
// 读写入数据
|
|
|
|
|
|
for i := 0; i < 10; i++ { |
|
|
|
|
|
key := strconv.Itoa(i) |
|
|
|
|
|
var value string |
|
|
|
|
|
s = c.Read(key, &value) |
|
|
|
|
|
if s != clientPkg.Ok || value != "hello" { |
|
|
|
|
|
t.Errorf("Read test1 fail") |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 读未写入数据
|
|
|
|
|
|
for i := 10; i < 15; i++ { |
|
|
|
|
|
key := strconv.Itoa(i) |
|
|
|
|
|
var value string |
|
|
|
|
|
s = c.Read(key, &value) |
|
|
|
|
|
if s != clientPkg.NotFound { |
|
|
|
|
|
t.Errorf("Read test2 fail") |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for i := 0; i < n; i++ { |
|
|
|
|
|
CheckLogNum(t, nodeCollections[i], 10) |
|
|
|
|
|
} |
|
|
|
|
|
} |