Beispiel #1
0
    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)
Beispiel #3
0
    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
Beispiel #4
0
    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)
Beispiel #5
0
    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")