author | Gustavo J. A. M. Carneiro <gjc@inescporto.pt> |
Wed, 15 Oct 2008 15:55:09 +0100 | |
changeset 3753 | a84a48233eb3 |
parent 3731 | 317f9dbccc2b |
child 3768 | 4f07ee85f2a1 |
permissions | -rw-r--r-- |
3408 | 1 |
import unittest |
2 |
import ns3 |
|
3 |
||
4 |
class TestSimulator(unittest.TestCase): |
|
5 |
||
6 |
def testScheduleNow(self): |
|
7 |
def callback(args): |
|
8 |
self._args_received = args |
|
9 |
self._cb_time = ns3.Simulator.Now() |
|
10 |
ns3.Simulator.Destroy() |
|
11 |
self._args_received = None |
|
12 |
self._cb_time = None |
|
13 |
ns3.Simulator.ScheduleNow(callback, "args") |
|
14 |
ns3.Simulator.Run() |
|
15 |
self.assertEqual(self._args_received, "args") |
|
16 |
self.assertEqual(self._cb_time.GetSeconds(), 0.0) |
|
17 |
||
18 |
def testSchedule(self): |
|
19 |
def callback(args): |
|
20 |
self._args_received = args |
|
21 |
self._cb_time = ns3.Simulator.Now() |
|
22 |
ns3.Simulator.Destroy() |
|
23 |
self._args_received = None |
|
24 |
self._cb_time = None |
|
25 |
ns3.Simulator.Schedule(ns3.Seconds(123), callback, "args") |
|
26 |
ns3.Simulator.Run() |
|
27 |
self.assertEqual(self._args_received, "args") |
|
28 |
self.assertEqual(self._cb_time.GetSeconds(), 123.0) |
|
29 |
||
30 |
def testScheduleDestroy(self): |
|
31 |
def callback(args): |
|
32 |
self._args_received = args |
|
33 |
self._cb_time = ns3.Simulator.Now() |
|
34 |
ns3.Simulator.Destroy() |
|
35 |
self._args_received = None |
|
36 |
self._cb_time = None |
|
37 |
def null(): pass |
|
38 |
ns3.Simulator.Schedule(ns3.Seconds(123), null) |
|
39 |
ns3.Simulator.ScheduleDestroy(callback, "args") |
|
40 |
ns3.Simulator.Run() |
|
41 |
ns3.Simulator.Destroy() |
|
42 |
self.assertEqual(self._args_received, "args") |
|
43 |
self.assertEqual(self._cb_time.GetSeconds(), 123.0) |
|
44 |
||
3731
317f9dbccc2b
New pybindgen and new API scanning, brings support for comparison operators and + - * / numeric operators.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3546
diff
changeset
|
45 |
def testTimeComparison(self): |
317f9dbccc2b
New pybindgen and new API scanning, brings support for comparison operators and + - * / numeric operators.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3546
diff
changeset
|
46 |
self.assert_(ns3.Seconds(123) == ns3.Seconds(123)) |
317f9dbccc2b
New pybindgen and new API scanning, brings support for comparison operators and + - * / numeric operators.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3546
diff
changeset
|
47 |
self.assert_(ns3.Seconds(123) >= ns3.Seconds(123)) |
317f9dbccc2b
New pybindgen and new API scanning, brings support for comparison operators and + - * / numeric operators.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3546
diff
changeset
|
48 |
self.assert_(ns3.Seconds(123) <= ns3.Seconds(123)) |
317f9dbccc2b
New pybindgen and new API scanning, brings support for comparison operators and + - * / numeric operators.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3546
diff
changeset
|
49 |
self.assert_(ns3.Seconds(124) > ns3.Seconds(123)) |
317f9dbccc2b
New pybindgen and new API scanning, brings support for comparison operators and + - * / numeric operators.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3546
diff
changeset
|
50 |
self.assert_(ns3.Seconds(123) < ns3.Seconds(124)) |
317f9dbccc2b
New pybindgen and new API scanning, brings support for comparison operators and + - * / numeric operators.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3546
diff
changeset
|
51 |
|
317f9dbccc2b
New pybindgen and new API scanning, brings support for comparison operators and + - * / numeric operators.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3546
diff
changeset
|
52 |
def testTimeNumericOperations(self): |
317f9dbccc2b
New pybindgen and new API scanning, brings support for comparison operators and + - * / numeric operators.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3546
diff
changeset
|
53 |
self.assertEqual(ns3.Seconds(10) + ns3.Seconds(5), ns3.Seconds(15)) |
317f9dbccc2b
New pybindgen and new API scanning, brings support for comparison operators and + - * / numeric operators.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3546
diff
changeset
|
54 |
self.assertEqual(ns3.Seconds(10) - ns3.Seconds(5), ns3.Seconds(5)) |
317f9dbccc2b
New pybindgen and new API scanning, brings support for comparison operators and + - * / numeric operators.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3546
diff
changeset
|
55 |
|
317f9dbccc2b
New pybindgen and new API scanning, brings support for comparison operators and + - * / numeric operators.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3546
diff
changeset
|
56 |
v1 = ns3.Scalar(5)*ns3.Seconds(10) |
317f9dbccc2b
New pybindgen and new API scanning, brings support for comparison operators and + - * / numeric operators.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3546
diff
changeset
|
57 |
self.assertEqual(v1, ns3.Seconds(50)) |
3408 | 58 |
|
59 |
def testConfig(self): |
|
60 |
ns3.Config.Set("ns3::OnOffApplication::PacketSize", ns3.UintegerValue(123)) |
|
61 |
ns3.Config.SetDefault("ns3::OnOffApplication::PacketSize", ns3.UintegerValue(123)) |
|
62 |
# hm.. no Config.Get? |
|
63 |
||
3414
48d69d8eac38
Rescan API; fix and enable the socket unit test, as it now works.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3408
diff
changeset
|
64 |
def testSocket(self): |
48d69d8eac38
Rescan API; fix and enable the socket unit test, as it now works.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3408
diff
changeset
|
65 |
node = ns3.Node() |
48d69d8eac38
Rescan API; fix and enable the socket unit test, as it now works.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3408
diff
changeset
|
66 |
ns3.AddInternetStack(node) |
48d69d8eac38
Rescan API; fix and enable the socket unit test, as it now works.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3408
diff
changeset
|
67 |
self._received_packet = None |
3408 | 68 |
|
3414
48d69d8eac38
Rescan API; fix and enable the socket unit test, as it now works.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3408
diff
changeset
|
69 |
def rx_callback(socket): |
48d69d8eac38
Rescan API; fix and enable the socket unit test, as it now works.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3408
diff
changeset
|
70 |
assert self._received_packet is None |
48d69d8eac38
Rescan API; fix and enable the socket unit test, as it now works.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3408
diff
changeset
|
71 |
self._received_packet = socket.Recv() |
3408 | 72 |
|
3414
48d69d8eac38
Rescan API; fix and enable the socket unit test, as it now works.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3408
diff
changeset
|
73 |
sink = ns3.Socket.CreateSocket(node, ns3.TypeId.LookupByName("ns3::UdpSocketFactory")) |
48d69d8eac38
Rescan API; fix and enable the socket unit test, as it now works.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3408
diff
changeset
|
74 |
sink.Bind(ns3.InetSocketAddress(ns3.Ipv4Address.GetAny(), 80)) |
48d69d8eac38
Rescan API; fix and enable the socket unit test, as it now works.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3408
diff
changeset
|
75 |
sink.SetRecvCallback(rx_callback) |
3408 | 76 |
|
3414
48d69d8eac38
Rescan API; fix and enable the socket unit test, as it now works.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3408
diff
changeset
|
77 |
source = ns3.Socket.CreateSocket(node, ns3.TypeId.LookupByName("ns3::UdpSocketFactory")) |
48d69d8eac38
Rescan API; fix and enable the socket unit test, as it now works.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3408
diff
changeset
|
78 |
source.SendTo(ns3.Packet(19), 0, ns3.InetSocketAddress(ns3.Ipv4Address("127.0.0.1"), 80)) |
3408 | 79 |
|
3414
48d69d8eac38
Rescan API; fix and enable the socket unit test, as it now works.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3408
diff
changeset
|
80 |
ns3.Simulator.Run() |
48d69d8eac38
Rescan API; fix and enable the socket unit test, as it now works.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3408
diff
changeset
|
81 |
self.assert_(self._received_packet is not None) |
48d69d8eac38
Rescan API; fix and enable the socket unit test, as it now works.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3408
diff
changeset
|
82 |
self.assertEqual(self._received_packet.GetSize(), 19) |
3431
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
83 |
|
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
84 |
|
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
85 |
def testAttributes(self): |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
86 |
## |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
87 |
## Yes, I know, the GetAttribute interface for Python is |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
88 |
## horrible, we should fix this soon, I hope. |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
89 |
## |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
90 |
queue = ns3.DropTailQueue() |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
91 |
|
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
92 |
queue.SetAttribute("MaxPackets", ns3.UintegerValue(123456)) |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
93 |
|
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
94 |
limit = ns3.UintegerValue() |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
95 |
queue.GetAttribute("MaxPackets", limit) |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
96 |
self.assertEqual(limit.Get(), 123456) |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
97 |
|
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
98 |
## -- object pointer values |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
99 |
mobility = ns3.RandomWaypointMobilityModel() |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
100 |
ptr = ns3.PointerValue() |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
101 |
mobility.GetAttribute("Position", ptr) |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
102 |
self.assertEqual(ptr.GetObject(), None) |
3408 | 103 |
|
3431
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
104 |
pos = ns3.ListPositionAllocator() |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
105 |
mobility.SetAttribute("Position", ns3.PointerValue(pos)) |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
106 |
|
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
107 |
ptr = ns3.PointerValue() |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
108 |
mobility.GetAttribute("Position", ptr) |
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
109 |
self.assert_(ptr.GetObject() is not None) |
3501
f725f0e0d6b7
Python: use hash() as temporary workaround to check if two objects with different wrappers are underneath the same.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3431
diff
changeset
|
110 |
|
f725f0e0d6b7
Python: use hash() as temporary workaround to check if two objects with different wrappers are underneath the same.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3431
diff
changeset
|
111 |
def testIdentity(self): |
f725f0e0d6b7
Python: use hash() as temporary workaround to check if two objects with different wrappers are underneath the same.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3431
diff
changeset
|
112 |
csma = ns3.CsmaNetDevice() |
f725f0e0d6b7
Python: use hash() as temporary workaround to check if two objects with different wrappers are underneath the same.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3431
diff
changeset
|
113 |
channel = ns3.CsmaChannel() |
f725f0e0d6b7
Python: use hash() as temporary workaround to check if two objects with different wrappers are underneath the same.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3431
diff
changeset
|
114 |
csma.Attach(channel) |
3431
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
115 |
|
3501
f725f0e0d6b7
Python: use hash() as temporary workaround to check if two objects with different wrappers are underneath the same.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3431
diff
changeset
|
116 |
c1 = csma.GetChannel() |
f725f0e0d6b7
Python: use hash() as temporary workaround to check if two objects with different wrappers are underneath the same.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3431
diff
changeset
|
117 |
c2 = csma.GetChannel() |
3431
ccf8108ce6d7
A couple of attribute python unit tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3414
diff
changeset
|
118 |
|
3546
cecda7126440
New PyBindGen, fixes python wrapper identity issue.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3501
diff
changeset
|
119 |
self.assert_(c1 is c2) |
3408 | 120 |
|
3753
a84a48233eb3
A more pythonic wrapper for ns3.TypeId.LookupByNameFailSafe
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3731
diff
changeset
|
121 |
def testTypeId(self): |
a84a48233eb3
A more pythonic wrapper for ns3.TypeId.LookupByNameFailSafe
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3731
diff
changeset
|
122 |
typeId1 = ns3.TypeId.LookupByNameFailSafe("ns3::UdpSocketFactory") |
a84a48233eb3
A more pythonic wrapper for ns3.TypeId.LookupByNameFailSafe
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3731
diff
changeset
|
123 |
self.assertEqual(typeId1.GetName (), "ns3::UdpSocketFactory") |
a84a48233eb3
A more pythonic wrapper for ns3.TypeId.LookupByNameFailSafe
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3731
diff
changeset
|
124 |
|
a84a48233eb3
A more pythonic wrapper for ns3.TypeId.LookupByNameFailSafe
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3731
diff
changeset
|
125 |
self.assertRaises(KeyError, ns3.TypeId.LookupByNameFailSafe, "__InvalidTypeName__") |
a84a48233eb3
A more pythonic wrapper for ns3.TypeId.LookupByNameFailSafe
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3731
diff
changeset
|
126 |
|
3408 | 127 |
if __name__ == '__main__': |
128 |
unittest.main() |