diff options
author | Timotej Lazar <timotej.lazar@fri.uni-lj.si> | 2018-10-07 19:02:26 +0200 |
---|---|---|
committer | Timotej Lazar <timotej.lazar@fri.uni-lj.si> | 2018-10-07 19:04:21 +0200 |
commit | b5b35faea7f4205f353f57178ddc795b7dce5043 (patch) | |
tree | f8531a61d236ea0abc4e9dc80692abdc36c6579a /kpov_judge/tasks/openvpn_multiple_hops | |
parent | 42076466e00aa066769050bb2e2b4d98e9cc4d20 (diff) |
Refactor SSH testing code out of individual tasks
Catch SSH errors and report failures as hints. Also some cleanups and
2to3 fixes.
Diffstat (limited to 'kpov_judge/tasks/openvpn_multiple_hops')
-rw-r--r-- | kpov_judge/tasks/openvpn_multiple_hops/task.py | 208 |
1 files changed, 47 insertions, 161 deletions
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)
-
-
|