658832bf18
add testcases
70 lines
1.6 KiB
Go
70 lines
1.6 KiB
Go
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{}
|
|
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")
|
|
case "GET":
|
|
conn.WriteBulk(_rdData[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:
|
|
//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
|
|
}
|