ticket http://yans.pl.sophia.inria.fr/trac/nepi/ticket/46 : connecting to self
[nepi.git] / examples / vlc_wireless_netns_ns3.py
index 9a5ae4c..1ecea3f 100644 (file)
@@ -1,19 +1,30 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
-import getpass
 from nepi.core.design import ExperimentDescription, FactoriesProvider
 from nepi.core.execute import ExperimentController
+from optparse import OptionParser, SUPPRESS_HELP
 from nepi.util import proxy
 import os
 import shutil
 import tempfile
 import test_util
 import time
-import unittest
 
-class VlcWirelessNetnsNs3TestCase(unittest.TestCase):
-    def setUp(self):
+class VlcWirelessNetnsNs3Example(object):
+    def __init__(self):
+        usage = "usage: %prog -m movie -u user"
+        parser = OptionParser(usage=usage)
+        parser.add_option("-u", "--user", dest="user", help="Valid linux system user (not root).", type="str")
+        parser.add_option("-m", "--movie", dest="movie", help="Path to movie file to play", type="str")
+        (options, args) = parser.parse_args()
+        if not options.movie:
+            parser.error("Missing 'movie' option.")
+        if options.user == 'root':
+            parser.error("Missing or invalid 'user' option.")
+
+        self.user = options.user if options.user else os.getlogin()
+        self.movie =  options.movie
         self.root_dir = tempfile.mkdtemp()
 
     def add_netns_tap(self, node, netns_desc):
@@ -100,18 +111,15 @@ class VlcWirelessNetnsNs3TestCase(unittest.TestCase):
         route.set_attribute_value("NetPrefix", netprefix)
         route.set_attribute_value("NextHop", nexthop)
 
-    @test_util.skipUnless(os.getuid() == 0, "Test requires root privileges")
-    def test_local(self):
+    def run(self):
         bounds_width = bounds_height = 200
         x = y = 100
-        speed = 1
-        user = "alina"
-        movie = "/tmp/test.ts"
+        speed = 7
 
         exp_desc = ExperimentDescription()
 
         ## NS3 Testbed instance description ##
-        testbed_version = "3_9_RC3"
+        testbed_version = "3_9"
         testbed_id = "ns3"
         ns3_provider = FactoriesProvider(testbed_id, testbed_version)
         ns3_desc = exp_desc.add_testbed_description(ns3_provider)
@@ -127,7 +135,7 @@ class VlcWirelessNetnsNs3TestCase(unittest.TestCase):
         self.add_ip_address(fdnd1, "10.0.0.1")
         # create node 2
         node2 = self.add_ns3_node(ns3_desc)
-        mobility2 = self.add_ns3_random_mobility(node2, ns3_desc, 0, 0, 0, 
+        mobility2 = self.add_ns3_random_mobility(node2, ns3_desc, x, y, 0, 
                 speed, bounds_width, bounds_height)
         wifi2, phy2 = self.add_ns3_wifi(node2, ns3_desc, access_point = True)
         self.add_ip_address(wifi2, "10.0.1.2")
@@ -144,7 +152,7 @@ class VlcWirelessNetnsNs3TestCase(unittest.TestCase):
         netns_provider = FactoriesProvider(testbed_id, testbed_version)
         netns_desc1 = exp_desc.add_testbed_description(netns_provider)
         netns_desc1.set_attribute_value("homeDirectory", self.root_dir)
-        #netns_desc1.set_attribute_value("enableDebug", True
+        #netns_desc1.set_attribute_value("enableDebug", True)
         # create node 3
         node3 = netns_desc1.create("Node")
         node3.set_attribute_value("forward_X11", True)
@@ -153,17 +161,17 @@ class VlcWirelessNetnsNs3TestCase(unittest.TestCase):
         # create vlc server
         # DEBUG!! target = "{#[vlc_client].addr[0].[Address]#}"
         target = "10.0.2.2" 
-        command = "vlc -I dummy -vvv %s --sout '#rtp{dst=%s,port=5004,mux=ts}' vlc:quit" \
-                % (movie, target)
+        command = "vlc -I dummy %s --sout '#rtp{dst=%s,port=5004,mux=ts}' vlc://quit" \
+                % (self.movie, target)
         vlc_server = netns_desc1.create("Application")
         vlc_server.set_attribute_value("command", command)
-        vlc_server.set_attribute_value("user", user)
+        vlc_server.set_attribute_value("user", self.user)
         vlc_server.connector("node").connect(node3.connector("apps"))
 
         #command = "xterm"
         #xterm1 = netns_desc1.create("Application")
         #xterm1.set_attribute_value("command", command)
-        #xterm1.set_attribute_value("user", user)
+        #xterm1.set_attribute_value("user", self.user)
         #xterm1.connector("node").connect(node3.connector("apps"))
 
         ## NETNS testbed description 2 ##
@@ -180,21 +188,18 @@ class VlcWirelessNetnsNs3TestCase(unittest.TestCase):
         vlc_client = netns_desc2.create("Application")
         command = "vlc rtp://%s:5004/test.ts" % target
         vlc_client.set_attribute_value("command", command)
-        vlc_client.set_attribute_value("user", user)
+        vlc_client.set_attribute_value("user", self.user)
         vlc_client.connector("node").connect(node4.connector("apps"))
-        #vlc_trace = vlc_server.get_trace("StderrTrace")
-        #vlc_trace.get_attribute("Filename").value = "vlc_server.err"
-        #vlc_trace.enable()        
 
         #command = "xterm"
         #xterm2 = netns_desc2.create("Application")
         #xterm2.set_attribute_value("command", command)
-        #xterm2.set_attribute_value("user", user)
+        #xterm2.set_attribute_value("user", self.user)
         #xterm2.connector("node").connect(node4.connector("apps"))
 
         ## testbed_interconnection
-        fdnd1.connector("fd").connect(tap1.connector("fd"))
-        fdnd2.connector("fd").connect(tap2.connector("fd"))
+        fdnd1.connector("->fd").connect(tap1.connector("fd->"))
+        fdnd2.connector("->fd").connect(tap2.connector("fd->"))
       
         self.add_route(node4, "10.0.0.0", 24, "10.0.2.1")
         self.add_route(node4, "10.0.1.0", 24, "10.0.2.1")
@@ -204,17 +209,20 @@ class VlcWirelessNetnsNs3TestCase(unittest.TestCase):
         self.add_route(node2, "10.0.0.0", 24, "10.0.1.1")
         self.add_route(node1, "10.0.2.0", 24, "10.0.1.2")
 
-
         xml = exp_desc.to_xml()
         controller = ExperimentController(xml, self.root_dir)
         controller.start()
-        while not controller.is_finished(vlc_server.guid):
+        while not controller.is_finished(vlc_server.guid) and \
+                not controller.is_finished(vlc_client.guid):
             time.sleep(0.5)
         controller.stop()
         controller.shutdown()
 
-    def tearDown(self):
+    def clean(self):
         shutil.rmtree(self.root_dir)
 
 if __name__ == '__main__':
-    unittest.main()
+    example = VlcWirelessNetnsNs3Example()
+    example.run()
+    example.clean()
+