Qemu PS/2 keyboard torture test script
All checks were successful
Build documentation / build-and-deploy (push) Successful in 2m30s
All checks were successful
Build documentation / build-and-deploy (push) Successful in 2m30s
This commit is contained in:
52
testing/qemu_ps2kb_torture.py
Normal file
52
testing/qemu_ps2kb_torture.py
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
import socket
|
||||||
|
import json
|
||||||
|
import time
|
||||||
|
import random
|
||||||
|
import string
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
KEYS_TO_USE = string.ascii_lowercase + string.digits
|
||||||
|
|
||||||
|
def qmp_execute(sock, command, args=None):
|
||||||
|
payload = {"execute": command}
|
||||||
|
if args:
|
||||||
|
payload["arguments"] = args
|
||||||
|
sock.sendall(json.dumps(payload).encode())
|
||||||
|
return json.loads(sock.recv(1024))
|
||||||
|
|
||||||
|
def main(qmp_socket, interval):
|
||||||
|
try:
|
||||||
|
# connect
|
||||||
|
client = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||||
|
client.connect(qmp_socket)
|
||||||
|
|
||||||
|
# qmp handshake
|
||||||
|
client.recv(1024)
|
||||||
|
qmp_execute(client, "qmp_capabilities")
|
||||||
|
|
||||||
|
print(f"Connected. Spamming random keys every {interval}s...")
|
||||||
|
|
||||||
|
while True:
|
||||||
|
key = random.choice(KEYS_TO_USE)
|
||||||
|
|
||||||
|
qmp_execute(client, "send-key", {"keys": [{"type": "qcode", "data": key}]})
|
||||||
|
|
||||||
|
print(f"Sent: {key}", end="\r")
|
||||||
|
time.sleep(interval)
|
||||||
|
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print("\nStopping stress test.")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"\nError: {e}")
|
||||||
|
finally:
|
||||||
|
client.close()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
|
||||||
|
parser.add_argument("--qmp-socket", help="Path to QMP socket file", type=str, default="/tmp/qmp-sock")
|
||||||
|
parser.add_argument("--interval", help="PS/2 keyboard torture interval", type=float, default=0.05)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
main(args.qmp_socket, args.interval)
|
||||||
Reference in New Issue
Block a user