plugins/tests/test.go

91 lines
2.2 KiB
Go
Raw Permalink Normal View History

package tests
import (
"fmt"
"github.com/ssgo/u"
"github.com/tidwall/redcon"
"strings"
"testing"
)
var testIndex = 0
func Test(t *testing.T, title string, ok bool, info ...interface{}) {
testIndex++
if ok {
fmt.Println(u.Cyan(fmt.Sprint("#", testIndex)), title, u.BGreen("Succeed"))
} else {
t.Fatal(append([]interface{}{u.Cyan(fmt.Sprintln("#", testIndex)), title, u.BRed("Failed")}, info...)...)
}
}
var _rdData = map[string][]byte{}
2024-03-09 13:43:14 +08:00
var _rdIncr = map[string]int{}
var _rdMData = map[string]map[string][]byte{}
func StartRedis(port string) *redcon.Server {
rdServer := redcon.NewServer(":"+port, func(conn redcon.Conn, cmd redcon.Command) {
//fmt.Println(u.BCyan("redis command " + string(cmd.Raw)))
switch strings.ToUpper(string(cmd.Args[0])) {
case "SET":
_rdData[string(cmd.Args[1])] = cmd.Args[2]
conn.WriteString("OK")
2024-03-09 13:43:14 +08:00
case "SETEX":
_rdData[string(cmd.Args[1])] = cmd.Args[3]
conn.WriteString("OK")
case "MSET":
for i:=1; i< len(cmd.Args); i+=2 {
_rdData[string(cmd.Args[i])] = cmd.Args[i+1]
}
conn.WriteString("OK")
case "GET":
conn.WriteBulk(_rdData[string(cmd.Args[1])])
2024-03-09 13:43:14 +08:00
case "DEL":
delete(_rdData, string(cmd.Args[1]))
conn.WriteInt(1)
case "EXISTS":
if _rdData[string(cmd.Args[1])] == nil {
conn.WriteInt(0)
}else{
conn.WriteInt(1)
}
case "INCR":
_rdIncr[string(cmd.Args[1])] ++
conn.WriteInt(_rdIncr[string(cmd.Args[1])])
case "HSET":
data := _rdMData[string(cmd.Args[1])]
if data == nil {
data = map[string][]byte{}
_rdMData[string(cmd.Args[1])] = data
}
data[string(cmd.Args[2])] = cmd.Args[3]
conn.WriteString("OK")
case "HGETALL":
data := _rdMData[string(cmd.Args[1])]
if data != nil {
conn.WriteArray(len(data)*2)
for k, v := range data {
conn.WriteBulkString(k)
conn.WriteBulk(v)
}
} else {
conn.WriteArray(0)
}
default:
2024-03-09 13:43:14 +08:00
fmt.Println(u.BYellow("unknown redis command " + string(cmd.Raw)))
conn.WriteString("OK")
}
}, func(conn redcon.Conn) bool {
return true
}, func(conn redcon.Conn, err error) {
})
go func() {
err := rdServer.ListenAndServe()
if err != nil {
fmt.Println(err.Error())
}
}()
return rdServer
}