Skip to content

Commit 31591ad

Browse files
committed
Fix TcpFakeServer EVALSHA NOSCRIPT error handling
- Add NOSCRIPT prefix to NoScriptError messages in TCP protocol - Add test for EVALSHA with missing script
1 parent f576458 commit 31591ad

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

fakeredis/_tcp_server.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from socketserver import ThreadingTCPServer, StreamRequestHandler
66
from typing import Dict, Tuple, Any, Union
77

8+
import redis.exceptions
89
from redis.lock import Lock
910

1011
from fakeredis import FakeRedis
@@ -84,7 +85,11 @@ def dump(self, value: Any, dump_bulk: bool = False) -> None:
8485
elif value is None:
8586
self.writer.write("$-1\r\n".encode())
8687
elif isinstance(value, Exception):
87-
self.writer.write(f"-{value.args[0]}\r\n".encode())
88+
if isinstance(value, redis.exceptions.NoScriptError):
89+
error_msg = f"NOSCRIPT {value.args[0]}"
90+
else:
91+
error_msg = value.args[0]
92+
self.writer.write(f"-{error_msg}\r\n".encode())
8893

8994

9095
class TCPFakeRequestHandler(StreamRequestHandler):
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import time
2+
from threading import Thread
3+
4+
import pytest
5+
import redis
6+
7+
from fakeredis import TcpFakeServer
8+
from test import testtools
9+
10+
11+
@testtools.run_test_if_lupa_installed()
12+
def test_evalsha_missing_script():
13+
"""Test that EVALSHA with a non-existent script returns NOSCRIPT error."""
14+
server_address = ("127.0.0.1", 19000)
15+
server = TcpFakeServer(server_address)
16+
t = Thread(target=server.serve_forever, daemon=True)
17+
t.start()
18+
time.sleep(0.1)
19+
20+
with redis.Redis(host=server_address[0], port=server_address[1]) as r:
21+
fake_sha = "0" * 40
22+
with pytest.raises(redis.exceptions.NoScriptError):
23+
r.evalsha(fake_sha, 0)
24+
25+
server.server_close()
26+
server.shutdown()
27+
t.join()

0 commit comments

Comments
 (0)