add test
This commit is contained in:
parent
ef49efd9de
commit
caa86b5e79
|
@ -203,3 +203,143 @@ func (h *SimpleCmdHandler) Description() string {
|
|||
func (h *SimpleCmdHandler) Usage() string {
|
||||
return "Usage: test [args]"
|
||||
}
|
||||
|
||||
// EmptyCmdHandler 是一个简单的CmdHandler实现用于测试空输入
|
||||
type EmptyCmdHandler struct{}
|
||||
|
||||
func (h *EmptyCmdHandler) Handle(conn *CmdConn, req *CmdRequest) error {
|
||||
// 返回一个空响应
|
||||
err := conn.End("")
|
||||
return err
|
||||
}
|
||||
|
||||
func (h *EmptyCmdHandler) Description() string {
|
||||
return "Simple command handler for testing empty input"
|
||||
}
|
||||
|
||||
func (h *EmptyCmdHandler) Usage() string {
|
||||
return "Usage: empty"
|
||||
}
|
||||
|
||||
// UnknownCmdHandler 是一个简单的CmdHandler实现用于测试未知命令
|
||||
// 它会返回一个错误响应
|
||||
type UnknownCmdHandler struct{}
|
||||
|
||||
func (h *UnknownCmdHandler) Handle(conn *CmdConn, req *CmdRequest) error {
|
||||
// 返回一个错误响应
|
||||
err := conn.WriteError(fmt.Errorf("unknown command"), false)
|
||||
return err
|
||||
}
|
||||
|
||||
func (h *UnknownCmdHandler) Description() string {
|
||||
return "Simple command handler for testing unknown commands"
|
||||
}
|
||||
|
||||
func (h *UnknownCmdHandler) Usage() string {
|
||||
return "Usage: unknown"
|
||||
}
|
||||
|
||||
func TestEmptyCommand(t *testing.T) {
|
||||
socketPath := "/tmp/test_empty.sock"
|
||||
daemon := &CmdDaemon{
|
||||
SocketPath: socketPath,
|
||||
cmds: make(map[string]CmdHandler),
|
||||
}
|
||||
|
||||
// 注册一个简单的命令处理程序
|
||||
daemon.RegisterCmd("empty", &EmptyCmdHandler{})
|
||||
|
||||
// 创建一个同步通道来等待守护进程开始监听
|
||||
listening := make(chan struct{})
|
||||
|
||||
// 启动守护进程
|
||||
go startTestDaemon(daemon, listening)
|
||||
|
||||
// 等待直到监听开始
|
||||
// for循环中检查socket文件是否存在,如果存在退出循环,否则sleepeep 1秒
|
||||
// 使用一个错误channel来传递错误
|
||||
errChan := make(chan error)
|
||||
|
||||
go func() {
|
||||
listened := false
|
||||
for {
|
||||
|
||||
if listened {
|
||||
break
|
||||
}
|
||||
if _, err := os.Stat(socketPath); err == nil {
|
||||
listened = true
|
||||
}
|
||||
time.Sleep(1 * time.Second)
|
||||
}
|
||||
|
||||
// 设置命令行参数
|
||||
os.Args = []string{"cmd", "empty"}
|
||||
ndaemon := &CmdDaemon{
|
||||
SocketPath: socketPath,
|
||||
}
|
||||
// 执行Run方法
|
||||
err := ndaemon.Run()
|
||||
if err != nil {
|
||||
errChan <- err
|
||||
} else {
|
||||
t.Log("Run completed successfully")
|
||||
close(errChan)
|
||||
}
|
||||
}()
|
||||
err := <-errChan
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestUnknownCommand(t *testing.T) {
|
||||
socketPath := "/tmp/test_unknown.sock"
|
||||
daemon := &CmdDaemon{
|
||||
SocketPath: socketPath,
|
||||
cmds: make(map[string]CmdHandler),
|
||||
}
|
||||
|
||||
// 注册一个简单的命令处理程序
|
||||
daemon.RegisterCmd("unknown", &UnknownCmdHandler{})
|
||||
|
||||
// 启动守护进程
|
||||
go func() {
|
||||
err := daemon.Listen()
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("Listen failed: %v", err))
|
||||
}
|
||||
}()
|
||||
|
||||
// 等待 socket 文件创建
|
||||
waitForSocket(t, socketPath)
|
||||
|
||||
// 设置命令行参数
|
||||
os.Args = []string{"cmd", "unknown"}
|
||||
ndaemon := &CmdDaemon{
|
||||
SocketPath: socketPath,
|
||||
}
|
||||
// 执行Run方法
|
||||
err := ndaemon.Run()
|
||||
if err != nil {
|
||||
t.Fatalf("Run failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// waitForSocket 等待直到指定路径的 socket 文件被创建
|
||||
func waitForSocket(t *testing.T, path string) {
|
||||
timeout := time.After(5 * time.Second)
|
||||
ticker := time.Tick(500 * time.Millisecond)
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-timeout:
|
||||
t.Fatal("Timed out waiting for socket")
|
||||
case <-ticker:
|
||||
if _, err := os.Stat(path); err == nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue