#!/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):
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)
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")
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)
# 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 ##
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")
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()
+