master-thesis/p4app/test.py

74 lines
2.1 KiB
Python
Raw Normal View History

2019-03-14 16:32:51 +00:00
from __future__ import unicode_literals
import struct
import sys
import re
import logging
import argparse
import subprocess
import ipaddress
logging.basicConfig()
log = logging.getLogger("main")
class TestStuff(object):
2019-03-14 19:19:50 +00:00
def __init__(self):
pass
2019-03-14 16:32:51 +00:00
2019-03-19 23:04:21 +00:00
def test_ping6_switch(self):
2019-03-19 23:02:52 +00:00
host = "h1"
dst_ipv6 = ipaddress.ip_address("2001:db8::42")
log.info("Trying to reach {} from {}".format(dst_ipv6, host))
2019-03-19 23:04:21 +00:00
cmd = "mx h1 ping6 -c1 {}".format(dst_ipv6).split(" ")
2019-03-19 23:02:52 +00:00
return cmd
2019-03-14 19:19:50 +00:00
def test_v6_static_mapping(self):
host = "h1"
nat64_prefix = ipaddress.ip_network("64:ff9b::/96")
dst_ipv4 = ipaddress.ip_address("10.0.0.1")
translated_ipv4 = nat64_prefix[int(dst_ipv4)]
2019-03-14 16:32:51 +00:00
2019-03-14 19:19:50 +00:00
log.info("Trying to reach {} ({}) from {}".format(dst_ipv4, translated_ipv4, host))
2019-03-14 19:21:31 +00:00
cmd = "mx h1 ping6 -c1 {}".format(translated_ipv4).split(" ")
2019-03-14 16:32:51 +00:00
2019-03-19 23:02:52 +00:00
return cmd
2019-03-14 16:32:51 +00:00
def commandline(self):
parser = argparse.ArgumentParser(description='controller++')
2019-03-14 19:19:50 +00:00
methods_dir = dir(self)
methods = [m for m in methods_dir if re.match("^test", m)]
methods = [re.sub("^test_(.*)", r"\1", m) for m in methods]
2019-03-14 19:21:31 +00:00
parser.add_argument('-m',
'--method', help="which method?", choices=methods, required=True)
2019-03-14 16:32:51 +00:00
parser.add_argument('--debug', help='Enable debug logging', action='store_true')
parser.add_argument('--verbose', help='Enable verbose logging', action='store_true')
parser.add_argument('--multicast-to-controller', help='Send debug multicast to controller', action='store_true')
self.args = parser.parse_args()
2019-03-14 19:19:50 +00:00
if self.args.debug:
log.setLevel(logging.DEBUG)
elif self.args.verbose:
log.setLevel(logging.INFO)
else:
log.setLevel(logging.WARNING)
f = getattr(self, "test_{}".format(self.args.method))
2019-03-19 23:02:52 +00:00
subprocess.call(f())
2019-03-14 16:32:51 +00:00
if __name__ == "__main__":
import sys
import os
log.info("Booting...")
log.debug("Debug enabled.")
2019-03-14 19:19:50 +00:00
t = TestStuff()
t.commandline()