fixed shebangs in non executable .py files
[nepi.git] / test / testbeds / ns3 / execute2.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 from nepi.util.constants import ApplicationStatus as AS
5 from nepi.testbeds import ns3
6 import os
7 import shutil
8 import tempfile
9 import test_util
10 import time
11 import unittest
12
13 # The reason execute tests are run in separate scripts for ns3, is that the 
14 # same ns3 Simulator will be loaded only once per process, resulting in a 
15 # dirty state of the Simulator after the first test is executed.
16 # As it is not possible to reset the state of the Simulator to the original
17 # one, different tests should be executed in different processes (different 
18 # unittest instance)
19 class Ns3ExecuteTestCase(unittest.TestCase):
20     def setUp(self):
21         self.root_dir = tempfile.mkdtemp()
22
23     @test_util.skipUnless(test_util.ns3_usable(),
24             "Test requires working ns-3 bindings")
25     def test_run_ping_routing(self):
26         instance = ns3.TestbedController()
27         instance.defer_configure("homeDirectory", self.root_dir)
28         instance.defer_create(2, "ns3::Node")
29         instance.defer_create(3, "ns3::Ipv4L3Protocol")
30         instance.defer_create(4, "ns3::ArpL3Protocol")
31         instance.defer_create(5, "ns3::Icmpv4L4Protocol")
32         instance.defer_create(6, "ns3::UdpL4Protocol")
33         instance.defer_connect(2, "protos", 3, "node")
34         instance.defer_connect(2, "protos", 4, "node")
35         instance.defer_connect(2, "protos", 5, "node")
36         instance.defer_connect(2, "protos", 6, "node")
37         instance.defer_create(7, "ns3::PointToPointNetDevice")
38         instance.defer_create(8, "ns3::DropTailQueue")
39         instance.defer_connect(2, "devs", 7, "node")
40         instance.defer_connect(7, "queue", 8, "dev")
41         instance.defer_add_trace(7, "P2PAsciiTrace")
42         instance.defer_add_address(7, "10.0.0.1", 24, None)
43
44         instance.defer_create(9, "ns3::Node")
45         instance.defer_create(10, "ns3::Ipv4L3Protocol")
46         instance.defer_create(11, "ns3::ArpL3Protocol")
47         instance.defer_create(12, "ns3::Icmpv4L4Protocol")
48         instance.defer_create(13, "ns3::UdpL4Protocol")
49         instance.defer_connect(9, "protos", 10, "node")
50         instance.defer_connect(9, "protos", 11, "node")
51         instance.defer_connect(9, "protos", 12, "node")
52         instance.defer_connect(9, "protos", 13, "node")
53         instance.defer_create(14, "ns3::PointToPointNetDevice")
54         instance.defer_create(15, "ns3::DropTailQueue")
55         instance.defer_connect(9, "devs", 14, "node")
56         instance.defer_connect(14, "queue", 15, "dev")
57         instance.defer_add_trace(14, "P2PAsciiTrace")
58         instance.defer_add_address(14, "10.0.0.2", 24, None)
59
60         instance.defer_create(16, "ns3::PointToPointChannel")
61         instance.defer_connect(7, "chan", 16, "dev2")
62         instance.defer_connect(14, "chan", 16, "dev2")
63
64         instance.defer_create(17, "ns3::PointToPointNetDevice")
65         instance.defer_create(18, "ns3::DropTailQueue")
66         instance.defer_connect(9, "devs", 17, "node")
67         instance.defer_connect(17, "queue", 18, "dev")
68         instance.defer_add_trace(17, "P2PAsciiTrace")
69         instance.defer_add_address(17, "10.0.1.1", 24, None)
70
71         instance.defer_create(19, "ns3::Node")
72         instance.defer_create(20, "ns3::Ipv4L3Protocol")
73         instance.defer_create(21, "ns3::ArpL3Protocol")
74         instance.defer_create(22, "ns3::Icmpv4L4Protocol")
75         instance.defer_create(23, "ns3::UdpL4Protocol")
76         instance.defer_connect(19, "protos", 20, "node")
77         instance.defer_connect(19, "protos", 21, "node")
78         instance.defer_connect(19, "protos", 22, "node")
79         instance.defer_connect(19, "protos", 23, "node")
80         instance.defer_create(24, "ns3::PointToPointNetDevice")
81         instance.defer_create(25, "ns3::DropTailQueue")
82         instance.defer_connect(19, "devs", 24, "node")
83         instance.defer_connect(24, "queue", 25, "dev")
84         instance.defer_add_trace(24, "P2PAsciiTrace")
85         instance.defer_add_address(24, "10.0.1.2", 24, None)
86
87         instance.defer_create(26, "ns3::PointToPointChannel")
88         instance.defer_connect(17, "chan", 26, "dev2")
89         instance.defer_connect(24, "chan", 26, "dev2")
90
91         instance.defer_create(27, "ns3::V4Ping")
92         instance.defer_create_set(27, "Remote", "10.0.1.2")
93         instance.defer_create_set(27, "StartTime", "0s")
94         instance.defer_create_set(27, "StopTime", "10s")
95         instance.defer_connect(27, "node", 2, "apps")
96
97         instance.defer_add_route(2, "10.0.1.0", 24, "10.0.0.2")
98         instance.defer_add_route(19, "10.0.0.0", 24, "10.0.1.1")
99
100         instance.do_setup()
101         instance.do_create()
102         instance.do_connect_init()
103         instance.do_connect_compl()
104         instance.do_preconfigure()
105         instance.do_configure()
106         instance.do_prestart()
107         instance.start()
108
109         while instance.status(27) != AS.STATUS_FINISHED:
110             time.sleep(0.1)
111         ping_result = instance.trace(24, "P2PAsciiTrace")
112         comp_result = "- 9.04199 /NodeList/2/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Dequeue ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0 ttl 64 id 9 protocol 1 offset 0 flags [none] length: 84 10.0.1.2 > 10.0.0.1) ns3::Icmpv4Header (type=0, code=0) ns3::Icmpv4Echo (identifier=0, sequence=9)"
113         self.assertNotEqual(ping_result.find(comp_result), -1)
114         instance.stop()
115         instance.shutdown()
116
117     def tearDown(self):
118         try:
119             shutil.rmtree(self.root_dir)
120         except:
121             # retry
122             time.sleep(0.1)
123             shutil.rmtree(self.root_dir)
124
125 if __name__ == '__main__':
126     unittest.main()
127