test(quality): cover sqlite redis and overlay edge branches
This commit is contained in:
@@ -436,6 +436,91 @@ func TestRedisStickyStoreRequiresAddr(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestRedisStickyStoreOpenRejectsAuthError(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
server := newScriptedRedisServer(t, func(conn net.Conn, reader *bufio.Reader) {
|
||||
command, err := readRESPArray(reader)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if len(command) > 0 && strings.ToUpper(command[0]) == "AUTH" {
|
||||
_, _ = io.WriteString(conn, "-ERR invalid password\r\n")
|
||||
}
|
||||
})
|
||||
defer server.Close()
|
||||
|
||||
store := &RedisStickyStore{cfg: RedisConfig{Addr: server.Addr(), Password: "secret"}}
|
||||
_, _, err := store.open(context.Background())
|
||||
if err == nil || !strings.Contains(err.Error(), "redis AUTH read") {
|
||||
t.Fatalf("open() error = %v, want auth read failure", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRedisStickyStoreOpenRejectsSelectUnexpectedResponse(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
server := newScriptedRedisServer(t, func(conn net.Conn, reader *bufio.Reader) {
|
||||
command, err := readRESPArray(reader)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if len(command) > 0 && strings.ToUpper(command[0]) == "AUTH" {
|
||||
_, _ = io.WriteString(conn, "+OK\r\n")
|
||||
}
|
||||
command, err = readRESPArray(reader)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if len(command) > 0 && strings.ToUpper(command[0]) == "SELECT" {
|
||||
_, _ = io.WriteString(conn, ":1\r\n")
|
||||
}
|
||||
})
|
||||
defer server.Close()
|
||||
|
||||
store := &RedisStickyStore{cfg: RedisConfig{Addr: server.Addr(), Password: "secret", DB: 2}}
|
||||
_, _, err := store.open(context.Background())
|
||||
if err == nil || !strings.Contains(err.Error(), "redis SELECT unexpected response") {
|
||||
t.Fatalf("open() error = %v, want select unexpected response", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRedisStickyStoreGetJSONRejectsUnexpectedResponse(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
server := newScriptedRedisServer(t, func(conn net.Conn, reader *bufio.Reader) {
|
||||
if _, err := readRESPArray(reader); err != nil {
|
||||
return
|
||||
}
|
||||
_, _ = io.WriteString(conn, "+OK\r\n")
|
||||
})
|
||||
defer server.Close()
|
||||
|
||||
store := &RedisStickyStore{cfg: RedisConfig{Addr: server.Addr()}}
|
||||
_, _, err := store.getJSON(context.Background(), "sticky-key")
|
||||
if err == nil || !strings.Contains(err.Error(), "unexpected response") {
|
||||
t.Fatalf("getJSON() error = %v, want unexpected response", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRedisStickyStoreSetJSONRejectsUnexpectedResponse(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
server := newScriptedRedisServer(t, func(conn net.Conn, reader *bufio.Reader) {
|
||||
if _, err := readRESPArray(reader); err != nil {
|
||||
return
|
||||
}
|
||||
_, _ = io.WriteString(conn, ":1\r\n")
|
||||
})
|
||||
defer server.Close()
|
||||
|
||||
store := &RedisStickyStore{cfg: RedisConfig{Addr: server.Addr()}}
|
||||
err := store.setJSON(context.Background(), "sticky-key", map[string]string{"route_id": "asxs"}, time.Second)
|
||||
if err == nil || !strings.Contains(err.Error(), "unexpected response") {
|
||||
t.Fatalf("setJSON() error = %v, want unexpected response", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNormalizeRuntimeBackend(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
@@ -470,3 +555,35 @@ func TestRedisStickyStoreFixturePathExists(t *testing.T) {
|
||||
t.Fatal("temp dir base should not be empty")
|
||||
}
|
||||
}
|
||||
|
||||
type scriptedRedisServer struct {
|
||||
listener net.Listener
|
||||
handler func(net.Conn, *bufio.Reader)
|
||||
}
|
||||
|
||||
func newScriptedRedisServer(t *testing.T, handler func(net.Conn, *bufio.Reader)) *scriptedRedisServer {
|
||||
t.Helper()
|
||||
|
||||
ln, err := net.Listen("tcp", "127.0.0.1:0")
|
||||
if err != nil {
|
||||
t.Fatalf("net.Listen() error = %v", err)
|
||||
}
|
||||
server := &scriptedRedisServer{listener: ln, handler: handler}
|
||||
go func() {
|
||||
conn, err := ln.Accept()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer conn.Close()
|
||||
handler(conn, bufio.NewReader(conn))
|
||||
}()
|
||||
return server
|
||||
}
|
||||
|
||||
func (s *scriptedRedisServer) Addr() string {
|
||||
return s.listener.Addr().String()
|
||||
}
|
||||
|
||||
func (s *scriptedRedisServer) Close() {
|
||||
_ = s.listener.Close()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user