#!/usr/bin/env -S python3 -u import logging from logging.handlers import RotatingFileHandler import turso from antithesis.random import get_random handler = RotatingFileHandler( filename="bank_test.log", mode="a", maxBytes=1 * 1024 * 1024, backupCount=5, encoding=None, delay=0 ) handler.setLevel(logging.INFO) logger = logging.getLogger("root") logger.setLevel(logging.INFO) logger.addHandler(handler) try: con = turso.connect("bank_test.db") except Exception as e: print(f"Error connecting to database: {e}") exit(0) cur = con.cursor() length = cur.execute("SELECT num_accts FROM initial_state").fetchone()[0] def transaction(): # check that sender and recipient are different sender = get_random() % length + 1 recipient = get_random() % length + 1 if sender != recipient: # get a random value to transfer between accounts value = get_random() % 1e9 logger.info(f"Sender ID: {sender} | Recipient ID: {recipient} | Txn Val: {value}") cur.execute("BEGIN TRANSACTION;") # subtract value from balance of the sender account cur.execute(f""" UPDATE accounts SET balance = balance - {value} WHERE account_id = {sender}; """) # add value to balance of the recipient account cur.execute(f""" UPDATE accounts SET balance = balance + {value} WHERE account_id = {recipient}; """) cur.execute("COMMIT;") # run up to 100 transactions iterations = get_random() % 100 # logger.info(f"Starting {iterations} iterations") for i in range(iterations): transaction() # logger.info(f"Finished {iterations} iterations")