6abfc5ed4e19f6b8ddcebd6b3e1bd70e2d5f8b93
[nepi.git] / test / resources / linux / ns3 / ccn / ns3dceccnpeek.py
1 #!/usr/bin/env python
2 #
3 #    NEPI, a framework to manage network experiments
4 #    Copyright (C) 2013 INRIA
5 #
6 #    This program is free software: you can redistribute it and/or modify
7 #    it under the terms of the GNU General Public License as published by
8 #    the Free Software Foundation, either version 3 of the License, or
9 #    (at your option) any later version.
10 #
11 #    This program is distributed in the hope that it will be useful,
12 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
13 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 #    GNU General Public License for more details.
15 #
16 #    You should have received a copy of the GNU General Public License
17 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 #
19 # Author: Alina Quereilhac <alina.quereilhac@inria.fr>
20
21
22 from nepi.execution.ec import ExperimentController 
23
24 from test_utils import skipIfNotAlive
25
26 import os
27 import time
28 import unittest
29
30 def add_ns3_node(ec, simu):
31     node = ec.register_resource("ns3::Node")
32     ec.register_connection(node, simu)
33
34     ipv4 = ec.register_resource("ns3::Ipv4L3Protocol")
35     ec.register_connection(node, ipv4)
36     
37     arp = ec.register_resource("ns3::ArpL3Protocol")
38     ec.register_connection(node, arp)
39     
40     icmp = ec.register_resource("ns3::Icmpv4L4Protocol")
41     ec.register_connection(node, icmp)
42
43     udp = ec.register_resource("ns3::UdpL4Protocol")
44     ec.register_connection(node, udp)
45
46     tcp = ec.register_resource("ns3::TcpL4Protocol")
47     ec.register_connection(node, tcp)
48
49     return node
50
51 class LinuxNS3CCNPeekDceApplicationTest(unittest.TestCase):
52     def setUp(self):
53         self.fedora_host = "nepi2.pl.sophia.inria.fr"
54         self.fedora_user = "inria_nepi"
55         self.fedora_identity = "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME'])
56
57     @skipIfNotAlive
58     def t_dce_ccnpeek(self, host, user = None, identity = None):
59         ec = ExperimentController(exp_id = "test-dce-ccnpeek")
60
61         node = ec.register_resource("LinuxNode")
62         if host == "localhost":
63             ec.set(node, "hostname", host)
64         else:
65             ec.set(node, "hostname", host)
66             ec.set(node, "username", user)
67             ec.set(node, "identity", identity)
68         
69         ec.set(node, "cleanProcesses", True)
70         #ec.set(node, "cleanHome", True)
71
72         simu = ec.register_resource("LinuxNS3Simulation")
73         ec.set(simu, "verbose", True)
74         ec.set(simu, "nsLog", "DceApplication")
75         ec.register_connection(simu, node)
76
77         nsnode = add_ns3_node(ec, simu)
78
79         ### create applications
80         ccnd = ec.register_resource("ns3::LinuxDceCCND")
81         ec.set (ccnd, "stackSize", 1<<20)
82         ec.set (ccnd, "StartTime", "1s")
83         ec.register_connection(ccnd, nsnode)
84
85         ccnpoke = ec.register_resource("ns3::LinuxDceCCNPoke")
86         ec.set (ccnpoke, "contentName", "ccnx:/chunk0")
87         ec.set (ccnpoke, "content", "DATA")
88         ec.set (ccnpoke, "stackSize", 1<<20)
89         ec.set (ccnpoke, "StartTime", "2s")
90         ec.register_connection(ccnpoke, nsnode)
91
92         ccnpeek = ec.register_resource("ns3::LinuxDceCCNPeek")
93         ec.set (ccnpeek, "contentName", "ccnx:/chunk0")
94         ec.set (ccnpeek, "stackSize", 1<<20)
95         ec.set (ccnpeek, "StartTime", "4s")
96         ec.set (ccnpeek, "StopTime", "20s")
97         ec.register_connection(ccnpeek, nsnode)
98
99         ec.deploy()
100
101         ec.wait_finished([ccnpeek])
102
103         expected = "ccnpeek ccnx:/chunk0"
104         cmdline = ec.trace(ccnpeek, "cmdline")
105         self.assertTrue(cmdline.find(expected) > -1, cmdline)
106
107         expected = "Start Time: NS3 Time:          4s ("
108         status = ec.trace(ccnpeek, "status")
109         self.assertTrue(status.find(expected) > -1, status)
110
111         expected = "DATA"
112         stdout = ec.trace(ccnpeek, "stdout")
113         self.assertTrue(stdout.find(expected) > -1, stdout)
114
115         ec.shutdown()
116
117     @skipIfNotAlive
118     def t_dce_ccnpeek_with_stack(self, host, user = None, identity = None):
119         ec = ExperimentController(exp_id = "test-dce-peek-lostack")
120         
121         node = ec.register_resource("LinuxNode")
122         if host == "localhost":
123             ec.set(node, "hostname", host)
124         else:
125             ec.set(node, "hostname", host)
126             ec.set(node, "username", user)
127             ec.set(node, "identity", identity)
128         
129         ec.set(node, "cleanProcesses", True)
130         #ec.set(node, "cleanHome", True)
131
132         simu = ec.register_resource("LinuxNS3Simulation")
133         ec.set(simu, "verbose", True)
134         ec.register_connection(simu, node)
135
136         nsnode = ec.register_resource("ns3::Node")
137         ec.set(nsnode, "enableStack", True)
138         ec.register_connection(nsnode, simu)
139
140         ### create applications
141         ccnd = ec.register_resource("ns3::LinuxDceCCND")
142         ec.set (ccnd, "stackSize", 1<<20)
143         ec.set (ccnd, "StartTime", "1s")
144         ec.register_connection(ccnd, nsnode)
145
146         ccnpoke = ec.register_resource("ns3::LinuxDceCCNPoke")
147         ec.set (ccnpoke, "contentName", "ccnx:/chunk0")
148         ec.set (ccnpoke, "content", "DATA")
149         ec.set (ccnpoke, "stackSize", 1<<20)
150         ec.set (ccnpoke, "StartTime", "2s")
151         ec.register_connection(ccnpoke, nsnode)
152
153         ccnpeek = ec.register_resource("ns3::LinuxDceCCNPeek")
154         ec.set (ccnpeek, "contentName", "ccnx:/chunk0")
155         ec.set (ccnpeek, "stackSize", 1<<20)
156         ec.set (ccnpeek, "StartTime", "4s")
157         ec.set (ccnpeek, "StopTime", "20s")
158         ec.register_connection(ccnpeek, nsnode)
159
160         ec.deploy()
161
162         ec.wait_finished([ccnpeek])
163
164         expected = "ccnpeek ccnx:/chunk0"
165         cmdline = ec.trace(ccnpeek, "cmdline")
166         self.assertTrue(cmdline.find(expected) > -1, cmdline)
167
168         expected = "Start Time: NS3 Time:          4s ("
169         status = ec.trace(ccnpeek, "status")
170         self.assertTrue(status.find(expected) > -1, status)
171
172         expected = "DATA"
173         stdout = ec.trace(ccnpeek, "stdout")
174         self.assertTrue(stdout.find(expected) > -1, stdout)
175
176         ec.shutdown()
177
178     def test_dce_ccnpeek_fedora(self):
179         self.t_dce_ccnpeek(self.fedora_host, self.fedora_user, self.fedora_identity)
180
181     def test_dce_ccnpeek_local(self):
182         self.t_dce_ccnpeek("localhost")
183
184     def test_dce_ccnpeek_with_stack_fedora(self):
185         self.t_dce_ccnpeek_with_stack(self.fedora_host, 
186                 self.fedora_user, self.fedora_identity)
187
188     def test_dce_ccnpeek_with_stack_local(self):
189         self.t_dce_ccnpeek_with_stack("localhost")
190
191
192 if __name__ == '__main__':
193     unittest.main()