Removed version number from testbed file names. Only 1 version permitted at the time.
[nepi.git] / test / testbeds / ns3 / execute.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 class Ns3ExecuteTestCase(unittest.TestCase):
14     def setUp(self):
15         self.root_dir = tempfile.mkdtemp()
16
17     @test_util.skipUnless(test_util.ns3_usable(), 
18            "Test requires working ns-3 bindings")
19     def test_run_ping_if(self):
20         instance = ns3.TestbedController()
21         instance.defer_configure("homeDirectory", self.root_dir)
22         instance.defer_create(2, "ns3::Node")
23         instance.defer_create(3, "ns3::Ipv4L3Protocol")
24         instance.defer_create(4, "ns3::ArpL3Protocol")
25         instance.defer_create(5, "ns3::Icmpv4L4Protocol")
26         instance.defer_create(6, "ns3::UdpL4Protocol")
27         instance.defer_connect(2, "protos", 3, "node")
28         instance.defer_connect(2, "protos", 4, "node")
29         instance.defer_connect(2, "protos", 5, "node")
30         instance.defer_connect(2, "protos", 6, "node")
31         instance.defer_create(7, "ns3::PointToPointNetDevice")
32         instance.defer_create(8, "ns3::DropTailQueue")
33         instance.defer_connect(2, "devs", 7, "node")
34         instance.defer_connect(7, "queue", 8, "dev")
35         instance.defer_add_trace(7, "P2PAsciiTrace")
36         instance.defer_add_address(7, "10.0.0.1", 24, None)
37
38         instance.defer_create(9, "ns3::Node")
39         instance.defer_create(10, "ns3::Ipv4L3Protocol")
40         instance.defer_create(11, "ns3::ArpL3Protocol")
41         instance.defer_create(12, "ns3::Icmpv4L4Protocol")
42         instance.defer_create(13, "ns3::UdpL4Protocol")
43         instance.defer_connect(9, "protos", 10, "node")
44         instance.defer_connect(9, "protos", 11, "node")
45         instance.defer_connect(9, "protos", 12, "node")
46         instance.defer_connect(9, "protos", 13, "node")
47         instance.defer_create(14, "ns3::PointToPointNetDevice")
48         instance.defer_create(15, "ns3::DropTailQueue")
49         instance.defer_connect(9, "devs", 14, "node")
50         instance.defer_connect(14, "queue", 15, "dev")
51         instance.defer_add_trace(14, "P2PAsciiTrace")
52         instance.defer_add_address(14, "10.0.0.2", 24, None)
53
54         instance.defer_create(16, "ns3::PointToPointChannel")
55         instance.defer_connect(7, "chan", 16, "dev2")
56         instance.defer_connect(14, "chan", 16, "dev2")
57
58         instance.defer_create(17, "ns3::V4Ping")
59         instance.defer_create_set(17, "Remote", "10.0.0.2")
60         instance.defer_create_set(17, "StartTime", "0s")
61         instance.defer_create_set(17, "StopTime", "10s")
62         instance.defer_add_trace(17, "Rtt")
63         instance.defer_connect(17, "node", 2, "apps")
64
65         instance.do_setup()
66         instance.do_create()
67         instance.do_connect_init()
68         instance.do_connect_compl()
69         instance.do_preconfigure()
70         instance.do_configure()
71         instance.do_prestart()
72         instance.start()
73         while instance.status(17) != AS.STATUS_FINISHED:
74             time.sleep(0.1)
75         ping_result = instance.trace(14, "P2PAsciiTrace")
76         ping_rtt = instance.trace(17, "Rtt")
77         comp_result = "- 9.021 /NodeList/1/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.0.2 > 10.0.0.1) ns3::Icmpv4Header (type=0, code=0) ns3::Icmpv4Echo (identifier=0, sequence=9)"
78         comp_rtt_result = """41992186ns 41992186ns
79 1041992186ns    41992186ns
80 2041992186ns    41992186ns
81 3041992186ns    41992186ns
82 4041992186ns    41992186ns
83 5041992186ns    41992186ns
84 6041992186ns    41992186ns
85 7041992186ns    41992186ns
86 8041992186ns    41992186ns
87 9041992186ns    41992186ns"""
88         self.assertNotEqual(ping_result.find(comp_result), -1)
89         self.assertEqual(ping_rtt.strip(), comp_rtt_result, -1)
90         instance.stop()
91         instance.shutdown()
92
93     def tearDown(self):
94         try:
95             shutil.rmtree(self.root_dir)
96         except:
97             # retry
98             time.sleep(0.1)
99             shutil.rmtree(self.root_dir)
100
101 if __name__ == '__main__':
102     unittest.main()
103