コード例 #1
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def test_daemonized_all_integration_recovery(self):
        exp_desc, desc, app, node1, node2, iface1, iface2 = self.make_test_experiment(
        )

        desc.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
        inst_root_dir = os.path.join(self.root_dir, "instance")
        os.mkdir(inst_root_dir)
        desc.set_attribute_value(DC.ROOT_DIRECTORY, inst_root_dir)

        xml = exp_desc.to_xml()

        access_config = proxy.AccessConfiguration()
        access_config.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
        access_config.set_attribute_value(DC.ROOT_DIRECTORY, self.root_dir)
        access_config.set_attribute_value(
            DC.DEPLOYMENT_ENVIRONMENT_SETUP,
            "export PYTHONPATH=%r:%r:$PYTHONPATH "
            "export NEPI_TESTBEDS='mock:mock mock2:mock2' " % (
                os.path.dirname(os.path.dirname(mock.__file__)),
                os.path.dirname(os.path.dirname(mock2.__file__)),
            ))
        controller = proxy.create_experiment_controller(xml, access_config)

        controller.start()
        while not controller.is_finished(app.guid):
            time.sleep(0.5)
        fake_result = controller.trace(app.guid, "fake")
        comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
"""
        self.assertTrue(fake_result.startswith(comp_result))

        self.assertEquals(controller.get_testbed_id(node1.guid), "mock")
        self.assertEquals(controller.get_testbed_version(node1.guid), "0.1")
        self.assertEquals(controller.get_factory_id(node1.guid), "Node")

        # controller dies
        del controller

        # recover
        access_config.set_attribute_value(DC.RECOVER, True)
        controller = proxy.create_experiment_controller(xml, access_config)

        # test recovery
        self.assertTrue(controller.is_finished(app.guid))
        fake_result = controller.trace(app.guid, "fake")
        self.assertTrue(fake_result.startswith(comp_result))

        controller.stop()
        controller.shutdown()
コード例 #2
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def test_daemonized_all_integration_recovery(self):
        exp_desc, desc, app, node1, node2, iface1, iface2 = self.make_test_experiment()
        
        desc.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
        inst_root_dir = os.path.join(self.root_dir, "instance")
        os.mkdir(inst_root_dir)
        desc.set_attribute_value(DC.ROOT_DIRECTORY, inst_root_dir)
        
        xml = exp_desc.to_xml()
        
        access_config = proxy.AccessConfiguration()
        access_config.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
        access_config.set_attribute_value(DC.ROOT_DIRECTORY, self.root_dir)
        access_config.set_attribute_value(DC.DEPLOYMENT_ENVIRONMENT_SETUP, 
            "export PYTHONPATH=%r:%r:$PYTHONPATH "
            "export NEPI_TESTBEDS='mock:mock mock2:mock2' " % (
                os.path.dirname(os.path.dirname(mock.__file__)),
                os.path.dirname(os.path.dirname(mock2.__file__)),))
        controller = proxy.create_experiment_controller(xml, access_config)

        controller.start()
        while not controller.is_finished(app.guid):
            time.sleep(0.5)
        fake_result = controller.trace(app.guid, "fake")
        comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
"""
        self.assertTrue(fake_result.startswith(comp_result))

        self.assertEquals(controller.get_testbed_id(node1.guid), "mock")
        self.assertEquals(controller.get_testbed_version(node1.guid), "0.1")
        self.assertEquals(controller.get_factory_id(node1.guid), "Node")

        # controller dies
        del controller
        
        # recover
        access_config.set_attribute_value(DC.RECOVER,True)
        controller = proxy.create_experiment_controller(xml, access_config)
        
        # test recovery
        self.assertTrue(controller.is_finished(app.guid))
        fake_result = controller.trace(app.guid, "fake")
        self.assertTrue(fake_result.startswith(comp_result))
        
        controller.stop()
        controller.shutdown()
コード例 #3
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def test_reference_expressions(self):
        exp_desc, desc, app, node1, node2, iface1, iface2 = self.make_test_experiment()
        
        iface1.set_attribute_value("label", "some")
        addr = iface1.add_address()
        addr.set_attribute_value("Address", "10.0.0.2")
        iface2.set_attribute_value("test", "{#[some].addr[0].[Address]#}")
        
        xml = exp_desc.to_xml()
        access_config = None
        controller = proxy.create_experiment_controller(xml, access_config)
        controller.start()
        while not controller.is_finished(app.guid):
            time.sleep(0.5)
        fake_result = controller.trace(app.guid, "fake")
        comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
"""
        
        self.assertTrue(fake_result.startswith(comp_result))
        
        self.assertEqual(
            controller._testbeds[desc.guid].get(iface2.guid, "test"),
            addr.get_attribute_value("Address") )
        
        controller.stop()
        controller.shutdown()
コード例 #4
0
ファイル: execute.py プロジェクト: nfvproject/nepi
 def _run_one_experiment(self):
     from nepi.util import proxy
     access_config = proxy.AccessConfiguration()
     for attr in self._access_config.attributes:
         if attr.value:
             access_config.set_attribute_value(attr.name, attr.value)
     access_config.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
     root_dir = "%s_%d" % (
             access_config.get_attribute_value(DC.ROOT_DIRECTORY), 
             self._current)
     access_config.set_attribute_value(DC.ROOT_DIRECTORY, root_dir)
     controller = proxy.create_experiment_controller(self._experiment_xml,
             access_config)
     self._access_configs[self._current] = access_config
     self._controllers[self._current] = controller
     controller.start()
     started_at = time.time()
     # wait until all specified guids have finished execution
     if self._wait_guids:
         while all(itertools.imap(controller.is_finished, self._wait_guids)):
             time.sleep(0.5)
     # wait until the minimum experiment duration time has elapsed 
     if self._duration:
         while (time.time() - started_at) < self._duration:
             time.sleep(0.5)
     controller.stop()
コード例 #5
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def test_testbed_reference_expressions(self):
        exp_desc, desc, app, node1, node2, iface1, iface2 = self.make_test_experiment()
        
        iface1.set_attribute_value("label", "some")
        addr = iface1.add_address()
        addr.set_attribute_value("Address", "10.0.0.2")

        desc2 = exp_desc.add_testbed_description(
            FactoriesProvider("mock2") )
        desc2.set_attribute_value(DC.DEPLOYMENT_HOST, "{#[some].addr[0].[Address]#}")
        # DC.DEPLOYMENT_HOST should be ignored if DC.DEPLOYMENT_CONNECTION is not set
        # But it should be resolved anyway
        
        xml = exp_desc.to_xml()
        access_config = None
        controller = proxy.create_experiment_controller(xml, access_config)
        controller.start()
        while not controller.is_finished(app.guid):
            time.sleep(0.5)
        fake_result = controller.trace(app.guid, "fake")
        comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
"""
        self.assertTrue(fake_result.startswith(comp_result))

        self.assertEqual(
            controller._deployment_config[desc2.guid]
                .get_attribute_value(DC.DEPLOYMENT_HOST),
            addr.get_attribute_value("Address") )
        
        controller.stop()
        controller.shutdown()
コード例 #6
0
ファイル: execute.py プロジェクト: nfvproject/nepi
 def _run_one_experiment(self):
     from nepi.util import proxy
     access_config = proxy.AccessConfiguration()
     for attr in self._access_config.attributes:
         if attr.value:
             access_config.set_attribute_value(attr.name, attr.value)
     access_config.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
     root_dir = "%s_%d" % (access_config.get_attribute_value(
         DC.ROOT_DIRECTORY), self._current)
     access_config.set_attribute_value(DC.ROOT_DIRECTORY, root_dir)
     controller = proxy.create_experiment_controller(
         self._experiment_xml, access_config)
     self._access_configs[self._current] = access_config
     self._controllers[self._current] = controller
     controller.start()
     started_at = time.time()
     # wait until all specified guids have finished execution
     if self._wait_guids:
         while all(itertools.imap(controller.is_finished,
                                  self._wait_guids)):
             time.sleep(0.5)
     # wait until the minimum experiment duration time has elapsed
     if self._duration:
         while (time.time() - started_at) < self._duration:
             time.sleep(0.5)
     controller.stop()
コード例 #7
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def test_single_process_integration(self):
        exp_desc, desc, app, node1, node2, iface1, iface2 = self.make_test_experiment()
        xml = exp_desc.to_xml()
        access_config = None
        controller = proxy.create_experiment_controller(xml, access_config)

        controller.start()
        started_time = controller.started_time
        self.assertTrue(started_time < time.time())
        while not controller.is_finished(app.guid):
            time.sleep(0.5)
        fake_result = controller.trace(app.guid, "fake")
        comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
"""
        self.assertTrue(fake_result.startswith(comp_result))

        self.assertEquals(controller.get_testbed_id(node1.guid), "mock")
        self.assertEquals(controller.get_testbed_version(node1.guid), "0.1")
        self.assertEquals(controller.get_factory_id(node1.guid), "Node")

        controller.stop()
        stopped_time = controller.stopped_time
        self.assertTrue(stopped_time < time.time())
        controller.shutdown()
コード例 #8
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def test_single_process_integration(self):
        exp_desc, desc, app, node1, node2, iface1, iface2 = self.make_test_experiment(
        )
        xml = exp_desc.to_xml()
        access_config = None
        controller = proxy.create_experiment_controller(xml, access_config)

        controller.start()
        started_time = controller.started_time
        self.assertTrue(started_time < time.time())
        while not controller.is_finished(app.guid):
            time.sleep(0.5)
        fake_result = controller.trace(app.guid, "fake")
        comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
"""
        self.assertTrue(fake_result.startswith(comp_result))

        self.assertEquals(controller.get_testbed_id(node1.guid), "mock")
        self.assertEquals(controller.get_testbed_version(node1.guid), "0.1")
        self.assertEquals(controller.get_factory_id(node1.guid), "Node")

        controller.stop()
        stopped_time = controller.stopped_time
        self.assertTrue(stopped_time < time.time())
        controller.shutdown()
コード例 #9
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def test_testbed_reference_expressions(self):
        exp_desc, desc, app, node1, node2, iface1, iface2 = self.make_test_experiment(
        )

        iface1.set_attribute_value("label", "some")
        addr = iface1.add_address()
        addr.set_attribute_value("Address", "10.0.0.2")

        desc2 = exp_desc.add_testbed_description(FactoriesProvider("mock2"))
        desc2.set_attribute_value(DC.DEPLOYMENT_HOST,
                                  "{#[some].addr[0].[Address]#}")
        # DC.DEPLOYMENT_HOST should be ignored if DC.DEPLOYMENT_CONNECTION is not set
        # But it should be resolved anyway

        xml = exp_desc.to_xml()
        access_config = None
        controller = proxy.create_experiment_controller(xml, access_config)
        controller.start()
        while not controller.is_finished(app.guid):
            time.sleep(0.5)
        fake_result = controller.trace(app.guid, "fake")
        comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
"""
        self.assertTrue(fake_result.startswith(comp_result))

        self.assertEqual(
            controller._deployment_config[desc2.guid].get_attribute_value(
                DC.DEPLOYMENT_HOST), addr.get_attribute_value("Address"))

        controller.stop()
        controller.shutdown()
コード例 #10
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def test_reference_expressions(self):
        exp_desc, desc, app, node1, node2, iface1, iface2 = self.make_test_experiment(
        )

        iface1.set_attribute_value("label", "some")
        addr = iface1.add_address()
        addr.set_attribute_value("Address", "10.0.0.2")
        iface2.set_attribute_value("test", "{#[some].addr[0].[Address]#}")

        xml = exp_desc.to_xml()
        access_config = None
        controller = proxy.create_experiment_controller(xml, access_config)
        controller.start()
        while not controller.is_finished(app.guid):
            time.sleep(0.5)
        fake_result = controller.trace(app.guid, "fake")
        comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
"""

        self.assertTrue(fake_result.startswith(comp_result))

        self.assertEqual(
            controller._testbeds[desc.guid].get(iface2.guid, "test"),
            addr.get_attribute_value("Address"))

        controller.stop()
        controller.shutdown()
コード例 #11
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def _test_switched(self, controller_access_config = None,
            testbed_access_config = None):
        testbed_id = "netns"
        exp_desc = ExperimentDescription()
        user = getpass.getuser()
        netns_provider = FactoriesProvider(testbed_id)
        
        netns_desc = exp_desc.add_testbed_description(netns_provider)
        netns_desc.set_attribute_value("homeDirectory", self.root_dir)
        #netns_desc.set_attribute_value("enableDebug", True)
        node1 = netns_desc.create("Node")
        node2 = netns_desc.create("Node")
        iface1 = netns_desc.create("NodeInterface")
        iface1.set_attribute_value("up", True)
        node1.connector("devs").connect(iface1.connector("node"))
        ip1 = iface1.add_address()
        ip1.set_attribute_value("Address", "10.0.0.1")
        iface2 = netns_desc.create("NodeInterface")
        iface2.set_attribute_value("up", True)
        node2.connector("devs").connect(iface2.connector("node"))
        ip2 = iface2.add_address()
        ip2.set_attribute_value("Address", "10.0.0.2")
        switch = netns_desc.create("Switch")
        switch.set_attribute_value("up", True)
        iface1.connector("switch").connect(switch.connector("devs"))
        iface2.connector("switch").connect(switch.connector("devs"))
        app = netns_desc.create("Application")
        app.set_attribute_value("command", "ping -qc1 10.0.0.2")
        app.set_attribute_value("user", user)
        app.connector("node").connect(node1.connector("apps"))
        app.enable_trace("stdout")

        if testbed_access_config:
            for attr in testbed_access_config.attributes:
                if attr.value:
                    netns_desc.set_attribute_value(attr.name, attr.value)

        xml = exp_desc.to_xml()

        controller = proxy.create_experiment_controller(xml, 
                controller_access_config)
        
        try:
            controller.start()
            while not controller.is_finished(app.guid):
                time.sleep(0.5)
            ping_result = controller.trace(app.guid, "stdout")
            comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
"""
            self.assertTrue(ping_result.startswith(comp_result))
        finally:
            controller.stop()
            controller.shutdown()
コード例 #12
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def test_single_process_cross_integration(self):
        exp_desc, desc1, desc2, iface12, iface21 = \
                self.make_cross_test_experiment()
        xml = exp_desc.to_xml()
        access_config = None
        controller = proxy.create_experiment_controller(xml, access_config)

        controller.start()
        cross1 = controller.get(iface12.guid, "cross")
        cross2 = controller.get(iface21.guid, "cross")
        self.assertTrue(cross1 == cross2 == True)
        controller.stop()
        controller.shutdown()
コード例 #13
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def test_single_process_cross_integration(self):
        exp_desc, desc1, desc2, iface12, iface21 = \
                self.make_cross_test_experiment()
        xml = exp_desc.to_xml()
        access_config = None
        controller = proxy.create_experiment_controller(xml, access_config)

        controller.start()
        cross1 = controller.get(iface12.guid, "cross")
        cross2 = controller.get(iface21.guid, "cross")
        self.assertTrue(cross1 == cross2 == True)
        controller.stop()
        controller.shutdown()
コード例 #14
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def ptest_experiment_suite(self):
        exp_desc, desc, app, node1, node2, iface1, iface2 = self.make_test_experiment(
        )

        xml = exp_desc.to_xml()

        access_config = proxy.AccessConfiguration()
        access_config.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)
        access_config.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
        access_config.set_attribute_value(DC.ROOT_DIRECTORY, self.root_dir)
        access_config.set_attribute_value(
            DC.DEPLOYMENT_ENVIRONMENT_SETUP,
            "export PYTHONPATH=%r:%r:$PYTHONPATH "
            "export NEPI_TESTBEDS='mock:mock mock2:mock2' " % (
                os.path.dirname(os.path.dirname(mock.__file__)),
                os.path.dirname(os.path.dirname(mock2.__file__)),
            ))

        print self.root_dir
        exp_suite = proxy.create_experiment_suite(xml,
                                                  access_config,
                                                  repetitions=4)
        exp_suite.start()
        while not exp_suite.is_finished():
            time.sleep(0.5)

        for access_config in exp_suite.get_access_configurations():
            access_config.set_attribute_value(DC.RECOVER, True)
            controller = proxy.create_experiment_controller(
                None, access_config)

            fake_result = controller.trace(app.guid, "fake")
            comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
"""
            self.assertTrue(fake_result.startswith(comp_result))

            self.assertEquals(controller.get_testbed_id(node1.guid), "mock")
            self.assertEquals(controller.get_testbed_version(node1.guid),
                              "0.1")
            self.assertEquals(controller.get_factory_id(node1.guid), "Node")

        exp_suite.shutdown()
コード例 #15
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def test_ssh_daemonized_integration(self):
        exp_desc, desc, app, node1, node2, iface1, iface2 = self.make_test_experiment(
        )
        env = test_util.test_environment()

        desc.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
        inst_root_dir = os.path.join(self.root_dir, "instance")
        os.mkdir(inst_root_dir)
        desc.set_attribute_value(DC.ROOT_DIRECTORY, inst_root_dir)
        xml = exp_desc.to_xml()

        access_config = proxy.AccessConfiguration()
        access_config.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
        access_config.set_attribute_value(DC.ROOT_DIRECTORY, self.root_dir)
        access_config.set_attribute_value(DC.DEPLOYMENT_COMMUNICATION,
                                          DC.ACCESS_SSH)
        access_config.set_attribute_value(DC.DEPLOYMENT_PORT, env.port)
        access_config.set_attribute_value(DC.USE_AGENT, True)
        access_config.set_attribute_value(
            DC.DEPLOYMENT_ENVIRONMENT_SETUP,
            "export PYTHONPATH=%r:%r:$PYTHONPATH "
            "export NEPI_TESTBEDS='mock:mock mock2:mock2' " % (
                os.path.dirname(os.path.dirname(mock.__file__)),
                os.path.dirname(os.path.dirname(mock2.__file__)),
            ))
        controller = proxy.create_experiment_controller(xml, access_config)

        try:
            controller.start()
            while not controller.is_finished(app.guid):
                time.sleep(0.5)
            fake_result = controller.trace(app.guid, "fake")
            comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
"""
            self.assertTrue(fake_result.startswith(comp_result))
        finally:
            controller.stop()
            controller.shutdown()
コード例 #16
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def ptest_experiment_suite(self):
        exp_desc, desc, app, node1, node2, iface1, iface2 = self.make_test_experiment()
       
        xml = exp_desc.to_xml()

        access_config = proxy.AccessConfiguration()
        access_config.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)
        access_config.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
        access_config.set_attribute_value(DC.ROOT_DIRECTORY, self.root_dir)
        access_config.set_attribute_value(DC.DEPLOYMENT_ENVIRONMENT_SETUP, 
            "export PYTHONPATH=%r:%r:$PYTHONPATH "
            "export NEPI_TESTBEDS='mock:mock mock2:mock2' " % (
                os.path.dirname(os.path.dirname(mock.__file__)),
                os.path.dirname(os.path.dirname(mock2.__file__)),))
      
        print self.root_dir
        exp_suite = proxy.create_experiment_suite(xml, access_config, repetitions = 4)
        exp_suite.start()
        while not exp_suite.is_finished():
            time.sleep(0.5)

        for access_config in exp_suite.get_access_configurations():
            access_config.set_attribute_value(DC.RECOVER, True)
            controller = proxy.create_experiment_controller(None, access_config)

            fake_result = controller.trace(app.guid, "fake")
            comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
"""
            self.assertTrue(fake_result.startswith(comp_result))

            self.assertEquals(controller.get_testbed_id(node1.guid), "mock")
            self.assertEquals(controller.get_testbed_version(node1.guid), "0.1")
            self.assertEquals(controller.get_factory_id(node1.guid), "Node")

        exp_suite.shutdown()
コード例 #17
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def test_ssh_daemonized_integration(self):
        exp_desc, desc, app, node1, node2, iface1, iface2 = self.make_test_experiment()
        env = test_util.test_environment()
        
        desc.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
        inst_root_dir = os.path.join(self.root_dir, "instance")
        os.mkdir(inst_root_dir)
        desc.set_attribute_value(DC.ROOT_DIRECTORY, inst_root_dir)
        xml = exp_desc.to_xml()
        
        access_config = proxy.AccessConfiguration()
        access_config.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
        access_config.set_attribute_value(DC.ROOT_DIRECTORY, self.root_dir)
        access_config.set_attribute_value(DC.DEPLOYMENT_COMMUNICATION, DC.ACCESS_SSH)
        access_config.set_attribute_value(DC.DEPLOYMENT_PORT, env.port)
        access_config.set_attribute_value(DC.USE_AGENT, True)
        access_config.set_attribute_value(DC.DEPLOYMENT_ENVIRONMENT_SETUP, 
            "export PYTHONPATH=%r:%r:$PYTHONPATH "
            "export NEPI_TESTBEDS='mock:mock mock2:mock2' " % (
                os.path.dirname(os.path.dirname(mock.__file__)),
                os.path.dirname(os.path.dirname(mock2.__file__)),))
        controller = proxy.create_experiment_controller(xml, access_config)

        try:
            controller.start()
            while not controller.is_finished(app.guid):
                time.sleep(0.5)
            fake_result = controller.trace(app.guid, "fake")
            comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
"""
            self.assertTrue(fake_result.startswith(comp_result))
        finally:
            controller.stop()
            controller.shutdown()
コード例 #18
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def _test_recover(self, daemonize_testbed, controller_access_configuration, environ=None, use_sfa=False):
        pl, exp = self.make_experiment_desc(use_sfa)

        pl.set_attribute_value(DC.RECOVERY_POLICY, DC.POLICY_RECOVER)

        node1 = pl.create("Node")
        node2 = pl.create("Node")
        node1.set_attribute_value("hostname", self.host1)
        node2.set_attribute_value("hostname", self.host2)

        iface1 = pl.create("NodeInterface")
        iface2 = pl.create("NodeInterface")
        inet = pl.create("Internet")
        node1.connector("devs").connect(iface1.connector("node"))
        node2.connector("devs").connect(iface2.connector("node"))
        iface1.connector("inet").connect(inet.connector("devs"))
        iface2.connector("inet").connect(inet.connector("devs"))

        tap1 = pl.create("TapInterface")
        tap2 = pl.create("TapInterface")
        node1.connector("devs").connect(tap1.connector("node"))
        node2.connector("devs").connect(tap2.connector("node"))
        tap1.connector("udp").connect(tap2.connector("udp"))

        tap1ip = tap1.add_address()
        tap1ip.set_attribute_value("Address", "192.168.2.2")
        tap1ip.set_attribute_value("NetPrefix", 24)
        tap1ip.set_attribute_value("Broadcast", False)

        tap2ip = tap2.add_address()
        tap2ip.set_attribute_value("Address", "192.168.2.3")
        tap2ip.set_attribute_value("NetPrefix", 24)
        tap2ip.set_attribute_value("Broadcast", False)

        app = pl.create("Application")
        app.set_attribute_value("command", "ping -qc10 192.168.2.3")
        app.enable_trace("stdout")
        app.connector("node").connect(node1.connector("apps"))

        if daemonize_testbed:
            pl.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
            inst_root_dir = os.path.join(self.root_dir, "instance")
            os.mkdir(inst_root_dir)
            pl.set_attribute_value(DC.ROOT_DIRECTORY, inst_root_dir)
            pl.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)

            if environ:
                pl.set_attribute_value(DC.DEPLOYMENT_ENVIRONMENT_SETUP, environ)

        xml = exp.to_xml()

        if controller_access_configuration:
            controller = proxy.create_experiment_controller(xml, controller_access_configuration)
        else:
            controller = ExperimentController(xml, self.root_dir)

        try:
            controller.start()

            # purposedly break connection
            controller = None

            # recover
            if controller_access_configuration:
                controller_access_configuration.set_attribute_value(DC.RECOVER, True)
                controller = proxy.create_experiment_controller(None, controller_access_configuration)
            else:
                controller = ExperimentController(None, self.root_dir)
                controller.recover()

            while not controller.is_finished(app.guid):
                time.sleep(0.5)
            ping_result = controller.trace(app.guid, "stdout")
            comp_result = r"""PING .* \(.*\) \d*\(\d*\) bytes of data.

--- .* ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time \d*ms.*
"""
            self.assertTrue(re.match(comp_result, ping_result, re.MULTILINE), "Unexpected trace:\n" + ping_result)

        finally:
            if controller is not None:
                try:
                    controller.stop()
                except:
                    import traceback

                    traceback.print_exc()
                try:
                    controller.shutdown()
                except:
                    import traceback

                    traceback.print_exc()
コード例 #19
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def _test_if(self, daemonize_testbed, controller_access_configuration):
        exp_desc = ExperimentDescription()
        testbed_id = "ns3"
        ns3_provider = FactoriesProvider(testbed_id)
        ns3_desc = exp_desc.add_testbed_description(ns3_provider)
        ns3_desc.set_attribute_value("homeDirectory", self.root_dir)

        node1 = ns3_desc.create("ns3::Node")
        ipv41 = ns3_desc.create("ns3::Ipv4L3Protocol")
        arp1  = ns3_desc.create("ns3::ArpL3Protocol")
        icmp1 = ns3_desc.create("ns3::Icmpv4L4Protocol")
        node1.connector("protos").connect(ipv41.connector("node"))
        node1.connector("protos").connect(arp1.connector("node"))
        node1.connector("protos").connect(icmp1.connector("node"))
        iface1 = ns3_desc.create("ns3::PointToPointNetDevice")
        queue1 = ns3_desc.create("ns3::DropTailQueue")
        node1.connector("devs").connect(iface1.connector("node"))
        iface1.connector("queue").connect(queue1.connector("dev"))
        trace1 = iface1.enable_trace("P2PAsciiTrace")
        ip1 = iface1.add_address()
        ip1.set_attribute_value("Address", "10.0.0.1")

        node2 = ns3_desc.create("ns3::Node")
        ipv42 = ns3_desc.create("ns3::Ipv4L3Protocol")
        arp2  = ns3_desc.create("ns3::ArpL3Protocol")
        icmp2 = ns3_desc.create("ns3::Icmpv4L4Protocol")
        node2.connector("protos").connect(ipv42.connector("node"))
        node2.connector("protos").connect(arp2.connector("node"))
        node2.connector("protos").connect(icmp2.connector("node"))
        iface2 = ns3_desc.create("ns3::PointToPointNetDevice")
        queue2 = ns3_desc.create("ns3::DropTailQueue")
        node2.connector("devs").connect(iface2.connector("node"))
        iface2.connector("queue").connect(queue2.connector("dev"))
        trace2 = iface2.enable_trace("P2PAsciiTrace")
        ip2 = iface2.add_address()
        ip2.set_attribute_value("Address", "10.0.0.2")

        chan = ns3_desc.create("ns3::PointToPointChannel")
        iface1.connector("chan").connect(chan.connector("dev2"))
        iface2.connector("chan").connect(chan.connector("dev2"))

        app = ns3_desc.create("ns3::V4Ping")
        app.set_attribute_value("Remote", "10.0.0.2")
        app.set_attribute_value("StartTime", "0s")
        app.set_attribute_value("StopTime", "20s")
        app.connector("node").connect(node1.connector("apps"))

        if daemonize_testbed:
            ns3_desc.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
            inst_root_dir = os.path.join(self.root_dir, "instance")
            os.mkdir(inst_root_dir)
            ns3_desc.set_attribute_value(DC.ROOT_DIRECTORY, inst_root_dir)
            #ns3_desc.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)

        xml = exp_desc.to_xml()
        
        if controller_access_configuration:
            controller = ExperimentController(xml, self.root_dir)
        else:
            controller = proxy.create_experiment_controller(xml, 
                controller_access_configuration)
        
        try:
            controller.start()
            while not controller.is_finished(app.guid):
                time.sleep(0.5)
            ping_result = controller.trace(iface2.guid, "P2PAsciiTrace")

            comp_result = "- 19.021 /NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Dequeue ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0 DSCP Default ECN Not-ECT ttl 64 id 19 protocol 1 offset (bytes) 0 flags [none] length: 84 10.0.0.2 > 10.0.0.1) ns3::Icmpv4Header (type=0, code=0) ns3::Icmpv4Echo (identifier=0, sequence=19)"
            
            if ping_result.find(comp_result) == -1:
                self.fail("Unexpected trace: %s" % (ping_result,))
        finally:
            controller.stop()
            controller.shutdown()
コード例 #20
0
    def _test_simple(self,
                     daemonize_testbed,
                     controller_access_configuration,
                     environ=None,
                     use_sfa=False):
        pl, exp = self.make_experiment_desc(use_sfa)

        node1 = pl.create("Node")
        node2 = pl.create("Node")
        node1.set_attribute_value("hostname", self.host1)
        node2.set_attribute_value("hostname", self.host2)
        iface1 = pl.create("NodeInterface")
        iface2 = pl.create("NodeInterface")
        iface2.set_attribute_value("label", "node2iface")
        inet = pl.create("Internet")
        node1.connector("devs").connect(iface1.connector("node"))
        node2.connector("devs").connect(iface2.connector("node"))
        iface1.connector("inet").connect(inet.connector("devs"))
        iface2.connector("inet").connect(inet.connector("devs"))
        app = pl.create("Application")
        app.set_attribute_value(
            "command", "ping -qc1 {#[node2iface].addr[0].[Address]#}")
        app.enable_trace("stdout")
        app.connector("node").connect(node1.connector("apps"))

        if daemonize_testbed:
            pl.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
            inst_root_dir = os.path.join(self.root_dir, "instance")
            os.mkdir(inst_root_dir)
            pl.set_attribute_value(DC.ROOT_DIRECTORY, inst_root_dir)
            pl.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)

            if environ:
                pl.set_attribute_value(DC.DEPLOYMENT_ENVIRONMENT_SETUP,
                                       environ)

        xml = exp.to_xml()

        if controller_access_configuration:
            controller = proxy.create_experiment_controller(
                xml, controller_access_configuration)
        else:
            controller = ExperimentController(xml, self.root_dir)

        try:
            controller.start()
            while not controller.is_finished(app.guid):
                time.sleep(0.5)
            ping_result = controller.trace(app.guid, "stdout")
            comp_result = r"""PING .* \(.*\) \d*\(\d*\) bytes of data.

--- .* ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time \d*ms.*
"""
            self.assertTrue(re.match(comp_result, ping_result, re.MULTILINE),
                            "Unexpected trace:\n" + ping_result)

        finally:
            try:
                controller.stop()
            except:
                import traceback
                traceback.print_exc()
            try:
                controller.shutdown()
            except:
                import traceback
                traceback.print_exc()
コード例 #21
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def _test_fd_net_device(self, daemonize_testbed,
            controller_access_configuration):
        testbed_id = "ns3"
        exp_desc = ExperimentDescription()
        ns3_provider = FactoriesProvider(testbed_id)
        ns3_desc1 = exp_desc.add_testbed_description(ns3_provider)
        root_dir1 = os.path.join(self.root_dir, "1")
        ns3_desc1.set_attribute_value("homeDirectory", root_dir1)
        ns3_desc1.set_attribute_value("SimulatorImplementationType",
                "ns3::RealtimeSimulatorImpl")
        ns3_desc1.set_attribute_value("ChecksumEnabled", True)
        ns3_desc2 = exp_desc.add_testbed_description(ns3_provider)
        root_dir2 = os.path.join(self.root_dir, "2")
        ns3_desc2.set_attribute_value("homeDirectory", root_dir2)
        ns3_desc2.set_attribute_value("SimulatorImplementationType",
                "ns3::RealtimeSimulatorImpl")
        ns3_desc2.set_attribute_value("ChecksumEnabled", True)

        node1 = ns3_desc1.create("ns3::Node")
        ipv41 = ns3_desc1.create("ns3::Ipv4L3Protocol")
        arp1  = ns3_desc1.create("ns3::ArpL3Protocol")
        icmp1 = ns3_desc1.create("ns3::Icmpv4L4Protocol")
        node1.connector("protos").connect(ipv41.connector("node"))
        node1.connector("protos").connect(arp1.connector("node"))
        node1.connector("protos").connect(icmp1.connector("node"))
        iface1 = ns3_desc1.create("ns3::FdNetDevice")
        node1.connector("devs").connect(iface1.connector("node"))
        ip1 = iface1.add_address()
        ip1.set_attribute_value("Address", "10.0.0.1")
        tc1 = ns3_desc1.create("ns3::Nepi::TunChannel")
        tc1.connector("fd->").connect(iface1.connector("->fd"))

        node2 = ns3_desc2.create("ns3::Node")
        ipv42 = ns3_desc2.create("ns3::Ipv4L3Protocol")
        arp2  = ns3_desc2.create("ns3::ArpL3Protocol")
        icmp2 = ns3_desc2.create("ns3::Icmpv4L4Protocol")
        node2.connector("protos").connect(ipv42.connector("node"))
        node2.connector("protos").connect(arp2.connector("node"))
        node2.connector("protos").connect(icmp2.connector("node"))
        iface2 = ns3_desc2.create("ns3::FdNetDevice")
        iface2.enable_trace("FdAsciiTrace")
        node2.connector("devs").connect(iface2.connector("node"))
        ip2 = iface2.add_address()
        ip2.set_attribute_value("Address", "10.0.0.2")
        tc2 = ns3_desc2.create("ns3::Nepi::TunChannel")
        tc2.connector("fd->").connect(iface2.connector("->fd"))

        tc2.connector("udp").connect(tc1.connector("udp"))

        app = ns3_desc1.create("ns3::V4Ping")
        app.set_attribute_value("Remote", "10.0.0.2")
        app.set_attribute_value("StartTime", "0s")
        app.set_attribute_value("StopTime", "2s")
        app.connector("node").connect(node1.connector("apps"))

        if daemonize_testbed:
            ns3_desc1.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
            inst_root_dir = os.path.join(root_dir1, "instance")
            os.makedirs(inst_root_dir)
            ns3_desc1.set_attribute_value(DC.ROOT_DIRECTORY, inst_root_dir)
            #ns3_desc1.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)

            ns3_desc2.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
            inst_root_dir = os.path.join(root_dir2, "instance")
            os.makedirs(inst_root_dir)
            ns3_desc2.set_attribute_value(DC.ROOT_DIRECTORY, inst_root_dir)
            #ns3_desc2.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)

        xml = exp_desc.to_xml()
        
        if controller_access_configuration:
            controller = ExperimentController(xml, self.root_dir)
        else:
            controller = proxy.create_experiment_controller(xml, 
                controller_access_configuration)
        
        try:
            controller.start()
            while not controller.is_finished(app.guid):
                time.sleep(0.5)
            ping_result = controller.trace(iface2.guid, "FdAsciiTrace")
            ping_exp_result = r"""r [-+0-9.e]+ /NodeList/0/DeviceList/0/\$ns3::FdNetDevice/Rx Payload \(size=42\)
r [-+0-9.e]+ /NodeList/0/DeviceList/0/\$ns3::FdNetDevice/Rx Payload \(size=98\)
r [-+0-9.e]+ /NodeList/0/DeviceList/0/\$ns3::FdNetDevice/Rx Payload \(size=42\)
r [-+0-9.e]+ /NodeList/0/DeviceList/0/\$ns3::FdNetDevice/Rx Payload \(size=98\)
"""
            if not re.match(ping_exp_result, ping_result):
                self.fail("Unexpected trace: %s" % (ping_result,))

        finally:
            controller.stop()
            controller.shutdown()
コード例 #22
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    def _test_simple(self, daemonize_testbed, controller_access_configuration, environ=None, use_sfa=False):
        pl, exp = self.make_experiment_desc(use_sfa)

        node1 = pl.create("Node")
        node2 = pl.create("Node")
        node1.set_attribute_value("hostname", self.host1)
        node2.set_attribute_value("hostname", self.host2)
        iface1 = pl.create("NodeInterface")
        iface2 = pl.create("NodeInterface")
        iface2.set_attribute_value("label", "node2iface")
        inet = pl.create("Internet")
        node1.connector("devs").connect(iface1.connector("node"))
        node2.connector("devs").connect(iface2.connector("node"))
        iface1.connector("inet").connect(inet.connector("devs"))
        iface2.connector("inet").connect(inet.connector("devs"))
        app = pl.create("Application")
        app.set_attribute_value("command", "ping -qc1 {#[node2iface].addr[0].[Address]#}")
        app.enable_trace("stdout")
        app.connector("node").connect(node1.connector("apps"))

        if daemonize_testbed:
            pl.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
            inst_root_dir = os.path.join(self.root_dir, "instance")
            os.mkdir(inst_root_dir)
            pl.set_attribute_value(DC.ROOT_DIRECTORY, inst_root_dir)
            pl.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)

            if environ:
                pl.set_attribute_value(DC.DEPLOYMENT_ENVIRONMENT_SETUP, environ)

        xml = exp.to_xml()

        if controller_access_configuration:
            controller = proxy.create_experiment_controller(xml, controller_access_configuration)
        else:
            controller = ExperimentController(xml, self.root_dir)

        try:
            controller.start()
            while not controller.is_finished(app.guid):
                time.sleep(0.5)
            ping_result = controller.trace(app.guid, "stdout")
            comp_result = r"""PING .* \(.*\) \d*\(\d*\) bytes of data.

--- .* ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time \d*ms.*
"""
            self.assertTrue(re.match(comp_result, ping_result, re.MULTILINE), "Unexpected trace:\n" + ping_result)

        finally:
            try:
                controller.stop()
            except:
                import traceback

                traceback.print_exc()
            try:
                controller.shutdown()
            except:
                import traceback

                traceback.print_exc()
コード例 #23
0
    def _test_recover(self,
                      daemonize_testbed,
                      controller_access_configuration,
                      environ=None,
                      use_sfa=False):
        pl, exp = self.make_experiment_desc(use_sfa)

        pl.set_attribute_value(DC.RECOVERY_POLICY, DC.POLICY_RECOVER)

        node1 = pl.create("Node")
        node2 = pl.create("Node")
        node1.set_attribute_value("hostname", self.host1)
        node2.set_attribute_value("hostname", self.host2)

        iface1 = pl.create("NodeInterface")
        iface2 = pl.create("NodeInterface")
        inet = pl.create("Internet")
        node1.connector("devs").connect(iface1.connector("node"))
        node2.connector("devs").connect(iface2.connector("node"))
        iface1.connector("inet").connect(inet.connector("devs"))
        iface2.connector("inet").connect(inet.connector("devs"))

        tap1 = pl.create("TapInterface")
        tap2 = pl.create("TapInterface")
        node1.connector("devs").connect(tap1.connector("node"))
        node2.connector("devs").connect(tap2.connector("node"))
        tap1.connector("udp").connect(tap2.connector("udp"))

        tap1ip = tap1.add_address()
        tap1ip.set_attribute_value("Address", "192.168.2.2")
        tap1ip.set_attribute_value("NetPrefix", 24)
        tap1ip.set_attribute_value("Broadcast", False)

        tap2ip = tap2.add_address()
        tap2ip.set_attribute_value("Address", "192.168.2.3")
        tap2ip.set_attribute_value("NetPrefix", 24)
        tap2ip.set_attribute_value("Broadcast", False)

        app = pl.create("Application")
        app.set_attribute_value("command", "ping -qc10 192.168.2.3")
        app.enable_trace("stdout")
        app.connector("node").connect(node1.connector("apps"))

        if daemonize_testbed:
            pl.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
            inst_root_dir = os.path.join(self.root_dir, "instance")
            os.mkdir(inst_root_dir)
            pl.set_attribute_value(DC.ROOT_DIRECTORY, inst_root_dir)
            pl.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)

            if environ:
                pl.set_attribute_value(DC.DEPLOYMENT_ENVIRONMENT_SETUP,
                                       environ)

        xml = exp.to_xml()

        if controller_access_configuration:
            controller = proxy.create_experiment_controller(
                xml, controller_access_configuration)
        else:
            controller = ExperimentController(xml, self.root_dir)

        try:
            controller.start()

            # purposedly break connection
            controller = None

            # recover
            if controller_access_configuration:
                controller_access_configuration.set_attribute_value(
                    DC.RECOVER, True)
                controller = proxy.create_experiment_controller(
                    None, controller_access_configuration)
            else:
                controller = ExperimentController(None, self.root_dir)
                controller.recover()

            while not controller.is_finished(app.guid):
                time.sleep(0.5)
            ping_result = controller.trace(app.guid, "stdout")
            comp_result = r"""PING .* \(.*\) \d*\(\d*\) bytes of data.

--- .* ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time \d*ms.*
"""
            self.assertTrue(re.match(comp_result, ping_result, re.MULTILINE),
                            "Unexpected trace:\n" + ping_result)

        finally:
            if controller is not None:
                try:
                    controller.stop()
                except:
                    import traceback
                    traceback.print_exc()
                try:
                    controller.shutdown()
                except:
                    import traceback
                    traceback.print_exc()
コード例 #24
0
ip21.set_attribute_value("Address", "192.168.0.2")
ip21.set_attribute_value("NetPrefix", 30)

app1 = netns_desc.create("Application")
app1.set_attribute_value("command", "ping -qc 10 192.168.0.1")
app1.set_attribute_value("user", user)
app1.connector("node").connect(node1.connector("apps"))

app1.enable_trace("stdout")

xml = exp_desc.to_xml()

controller_access_config = proxy.AccessConfiguration()
controller_access_config.set_attribute_value(DC.DEPLOYMENT_MODE,
                                             DC.MODE_DAEMON)
controller_access_config.set_attribute_value(DC.ROOT_DIRECTORY, root_dir)
controller_access_config.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)

controller = proxy.create_experiment_controller(xml, controller_access_config)

controller.start()
while not controller.is_finished(app1.guid):
    time.sleep(0.5)

result = controller.trace(app1.guid, "stdout")

controller.stop()
controller.shutdown()

print result
コード例 #25
0
ip21.set_attribute_value("Address", "192.168.0.2")
ip21.set_attribute_value("NetPrefix", 30)

app1 = netns_desc.create("Application")
app1.set_attribute_value("command", "ping -qc 10 192.168.0.1")
app1.set_attribute_value("user", user)
app1.connector("node").connect(node1.connector("apps"))

app1.enable_trace("stdout")

xml = exp_desc.to_xml()

controller_access_config = proxy.AccessConfiguration()
controller_access_config.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
controller_access_config.set_attribute_value(DC.ROOT_DIRECTORY, root_dir)
controller_access_config.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)

controller = proxy.create_experiment_controller(xml, controller_access_config)

controller.start()
while not controller.is_finished(app1.guid):
    time.sleep(0.5)

result = controller.trace(app1.guid, "stdout")

controller.stop()
controller.shutdown()

print result