def run_flowvisor(self, flowvisor): """ Run flowvisor. Delete all the rules and slices. """ if RUN_FV_SUBPROCESS: kill_old_procs(flowvisor["of_port"], flowvisor["xmlrpc_port"]) self.fv_procs.append( self.run_proc_cmd( "%s/scripts/flowvisor.sh %s/%s 2>&1 | tee /tmp/flowvisor.out " % ( flowvisor["path"][0], flowvisor["path"][0], flowvisor["path"][1], ))) id_re = re.compile(r"id=\[(?P<id>\d+)\]") fv_url = "https://%s:%s@%s:%s" % ( flowvisor["username"], flowvisor["password"], flowvisor["host"], flowvisor["xmlrpc_port"], ) s = xmlrpclib.ServerProxy(fv_url) logger.debug("Waiting for flowvisor to be up.") ret = wrap_xmlrpc_call(s.api.ping, ["PONG"], {}, test_settings.TIMEOUT) logger.debug("Ping returned: %s" % ret) logger.debug("Getting flowspace from flowvisor") flowspaces = s.api.listFlowSpace() ops = [] logger.debug("Deleting all flowspace") for fs in flowspaces: id = id_re.search(fs).group("id") ops.append(dict(operation="REMOVE", id=id)) if ops: s.api.changeFlowSpace(ops) slices = s.api.listSlices() [s.api.deleteSlice(slice) for slice in slices if slice != "root"] self.fv_clients.append(s)
def run_flowvisor(self, flowvisor): """ Run flowvisor. Delete all the rules and slices. """ if RUN_FV_SUBPROCESS: kill_old_procs(flowvisor["of_port"], flowvisor["xmlrpc_port"]) self.fv_procs.append( self.run_proc_cmd( "%s/scripts/flowvisor.sh %s/%s 2>&1 | tee /tmp/flowvisor.out " % ( flowvisor["path"][0], flowvisor["path"][0], flowvisor["path"][1], ) ) ) id_re = re.compile(r"id=\[(?P<id>\d+)\]") fv_url = "https://%s:%s@%s:%s" % ( flowvisor["username"], flowvisor["password"], flowvisor["host"], flowvisor["xmlrpc_port"], ) s = xmlrpclib.ServerProxy(fv_url) logger.debug("Waiting for flowvisor to be up.") ret = wrap_xmlrpc_call(s.api.ping, ["PONG"], {}, test_settings.TIMEOUT) logger.debug("Ping returned: %s" % ret) logger.debug("Getting flowspace from flowvisor") flowspaces = s.api.listFlowSpace() ops = [] logger.debug("Deleting all flowspace") for fs in flowspaces: id = id_re.search(fs).group("id") ops.append(dict(operation="REMOVE", id=id)) if ops: s.api.changeFlowSpace(ops) slices = s.api.listSlices() [s.api.deleteSlice(slice) for slice in slices if slice != "root"] self.fv_clients.append(s)
def tearDown(self): """ Clean up the Flowvisor rules/slices Clear running stuff and so on... """ # restore the trusted CA dir from django.conf import settings as djangosettings import os after = os.listdir(djangosettings.XMLRPC_TRUSTED_CA_PATH) for path in after: if path not in self.before: os.unlink(os.path.join(djangosettings.XMLRPC_TRUSTED_CA_PATH, path)) if test_settings.PAUSE_AFTER_TESTS: raw_input("Press ENTER to continue:") # clear all slices/flowspaces from fvs if RUN_FV_SUBPROCESS: for fv_proc in self.fv_procs: try: fv_proc.terminate() except: pass self.am_proc.terminate() self.ch_proc.terminate() # kill ssh sessions # for c in self.nox_clients: # out = c.communicate("\03", check_closed=True) # logger.debug("nox stdout %s" % out) for c in self.mininet_vm_clients: out = c.communicate("exit()\n", check_closed=True) logger.debug("mn stdout %s" % out) c.wait() if RUN_FV_SUBPROCESS: for flowvisor in test_settings.FLOWVISORS: kill_old_procs(flowvisor["of_port"], flowvisor["xmlrpc_port"]) # Kill stale processes kill_old_procs(test_settings.GAM_PORT, test_settings.GCH_PORT) # for c in self.nox_clients: # try: # c.close() # except: # pass for c in self.fv_procs: try: c.close() except: pass for c in self.mininet_vm_clients: try: c.close() except: pass
def setUp(self): """ Run dummy networks and connect them to the FVs Run dummy Controllers Load the configuration for the OM Load the configuration for the AM """ # Kill stale processes kill_old_procs(test_settings.GAM_PORT, test_settings.GCH_PORT) self.ch_username = "******" self.ch_passwd = "ch_password" # clear all slices/flowspaces from fvs self.fv_procs = [] self.fv_clients = [] for flowvisor in test_settings.FLOWVISORS: self.run_flowvisor(flowvisor) # # run experiment controllers # self.run_nox( # test_settings.MININET_VMS[0][0], # test_settings.NUM_EXPERIMENTS, # 6633, # ) # connect the networks to FVs self.connect_networks( test_settings.FLOWVISORS, test_settings.MININET_VMS, test_settings.MININET_SWITCH_TYPE, ) # setup the OM self.prepare_om( test_settings.OM_PROJECT_DIR, test_settings.FLOWVISORS[0], self.ch_username, self.ch_passwd, ) # setup Expedient (aka AM) self.prepare_ch( test_settings.CH_PROJECT_DIR, test_settings.HOST, test_settings.CH_PORT, self.ch_username, self.ch_passwd, test_settings.HOST, test_settings.OM_PORT, ) # store the trusted CA dir import os from django.conf import settings as djangosettings self.before = os.listdir(djangosettings.XMLRPC_TRUSTED_CA_PATH) # Run the AM proxy for GENI and Expedient self.run_geni_ch( test_settings.GCF_DIR, test_settings.SSL_DIR, test_settings.GAM_PORT) self.run_am_proxy( test_settings.GCF_DIR, test_settings.SSL_DIR, test_settings.GCH_PORT, test_settings.HOST, test_settings.CH_PORT)
def setUp(self): """ Load the DB fixtures for the AM (running using Apache). Create an xml-rpc client to talk to the AM Proxy through GAPI. Run the test Expedient, and create client to talk to it. """ import time, httplib, os call_env_command(settings.CH_PROJECT_DIR, "flush", interactive=False) call_env_command(settings.CH_PROJECT_DIR, "syncdb", interactive=False) logger.debug("setup started") # now we can import django stuff from django.core.urlresolvers import reverse from django.conf import settings as djangosettings from openflow.plugin.models import OpenFlowAggregate self.assertEqual(OpenFlowAggregate.objects.all().count(), 0) self.create_users() self.browser = Browser() self.browser.login(get_base_url(reverse("auth_login")), username="******", password="******") self.setup_dummy_oms() # store the trusted CA dir self.before = os.listdir(djangosettings.XMLRPC_TRUSTED_CA_PATH) # Create the ssl certificates cmd = "make -C %s" % settings.SSL_DIR run_cmd(cmd).wait() # add the certificate to apache's certificate dir try: os.unlink(join(settings.APACHE_CERTS_DIR, "test-ca.crt")) except OSError as e: if "Errno 2" in "%s" % e: pass else: raise os.symlink(os.path.abspath(join(settings.SSL_DIR, "ca.crt")), join(settings.APACHE_CERTS_DIR, "test-ca.crt")) subprocess.call(shlex.split("make -C %s" % settings.APACHE_CERTS_DIR)) # run the CH kill_old_procs(settings.GCH_PORT, settings.GAM_PORT) cmd = "python %s -u %s -r %s -c %s -k %s -p %s --debug -H 0.0.0.0" % ( join(settings.GCF_DIR, "gch.py"), join(settings.SSL_DIR, "experimenter.crt"), join(settings.SSL_DIR, "certs"), join(settings.SSL_DIR, "ch.crt"), join(settings.SSL_DIR, "ch.key"), settings.GCH_PORT, ) self.ch_proc = run_cmd(cmd, pause=True) # # run the AM proxy # cmd = "python %s -r %s -c %s -k %s -p %s -u %s --debug -H 0.0.0.0" % ( # join(settings.GCF_DIR, "gam.py"), # join(settings.SSL_DIR, "certs"), # join(settings.SSL_DIR, "server.crt"), # join(settings.SSL_DIR, "server.key"), # settings.GAM_PORT, # SCHEME + "://%s:%s/openflow/gapi/" % (settings.HOST, settings.CH_PORT), # ) # self.am_proc = run_cmd(cmd, pause=True) ch_host = "%s:%s" % (settings.HOST, settings.GCH_PORT) cert_transport = SafeTransportWithCert( keyfile=join(settings.SSL_DIR, "experimenter.key"), certfile=join(settings.SSL_DIR, "experimenter.crt")) self.ch_client = xmlrpclib.ServerProxy("https://" + ch_host + "/", transport=cert_transport) am_host = "%s:%s" % (settings.HOST, settings.CH_PORT) cert_transport = SafeTransportWithCert( keyfile=join(settings.SSL_DIR, "experimenter.key"), certfile=join(settings.SSL_DIR, "experimenter.crt")) self.am_client = xmlrpclib.ServerProxy("https://" + am_host + "/openflow/gapi/", transport=cert_transport) logger.debug("setup done")
def setUp(self): """ Load the DB fixtures for the AM (running using Apache). Create an xml-rpc client to talk to the AM Proxy through GAPI. Run the test Expedient, and create client to talk to it. """ import time, httplib, os call_env_command(settings.CH_PROJECT_DIR, "flush", interactive=False) call_env_command(settings.CH_PROJECT_DIR, "syncdb", interactive=False) logger.debug("setup started") # now we can import django stuff from django.core.urlresolvers import reverse from django.conf import settings as djangosettings from openflow.plugin.models import OpenFlowAggregate self.assertEqual(OpenFlowAggregate.objects.all().count(), 0) self.create_users() self.browser = Browser() self.browser.login(get_base_url(reverse("auth_login")), username="******", password="******") self.setup_dummy_oms() # store the trusted CA dir self.before = os.listdir(djangosettings.XMLRPC_TRUSTED_CA_PATH) # Create the ssl certificates cmd = "make -C %s" % settings.SSL_DIR run_cmd(cmd).wait() # add the certificate to apache's certificate dir try: os.unlink(join(settings.APACHE_CERTS_DIR, "test-ca.crt")) except OSError as e: if "Errno 2" in "%s" % e: pass else: raise os.symlink( os.path.abspath(join(settings.SSL_DIR, "ca.crt")), join(settings.APACHE_CERTS_DIR, "test-ca.crt") ) subprocess.call(shlex.split("make -C %s" % settings.APACHE_CERTS_DIR)) # run the CH kill_old_procs(settings.GCH_PORT, settings.GAM_PORT) cmd = "python %s -u %s -r %s -c %s -k %s -p %s --debug -H 0.0.0.0" % ( join(settings.GCF_DIR, "gch.py"), join(settings.SSL_DIR, "experimenter.crt"), join(settings.SSL_DIR, "certs"), join(settings.SSL_DIR, "ch.crt"), join(settings.SSL_DIR, "ch.key"), settings.GCH_PORT, ) self.ch_proc = run_cmd(cmd, pause=True) # # run the AM proxy # cmd = "python %s -r %s -c %s -k %s -p %s -u %s --debug -H 0.0.0.0" % ( # join(settings.GCF_DIR, "gam.py"), # join(settings.SSL_DIR, "certs"), # join(settings.SSL_DIR, "server.crt"), # join(settings.SSL_DIR, "server.key"), # settings.GAM_PORT, # SCHEME + "://%s:%s/openflow/gapi/" % (settings.HOST, settings.CH_PORT), # ) # self.am_proc = run_cmd(cmd, pause=True) ch_host = "%s:%s" % (settings.HOST, settings.GCH_PORT) cert_transport = SafeTransportWithCert( keyfile=join(settings.SSL_DIR, "experimenter.key"), certfile=join(settings.SSL_DIR, "experimenter.crt")) self.ch_client = xmlrpclib.ServerProxy( "https://"+ch_host+"/", transport=cert_transport) am_host = "%s:%s" % (settings.HOST, settings.CH_PORT) cert_transport = SafeTransportWithCert( keyfile=join(settings.SSL_DIR, "experimenter.key"), certfile=join(settings.SSL_DIR, "experimenter.crt")) self.am_client = xmlrpclib.ServerProxy( "https://"+am_host+"/openflow/gapi/", transport=cert_transport) logger.debug("setup done")