import subprocess import random import sys PORT = 5055 ALL_IPS = [ "172.22.156.3", "172.22.158.2", "172.22.94.2", "172.22.156.4", "172.22.158.3", "172.22.94.3", "172.22.156.5", "172.22.158.4", "172.22.94.4", "172.22.156.6" ] tests = ["TEST_ALL", "TEST_UNIQUE", "TEST_SOME", "TEST_MEDIUM"] results = ["""Filename: machine.1.log Matches: 1 1:[1-0] [INFO] TEST_ALL Filename: machine.2.log Matches: 1 1:[2-0] [INFO] TEST_ALL Filename: machine.3.log Matches: 1 1:[3-0] [INFO] TEST_ALL Filename: machine.4.log Matches: 1 1:[4-0] [INFO] TEST_ALL Filename: machine.5.log Matches: 1 1:[5-0] [INFO] TEST_ALL Filename: machine.6.log Matches: 1 1:[6-0] [INFO] TEST_ALL Filename: machine.7.log Matches: 1 1:[7-0] [INFO] TEST_ALL Filename: machine.8.log Matches: 1 1:[8-0] [INFO] TEST_ALL Filename: machine.9.log Matches: 1 1:[9-0] [INFO] TEST_ALL Filename: machine.10.log Matches: 1 1:[10-0] [INFO] TEST_ALL =========================== SUMMARY =========================== machine.1.test.log: 1 matches machine.2.test.log: 1 matches machine.3.test.log: 1 matches machine.4.test.log: 1 matches machine.5.test.log: 1 matches machine.6.test.log: 1 matches machine.7.test.log: 1 matches machine.8.test.log: 1 matches machine.9.test.log: 1 matches machine.10.test.log: 1 matches Total matches: 10 ===============================================================""", """ Filename: machine.2.log Matches: 1 2:[2-1] [DEBUG] TEST_UNIQUE Filename: machine.4.log Matches: 1 2:[4-1] [DEBUG] TEST_UNIQUE Filename: machine.6.log Matches: 1 2:[6-1] [DEBUG] TEST_UNIQUE Filename: machine.8.log Matches: 1 2:[8-1] [DEBUG] TEST_UNIQUE Filename: machine.10.log Matches: 1 2:[10-1] [DEBUG] TEST_UNIQUE =========================== SUMMARY =========================== machine.1.test.log: 0 matches machine.2.test.log: 1 matches machine.3.test.log: 0 matches machine.4.test.log: 1 matches machine.5.test.log: 0 matches machine.6.test.log: 1 matches machine.7.test.log: 0 matches machine.8.test.log: 1 matches machine.9.test.log: 0 matches machine.10.test.log: 1 matches Total matches: 5 =============================================================== """, """ Filename: machine.1.log Matches: 1 3:[1-2] [ERROR] TEST_SOME Filename: machine.3.log Matches: 1 3:[3-2] [ERROR] TEST_SOME Filename: machine.5.log Matches: 1 3:[5-2] [ERROR] TEST_SOME Filename: machine.7.log Matches: 1 3:[7-2] [ERROR] TEST_SOME Filename: machine.9.log Matches: 1 3:[9-2] [ERROR] TEST_SOME =========================== SUMMARY =========================== machine.1.test.log: 1 matches machine.2.test.log: 0 matches machine.3.test.log: 1 matches machine.4.test.log: 0 matches machine.5.test.log: 1 matches machine.6.test.log: 0 matches machine.7.test.log: 1 matches machine.8.test.log: 0 matches machine.9.test.log: 1 matches machine.10.test.log: 0 matches Total matches: 5 =============================================================== """, """ Filename: machine.1.log Matches: 10 4:[1-3] [INFO] TEST_MEDIUM 5:[1-4] [INFO] TEST_MEDIUM 6:[1-5] [INFO] TEST_MEDIUM 7:[1-6] [INFO] TEST_MEDIUM 8:[1-7] [INFO] TEST_MEDIUM 9:[1-8] [INFO] TEST_MEDIUM 10:[1-9] [INFO] TEST_MEDIUM 11:[1-10] [INFO] TEST_MEDIUM 12:[1-11] [INFO] TEST_MEDIUM 13:[1-12] [INFO] TEST_MEDIUM Filename: machine.2.log Matches: 10 4:[2-3] [INFO] TEST_MEDIUM 5:[2-4] [INFO] TEST_MEDIUM 6:[2-5] [INFO] TEST_MEDIUM 7:[2-6] [INFO] TEST_MEDIUM 8:[2-7] [INFO] TEST_MEDIUM 9:[2-8] [INFO] TEST_MEDIUM 10:[2-9] [INFO] TEST_MEDIUM 11:[2-10] [INFO] TEST_MEDIUM 12:[2-11] [INFO] TEST_MEDIUM 13:[2-12] [INFO] TEST_MEDIUM Filename: machine.3.log Matches: 10 4:[3-3] [INFO] TEST_MEDIUM 5:[3-4] [INFO] TEST_MEDIUM 6:[3-5] [INFO] TEST_MEDIUM 7:[3-6] [INFO] TEST_MEDIUM 8:[3-7] [INFO] TEST_MEDIUM 9:[3-8] [INFO] TEST_MEDIUM 10:[3-9] [INFO] TEST_MEDIUM 11:[3-10] [INFO] TEST_MEDIUM 12:[3-11] [INFO] TEST_MEDIUM 13:[3-12] [INFO] TEST_MEDIUM Filename: machine.4.log Matches: 10 4:[4-3] [INFO] TEST_MEDIUM 5:[4-4] [INFO] TEST_MEDIUM 6:[4-5] [INFO] TEST_MEDIUM 7:[4-6] [INFO] TEST_MEDIUM 8:[4-7] [INFO] TEST_MEDIUM 9:[4-8] [INFO] TEST_MEDIUM 10:[4-9] [INFO] TEST_MEDIUM 11:[4-10] [INFO] TEST_MEDIUM 12:[4-11] [INFO] TEST_MEDIUM 13:[4-12] [INFO] TEST_MEDIUM Filename: machine.5.log Matches: 10 4:[5-3] [INFO] TEST_MEDIUM 5:[5-4] [INFO] TEST_MEDIUM 6:[5-5] [INFO] TEST_MEDIUM 7:[5-6] [INFO] TEST_MEDIUM 8:[5-7] [INFO] TEST_MEDIUM 9:[5-8] [INFO] TEST_MEDIUM 10:[5-9] [INFO] TEST_MEDIUM 11:[5-10] [INFO] TEST_MEDIUM 12:[5-11] [INFO] TEST_MEDIUM 13:[5-12] [INFO] TEST_MEDIUM Filename: machine.6.log Matches: 10 4:[6-3] [INFO] TEST_MEDIUM 5:[6-4] [INFO] TEST_MEDIUM 6:[6-5] [INFO] TEST_MEDIUM 7:[6-6] [INFO] TEST_MEDIUM 8:[6-7] [INFO] TEST_MEDIUM 9:[6-8] [INFO] TEST_MEDIUM 10:[6-9] [INFO] TEST_MEDIUM 11:[6-10] [INFO] TEST_MEDIUM 12:[6-11] [INFO] TEST_MEDIUM 13:[6-12] [INFO] TEST_MEDIUM Filename: machine.7.log Matches: 10 4:[7-3] [INFO] TEST_MEDIUM 5:[7-4] [INFO] TEST_MEDIUM 6:[7-5] [INFO] TEST_MEDIUM 7:[7-6] [INFO] TEST_MEDIUM 8:[7-7] [INFO] TEST_MEDIUM 9:[7-8] [INFO] TEST_MEDIUM 10:[7-9] [INFO] TEST_MEDIUM 11:[7-10] [INFO] TEST_MEDIUM 12:[7-11] [INFO] TEST_MEDIUM 13:[7-12] [INFO] TEST_MEDIUM Filename: machine.8.log Matches: 10 4:[8-3] [INFO] TEST_MEDIUM 5:[8-4] [INFO] TEST_MEDIUM 6:[8-5] [INFO] TEST_MEDIUM 7:[8-6] [INFO] TEST_MEDIUM 8:[8-7] [INFO] TEST_MEDIUM 9:[8-8] [INFO] TEST_MEDIUM 10:[8-9] [INFO] TEST_MEDIUM 11:[8-10] [INFO] TEST_MEDIUM 12:[8-11] [INFO] TEST_MEDIUM 13:[8-12] [INFO] TEST_MEDIUM Filename: machine.9.log Matches: 10 4:[9-3] [INFO] TEST_MEDIUM 5:[9-4] [INFO] TEST_MEDIUM 6:[9-5] [INFO] TEST_MEDIUM 7:[9-6] [INFO] TEST_MEDIUM 8:[9-7] [INFO] TEST_MEDIUM 9:[9-8] [INFO] TEST_MEDIUM 10:[9-9] [INFO] TEST_MEDIUM 11:[9-10] [INFO] TEST_MEDIUM 12:[9-11] [INFO] TEST_MEDIUM 13:[9-12] [INFO] TEST_MEDIUM Filename: machine.10.log Matches: 10 4:[10-3] [INFO] TEST_MEDIUM 5:[10-4] [INFO] TEST_MEDIUM 6:[10-5] [INFO] TEST_MEDIUM 7:[10-6] [INFO] TEST_MEDIUM 8:[10-7] [INFO] TEST_MEDIUM 9:[10-8] [INFO] TEST_MEDIUM 10:[10-9] [INFO] TEST_MEDIUM 11:[10-10] [INFO] TEST_MEDIUM 12:[10-11] [INFO] TEST_MEDIUM 13:[10-12] [INFO] TEST_MEDIUM =========================== SUMMARY =========================== machine.1.test.log: 10 matches machine.2.test.log: 10 matches machine.3.test.log: 10 matches machine.4.test.log: 10 matches machine.5.test.log: 10 matches machine.6.test.log: 10 matches machine.7.test.log: 10 matches machine.8.test.log: 10 matches machine.9.test.log: 10 matches machine.10.test.log: 10 matches Total matches: 100 =============================================================== """] #generate log files on all the machines before running this test print("Generating log files on all machines...") for i, ip in enumerate(ALL_IPS): subprocess.run(["ssh", f"asing271@{ip}", f"cd ~/fa26_cs425_.group-mp_.team-01/MP1 && python3 generate_log.py {i + 1} 100"]) #start the server on all the machines before running this test print("Starting server on all machines...") for i, ip in enumerate(ALL_IPS): print(f"Starting server on machine {i + 1} ({ip})...") subprocess.run(["ssh", f"asing271@{ip}", "cd ~/fa26_cs425_.group-mp_.team-01/MP1 && setsid -f python3 server.py > server.log 2>&1 < /dev/null"]) #ssh into one machine at randome machine_num = random.randint(1, len(ALL_IPS)) print(f"Running grep command on a {machine_num} random machine...") for i in tests: result = subprocess.run(["ssh", f"asing271@{ALL_IPS[machine_num - 1]}", f"cd ~/fa26_cs425_.group-mp_.team-01/MP1 && grepp {i} -t"], capture_output=True, text=True) if result.stdout.strip() == results[tests.index(i)].strip(): print(f"PASS {i} test") else: print(f"FAIL {i} test") #delete log files on all the machines after running this test print("Deleting log files on all machines...") for i, ip in enumerate(ALL_IPS): subprocess.run(["ssh", f"asing271@{ip}", "cd ~/fa26_cs425_.group-mp_.team-01/MP1 && rm -f ./machine.*.test.log"])