diff --git a/test_grpc/grpc_server.go b/test_grpc/grpc_server.go index 00e52d9..73b529e 100644 --- a/test_grpc/grpc_server.go +++ b/test_grpc/grpc_server.go @@ -22,11 +22,7 @@ func NewGRPCServer(kv *service.KVServer) *GRPCServer { func (s *GRPCServer) Put(ctx context.Context, req *PutRequest) (*PutResponse, error) { cmd := service.Command{Type: "Put", Key: req.Key, Value: req.Value} - index, err := s.kv.AppendEntry(cmd) - if err != nil { - return &PutResponse{Success: false}, nil - } - if err := s.kv.WaitForCommit(index); err != nil { + if err := s.kv.Write(cmd); err != nil { return &PutResponse{Success: false}, nil } return &PutResponse{Success: true}, nil @@ -42,11 +38,7 @@ func (s *GRPCServer) Get(ctx context.Context, req *GetRequest) (*GetResponse, er func (s *GRPCServer) Delete(ctx context.Context, req *DeleteRequest) (*DeleteResponse, error) { cmd := service.Command{Type: "Delete", Key: req.Key} - index, err := s.kv.AppendEntry(cmd) - if err != nil { - return &DeleteResponse{Success: false}, nil - } - if err := s.kv.WaitForCommit(index); err != nil { + if err := s.kv.Write(cmd); err != nil { return &DeleteResponse{Success: false}, nil } return &DeleteResponse{Success: true}, nil diff --git a/test_grpc/grpc_server_test.go b/test_grpc/grpc_server_test.go new file mode 100644 index 0000000..20a2a89 --- /dev/null +++ b/test_grpc/grpc_server_test.go @@ -0,0 +1,43 @@ +package test_grpc + +import ( + "context" + "os" + "testing" + "time" + + "github.com/NeverENG/BanDB/config" + "github.com/NeverENG/BanDB/service" +) + +// TestGRPCServer_PutGetStandalone 锁定回归:standalone 模式下 KVServer.raft 为 nil, +// gRPC 的 Put 走 kv.Write() 而非直接 AppendEntry,不再 nil 指针 panic。 +func TestGRPCServer_PutGetStandalone(t *testing.T) { + oldMode := config.G.Mode + oldWAL := config.G.WALPath + config.G.Mode = config.ModeStandalone + config.G.WALPath = "test_grpc_wal_" + time.Now().Format("20060102150405.000000") + ".log" + t.Cleanup(func() { + os.Remove(config.G.WALPath) + config.G.Mode = oldMode + config.G.WALPath = oldWAL + }) + + srv := NewGRPCServer(service.NewKVServer()) + + putResp, err := srv.Put(context.Background(), &PutRequest{Key: []byte("k1"), Value: []byte("v1")}) + if err != nil { + t.Fatalf("Put returned error: %v", err) + } + if !putResp.Success { + t.Fatalf("Put failed in standalone mode") + } + + getResp, err := srv.Get(context.Background(), &GetRequest{Key: []byte("k1")}) + if err != nil { + t.Fatalf("Get returned error: %v", err) + } + if !getResp.Success || string(getResp.Value) != "v1" { + t.Fatalf("Get returned success=%v value=%q, want true/v1", getResp.Success, getResp.Value) + } +}