redis-core/examples/probe-redis.py
Version a84871d065f3.bb1 · MIT. This preview displays packaged text and does not execute code. Treat the contents as untrusted instructions.
← Return to resource and package checksum
"""Synthetic Redis command observations. MIT, Copyright 2026 BB Skills."""
import socket,json,secrets,sys,datetime as dt,hashlib
from pathlib import Path
class Client:
def __init__(self):self.s=socket.create_connection(('bb-v44-redis',6379),timeout=5);self.f=self.s.makefile('rb')
def close(self):self.f.close();self.s.close()
def read(self):
line=self.f.readline()
if not line:raise EOFError('connection-closed')
kind=line[:1];value=line[1:-2]
if kind==b'+':return value.decode()
if kind==b'-':return {'error':value.decode().split(' ',1)[0]}
if kind==b':':return int(value)
if kind==b'$':
n=int(value)
if n==-1:return None
data=self.f.read(n);assert self.f.read(2)==b'\r\n';return data.decode()
if kind==b'*':
n=int(value);return None if n==-1 else [self.read() for _ in range(n)]
raise ValueError('Unsupported RESP2 response')
def cmd(self,*args):
values=[str(a).encode() for a in args];self.s.sendall(b'*'+str(len(values)).encode()+b'\r\n'+b''.join(b'$'+str(len(v)).encode()+b'\r\n'+v+b'\r\n' for v in values));return self.read()
cases=[];clients=[]
def client():c=Client();clients.append(c);return c
def check(name,observed,expected):
row={'name':name,'observed':observed,'expected':expected,'status':'passed' if observed==expected else 'failed'};cases.append(row);assert observed==expected,row
def ttl(name,c,key):value=c.cmd('TTL',key);check(name,0<value<=30,True);return value
try:
bootstrap=json.loads(sys.stdin.readline())['bootstrap_password']
a=client();check('initial-default-authentication',a.cmd('AUTH','default',bootstrap),'OK');check('initial-isolated-default-ping',a.cmd('PING'),'PONG')
info=a.cmd('INFO','server');version=next(line.split(':',1)[1] for line in info.splitlines() if line.startswith('redis_version:'))
check('string-counter-increments',a.cmd('INCR','cache:counter'),1);check('string-counter-second-increment',a.cmd('INCR','cache:counter'),2)
check('hash-add-two-fields',a.cmd('HSET','cache:profile','name','Sample','plan','free'),2)
check('hash-update-existing-field',a.cmd('HSET','cache:profile','plan','trial'),0);check('hash-other-field-preserved',a.cmd('HGET','cache:profile','name'),'Sample')
check('set-deduplicates',a.cmd('SADD','cache:members','one','one','two'),2);check('set-membership',a.cmd('SISMEMBER','cache:members','two'),1)
check('sorted-set-score-order',a.cmd('ZADD','cache:rank','10','a','20','b'),2);check('sorted-set-reversed-ranking',a.cmd('ZREVRANGE','cache:rank',0,-1),['b','a'])
check('ttl-created-with-set-ex',a.cmd('SET','cache:expires','old','EX',30),'OK');ttl('ttl-in-positive-window',a,'cache:expires')
check('plain-set-replaces-value',a.cmd('SET','cache:expires','new'),'OK');check('plain-set-removes-existing-ttl',a.cmd('TTL','cache:expires'),-1)
a.cmd('SET','cache:expires','old','EX',30);check('set-keepttl-update',a.cmd('SET','cache:expires','new','KEEPTTL'),'OK');ttl('keepttl-retains-positive-window',a,'cache:expires')
a.cmd('EXPIRE','cache:profile',30);a.cmd('HSET','cache:profile','plan','paid');ttl('hash-field-write-retains-key-ttl',a,'cache:profile')
check('missing-key-ttl',a.cmd('TTL','cache:missing'),-2)
# Two independent connections: WATCH is invalidated by an intervening write.
b=client();assert b.cmd('AUTH','default',bootstrap)=='OK';a.cmd('SET','cache:watch','0');check('watch-registers',a.cmd('WATCH','cache:watch'),'OK');a.cmd('MULTI');a.cmd('INCR','cache:watch');b.cmd('INCR','cache:watch');check('watch-exec-aborts-after-intervening-write',a.cmd('EXEC'),None);check('aborted-transaction-did-not-write',a.cmd('GET','cache:watch'),'1')
a.cmd('MULTI');a.cmd('INCR','cache:watch');a.cmd('GET','cache:watch');check('multi-exec-success',a.cmd('EXEC'),[2,'2'])
# Cache-reader example from the pinned source, using generated in-memory passwords.
admin_password=secrets.token_hex(24);reader_password=secrets.token_hex(24)
a.cmd('ACL','SETUSER','fixture_admin','reset','on','>'+admin_password,'~*','&*','+@all')
a.cmd('ACL','SETUSER','cache_reader','reset','on','>'+reader_password,'~cache:*','+get','+mget','+scan')
a.cmd('SET','cache:visible','synthetic-cache');a.cmd('SET','private:probe','synthetic-private')
admin=client();check('dedicated-admin-authentication',admin.cmd('AUTH','fixture_admin',admin_password),'OK');admin.cmd('ACL','SETUSER','default','off')
anon=client();check('anonymous-command-after-default-disabled',anon.cmd('GET','cache:visible'),{'error':'NOAUTH'})
reader=client();check('reader-authentication',reader.cmd('AUTH','cache_reader',reader_password),'OK')
check('reader-get-allowed-prefix',reader.cmd('GET','cache:visible'),'synthetic-cache');check('reader-get-denied-other-prefix',reader.cmd('GET','private:probe'),{'error':'NOPERM'})
check('reader-write-denied',reader.cmd('SET','cache:visible','attempt'),{'error':'NOPERM'});check('reader-flushall-denied',reader.cmd('FLUSHALL'),{'error':'NOPERM'})
check('reader-mixed-prefix-mget-denied',reader.cmd('MGET','cache:visible','private:probe'),{'error':'NOPERM'})
check('denied-write-left-value-unchanged',admin.cmd('GET','cache:visible'),'synthetic-cache')
names=[];cursor='0'
for _ in range(50):
cursor,chunk=reader.cmd('SCAN',cursor,'COUNT',100);names.extend(chunk)
if cursor=='0':break
assert cursor=='0'
check('scan-can-reveal-key-name-outside-acl-prefix','private:probe' in names,True)
# ACL SETUSER updates add rules unless the relevant permissions are reset.
admin.cmd('ACL','SETUSER','cache_reader','~private:*','+set')
admin.cmd('ACL','SETUSER','cache_reader','~cache:*','+get')
check('additive-acl-update-retains-private-prefix',reader.cmd('GET','private:probe'),'synthetic-private')
check('additive-acl-update-retains-write-command',reader.cmd('SET','cache:visible','changed'),'OK')
check('acl-tighten-key-and-command-rules',admin.cmd('ACL','SETUSER','cache_reader','resetkeys','-@all','~cache:*','+get','+mget'),'OK')
check('resetkeys-removes-private-prefix',reader.cmd('GET','private:probe'),{'error':'NOPERM'});check('command-reset-removes-write',reader.cmd('SET','cache:visible','attempt'),{'error':'NOPERM'})
check('command-reset-removes-scan',reader.cmd('SCAN',0),{'error':'NOPERM'})
admin.cmd('ACL','SETUSER','cache_reader','off')
fresh=client();check('off-prevents-new-user-authentication',fresh.cmd('AUTH','cache_reader',reader_password),{'error':'WRONGPASS'})
check('off-existing-authenticated-connection-still-reads',reader.cmd('GET','cache:visible'),'changed')
check('kill-user-closes-one-existing-connection',admin.cmd('CLIENT','KILL','USER','cache_reader'),1)
try:reader.cmd('GET','cache:visible');closed=False
except (EOFError,ConnectionError,OSError):closed=True
check('killed-user-connection-closed',closed,True)
check('private-data-remains-after-denied-destructive-command',admin.cmd('GET','private:probe'),'synthetic-private')
evidence={'format':1,'executed_at':dt.datetime.now(dt.UTC).isoformat(),'redis_version':version,'python':sys.version.split()[0],'observations':len(cases),'cases':cases,'runtime_tested':False,'native_command_fixture_tested':True,'tls_tested':False,'production_tested':False,'ai_client_executed':False,'synthetic_credentials_retained':False,'source_hashes':{'probe-redis.py':hashlib.sha256(Path(__file__).read_bytes()).hexdigest()}}
print(json.dumps(evidence))
finally:
for c in clients:
try:c.close()
except OSError:pass