package test
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"simple-kv-store/internal/client"
|
|
"simple-kv-store/internal/logprovider"
|
|
"simple-kv-store/internal/nodes"
|
|
"strconv"
|
|
"strings"
|
|
"syscall"
|
|
"testing"
|
|
"time"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
var log, _ = logprovider.CreateDefaultZapLogger(zap.InfoLevel)
|
|
|
|
func TestServerClient(t *testing.T) {
|
|
n := 5
|
|
var clusters []string
|
|
for i := 0; i < n; i++ {
|
|
port := fmt.Sprintf("%d", uint16(9090)+uint16(i))
|
|
addr := "127.0.0.1:" + port
|
|
clusters = append(clusters, addr)
|
|
}
|
|
|
|
var cmds []*exec.Cmd
|
|
for i := 0; i < n; i++ {
|
|
tmpClusters := append(clusters[:i], clusters[i+1:]...)
|
|
port := fmt.Sprintf(":%d", uint16(9090)+uint16(i))
|
|
|
|
var isleader string
|
|
if i == 0 {
|
|
isleader = "true"
|
|
} else {
|
|
isleader = "false"
|
|
}
|
|
cmd := exec.Command(
|
|
"../main",
|
|
"-id", strconv.Itoa(i + 1),
|
|
"-port", port,
|
|
"-cluster", strings.Join(tmpClusters, ","),
|
|
"-isleader=" + isleader,
|
|
)
|
|
cmds = append(cmds, cmd)
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
|
|
// 执行命令
|
|
err := cmd.Start()
|
|
if err != nil {
|
|
fmt.Println("启动进程出错:", err)
|
|
return
|
|
}
|
|
}
|
|
|
|
time.Sleep(time.Second)
|
|
// client启动
|
|
c := clientPkg.Client{Address: "127.0.0.1:9090", ServerId: "1"}
|
|
s := c.Write(nodes.LogEntry{Key: "1", Value: "hello"})
|
|
if s != clientPkg.Ok {
|
|
t.Errorf("write test fail")
|
|
}
|
|
|
|
var value string
|
|
s = c.Read("1", &value)
|
|
if s != clientPkg.Ok {
|
|
t.Errorf("Read test1 fail")
|
|
}
|
|
|
|
s = c.Read("2", &value)
|
|
if s != clientPkg.NotFound {
|
|
t.Errorf("Read test2 fail")
|
|
}
|
|
|
|
for _, cmd := range cmds {
|
|
err := cmd.Process.Signal(syscall.SIGTERM)
|
|
if err != nil {
|
|
fmt.Println("Error sending signal:", err)
|
|
return
|
|
}
|
|
}
|
|
|
|
}
|