From b5b35faea7f4205f353f57178ddc795b7dce5043 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Sun, 7 Oct 2018 19:02:26 +0200 Subject: Refactor SSH testing code out of individual tasks Catch SSH errors and report failures as hints. Also some cleanups and 2to3 fixes. --- kpov_judge/tasks/openvpn_multiple_hops/task.py | 208 ++++++------------------- 1 file changed, 47 insertions(+), 161 deletions(-) (limited to 'kpov_judge/tasks/openvpn_multiple_hops') diff --git a/kpov_judge/tasks/openvpn_multiple_hops/task.py b/kpov_judge/tasks/openvpn_multiple_hops/task.py index 5d6b033..73a6c53 100644 --- a/kpov_judge/tasks/openvpn_multiple_hops/task.py +++ b/kpov_judge/tasks/openvpn_multiple_hops/task.py @@ -120,144 +120,32 @@ params_meta = { def task(IP_SimpleArbiterLAN, IP_VPNClient1, IP_LANClient1, IP1_VPNClient2, IP2_VPNClient2, IP_LANClient2, IP_VPNClient3, IP_LANClient3): - - from pexpect import pxssh # Used to set up an SSH connection to a remote machine - import pexpect # Allows the script to spawn a child application and control it as if a human were typing commands - - - # The necessary things we need to check if the task was performed correctly - results = dict() - - # The login params (these must be used on the machines!) - peer_user = 'test' - peer_passwd = 'test' - - ### - # Sets up the SSH connections to the machines - ### - # VPNClient1 - sC1 = pxssh.pxssh() - - # Logs in to the machines with the default login params - sC1.login( - IP_LANClient1, - peer_user, - peer_passwd - ) - - ###### - # Ukazi za A - ###### - - # ifconfig -a - sC1.sendline('/sbin/ifconfig -a') - sC1.prompt() - results['VPNClient1_ifconfig'] = sC1.before - - # route -n - sC1.sendline('/sbin/route -n') - sC1.prompt() - results['VPNClient1_route'] = sC1.before - - # ping C2 - sC1.sendline('ping -c 3 {}'.format(IP1_VPNClient2)) - sC1.prompt() - results['VPNClient1_ping1_C2'] = sC1.before - - sC1.sendline('ping -c 3 {}'.format(IP2_VPNClient2)) - sC1.prompt() - results['VPNClient1_ping2_C2'] = sC1.before - - # ping C3 - sC1.sendline('ping -c 3 {}'.format(IP_VPNClient3)) - sC1.prompt() - results['VPNClient1_ping_C3'] = sC1.before - - # traceroute na C - - sC1.sendline('traceroute {}'.format(IP_VPNClient3)) - sC1.prompt() - results['VPNClient1_traceroute_C3'] = sC1.before - - sC1.logout() - - ###### - # Ukazi za B - ###### - - # VPNClient2 - sC2 = pxssh.pxssh() - - sC2.login( - IP_LANClient2, - peer_user, - peer_passwd - ) - - - # ifconfig -a - sC2.sendline('/sbin/ifconfig -a') - sC2.prompt() - results['VPNClient2_ifconfig'] = sC2.before - - # route -n - sC2.sendline('/sbin/route -n') - sC2.prompt() - results['VPNClient2_route'] = sC2.before - - # ping C2 - sC2.sendline('ping -c 3 {}'.format(IP_VPNClient1)) - sC2.prompt() - results['VPNClient2_ping_C1'] = sC2.before - - # ping C3 - - sC2.sendline('ping -c 3 {}'.format(IP_VPNClient3)) - sC2.prompt() - results['VPNClient2_ping_C3'] = sC2.before - - sC2.logout() - - ###### - # Ukazi za C - ###### - - # VPNClient3 - sC3 = pxssh.pxssh() - - sC3.login( - IP_LANClient3, - peer_user, - peer_passwd - ) - - # ifconfig -a - sC3.sendline('/sbin/ifconfig -a') - sC3.prompt() - results['VPNClient3_ifconfig'] = sC3.before - - # route -n - sC3.sendline('/sbin/route -n') - sC3.prompt() - results['VPNClient3_route'] = sC3.before - - # ping C2 - sC3.sendline('ping -c 3 {}'.format(IP2_VPNClient2)) - sC3.prompt() - results['VPNClient3_ping_C2'] = sC3.before - - # ping C3 - sC3.sendline('ping -c 3 {}'.format(IP_VPNClient1)) - sC3.prompt() - results['VPNClient3_ping_C1'] = sC3.before - - # traceroute na C - sC3.sendline('traceroute {}'.format(IP_VPNClient1)) - sC3.prompt() - results['VPNClient3_traceroute_C1'] = sC3.before + tests = { + ('VPNClient1', IP_LANClient1): [ + ('VPNClient1_ping_C2', 'ping -c 3 {}'.format(IP1_VPNClient2)), + ('VPNClient1_ping_C3', 'ping -c 3 {}'.format(IP_VPNClient3)), + ('VPNClient1_traceroute_C3', 'traceroute {}'.format(IP_VPNClient3)), + ], + ('VPNClient2', IP_LANClient2): [ + ('VPNClient2_ping_C1', 'ping -c 3 {}'.format(IP_VPNClient1)), + ('VPNClient2_ping_C3', 'ping -c 3 {}'.format(IP_VPNClient3)), + ], + ('VPNClient3', IP_LANClient3): [ + ('VPNClient3_ping_C1', 'ping -c 3 {}'.format(IP_VPNClient1)), + ('VPNClient3_ping_C2', 'ping -c 3 {}'.format(IP2_VPNClient2)), + ('VPNClient3_traceroute_C1', 'traceroute {}'.format(IP_VPNClient1)), + ], + } - sC3.logout() + for (name, host), host_tests in tests.items(): + host_tests += [ + (name+'_ifconfig', '/sbin/ifconfig -a'), + (name+'_route', '/sbin/route -n'), + ] + results = collections.defaultdict(str) + for (name, host), host_tests in tests.items(): + results.update(kpov_util.ssh_test(host, 'test', 'test', host_tests)) return results def gen_params(user_id, params_meta): @@ -296,18 +184,18 @@ def task_check(results, params): rs = r"tun.*\n.*inet.*{}".format(IP2_C2) if re.search(rs, results['VPNClient2_ifconfig']): score += 1 - else: - hints.append("ifconfig on VPNClient2 is not OK") + else: + hints.append("ifconfig on VPNClient2 is not OK") pass else: - hints.append("ifconfig on VPNClient2 is not OK") + hints.append("ifconfig on VPNClient2 is not OK") pass # C3 rs = r"tun0.*\n.*inet.*{}".format(IP_C3) if re.search(rs, results['VPNClient3_ifconfig']): score += 1 else: - hints.append("ifconfig on VPNClient3 is not OK") + hints.append("ifconfig on VPNClient3 is not OK") pass # testi za route # C1 @@ -321,22 +209,22 @@ def task_check(results, params): if re.search(rs, results['VPNClient1_route']): rs = r"{} {}.*tun0".format(ASD, IP1_C2) if re.search(rs, results['VPNClient1_route']): - score += 1 + score += 1 else: hints.append("route on VPNClient1 is not OK") else: - hints.append("route on VPNClient1 is not OK") + hints.append("route on VPNClient1 is not OK") pass # C2 rs = r"{}.*tun".format(IP_C1) if re.search(rs, results['VPNClient2_route']): rs = r"{}.*tun".format(IP_C3) if re.search(rs, results['VPNClient2_route']): - score += 1 + score += 1 else: hints.append("route on VPNClient2 is not OK") else: - hints.append("route on VPNClient2 is not OK") + hints.append("route on VPNClient2 is not OK") pass # C3 rs = r"{}.*tun0".format(IP2_C2) @@ -349,32 +237,32 @@ def task_check(results, params): if re.search(rs, results['VPNClient3_route']): rs = r"{} {}.*tun0".format(ASD, IP2_C2) if re.search(rs, results['VPNClient3_route']): - score += 1 + score += 1 else: hints.append("route on VPNClient3 is not OK") else: - hints.append("route on VPNClient3 is not OK") + hints.append("route on VPNClient3 is not OK") pass # testi za ping # C1 rs = r"64 bytes from {}: icmp_seq=[0-9]+ ttl=[0-9]+ time=\d+\.\d+ ms".format(IP1_C2) - if re.search(rs, results['VPNClient1_ping1_C2']): - score += 0.5 + if re.search(rs, results['VPNClient1_ping_C2']): + score += 0.5 else: - hints.append("ping from VPNClient1 to VPNClient2 is not OK") + hints.append("ping from VPNClient1 to VPNClient2 is not OK") pass rs = r"64 bytes from {}: icmp_seq=[0-9]+ ttl=[0-9]+ time=\d+\.\d+ ms".format(IP_C3) if re.search(rs, results['VPNClient1_ping_C3']): - score += 0.5 + score += 0.5 else: - hints.append("ping from VPNClient1 to VPNClient3 is not OK") + hints.append("ping from VPNClient1 to VPNClient3 is not OK") pass # C2 rs = r"64 bytes from {}: icmp_seq=[0-9]+ ttl=[0-9]+ time=\d+\.\d+ ms".format(IP_C1) if re.search(rs, results['VPNClient2_ping_C1']): - score += 0.5 + score += 0.5 else: - hints.append("ping from VPNClient2 to VPNClient1 is not OK") + hints.append("ping from VPNClient2 to VPNClient1 is not OK") pass rs = r"64 bytes from {}: icmp_seq=[0-9]+ ttl=[0-9]+ time=\d+\.\d+ ms".format(IP_C3) if re.search(rs, results['VPNClient2_ping_C3']): @@ -385,15 +273,15 @@ def task_check(results, params): # C3 rs = r"64 bytes from {}: icmp_seq=[0-9]+ ttl=[0-9]+ time=\d+\.\d+ ms".format(IP_C1) if re.search(rs, results['VPNClient3_ping_C1']): - score += 0.5 + score += 0.5 else: - hints.append("ping from VPNClient3 to VPNClient1 is not OK") + hints.append("ping from VPNClient3 to VPNClient1 is not OK") pass rs = r"64 bytes from {}: icmp_seq=1 ttl=[0-9]+ time=\d+\.\d+ ms".format(IP2_C2) if re.search(rs, results['VPNClient3_ping_C2']): - score += 0.5 + score += 0.5 else: - hints.append("ping from VPNClient3 to VPNClient2 is not OK") + hints.append("ping from VPNClient3 to VPNClient2 is not OK") pass #score = int(score) @@ -405,7 +293,7 @@ def task_check(results, params): if re.search(rs, results['VPNClient1_traceroute_C3']): score += 1 else: - hints.append("traceroute from VPNClient1 to VPNClient3 is not OK") + hints.append("traceroute from VPNClient1 to VPNClient3 is not OK") pass else: hints.append("traceroute from VPNClient1 to VPNClient3 is not OK") @@ -417,7 +305,7 @@ def task_check(results, params): if re.search(rs, results['VPNClient3_traceroute_C1']): score += 1 else: - hints.append("traceroute from VPNClient1 to VPNClient3 is not OK") + hints.append("traceroute from VPNClient1 to VPNClient3 is not OK") pass else: hints.append("traceroute from VPNClient1 to VPNClient3 is not OK") @@ -430,5 +318,3 @@ def task_check(results, params): def prepare_disks(templates, task_params, global_params): write_default_config(templates['simpleArbiterDhcp'], global_params) - - -- cgit v1.2.1