李度、马也驰 25spring数据库系统 p1仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
1.7 KiB

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
}
}
}