blob: 34ee731b4fee12c84c2eaadbe1cf6361d3af9484 [file] [log] [blame]
jeraldabrahamae8de472014-04-19 00:34:59 -07001#!/usr/bin/python2
2# -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
3#
4# Copyright (C) 2014 University of Arizona
5# Author: Jerald Paul Abraham <jeraldabraham@email.arizona.edu>
6# See COPYING for copyright and distribution information.
7#
8
9import os
10import time
11import unittest
12import process_manager
13
14class test_fib_matching(unittest.TestCase, process_manager.ProcessManager):
15 """Test case for testing fib matching"""
16
17 def setUp(self):
18 print "\nTesting FIB Matching"
19 print "********************"
20
21 def tearDown(self):
22 self.killNfd()
23 try:
24 self.killProcess("ndn-traffic-server-1")
25 self.killProcess("ndn-traffic-server-2")
26 self.killProcess("ndn-traffic-server-3")
27 self.killProcess("ndn-traffic-server-4")
28 self.killProcess("ndn-traffic-client-1")
29 self.killProcess("ndn-traffic-client-2")
30 self.killProcess("ndn-traffic-client-3")
31 self.killProcess("ndn-traffic-client-4")
32 self.killProcess("ndn-traffic-client-5")
33 self.killProcess("ndn-traffic-client-6")
34 self.killProcess("ndn-traffic-client-7")
35 self.killProcess("ndn-traffic-client-8")
36 self.killProcess("ndn-traffic-client-9")
37 self.killProcess("ndn-traffic-client-10")
38 self.cleanupProcesses()
39 except IOError as e:
40 self.cleanupProcesses()
41 pass
42
43 def checkAndReportFailure(self, processKey, processName):
44 if self.hasProcessCompleted(processKey):
45 if self.getProcessReturnCode(processKey) != 0:
46 print self.getProcessOutput(processKey)
47 print self.getProcessError(processKey)
48 self.fail(">> TEST FAILED - received non-zero return code from " + processName)
49 else:
50 self.fail(">> TEST FAILED - " + processName + " failed to complete")
51
52 def test_matching(self):
53
54 #Start NFD
55 self.startNfd()
56 time.sleep(1)
Yi Huang53fa8712014-06-10 20:14:26 -070057 self.startNrd()
58 time.sleep(1)
jeraldabrahamae8de472014-04-19 00:34:59 -070059
60 #Start ndn-traffic-server to serve ndn:/ with Content "Z", FreshnessPeriod=10ms
61 #Prefix registration using NFD FibMgmt
62 serverConfigurationFile = os.path.abspath(
63 "test_fib_matching/test-traffic-server-1.conf")
64 self.startProcess("ndn-traffic-server-1",
65 ["ndn-traffic-server", serverConfigurationFile],
66 "-> Starting Traffic Server 1 (Prefix=ndn:/, FreshnessPeriod=10ms, Data=Z)")
67 time.sleep(0.1)
68
69 #Start ndn-traffic-server to serve ndn:/A with Content "A", FreshnessPeriod=10ms
70 #Prefix registration using NFD FibMgmt
71 serverConfigurationFile = os.path.abspath(
72 "test_fib_matching/test-traffic-server-2.conf")
73 self.startProcess("ndn-traffic-server-2",
74 ["ndn-traffic-server", serverConfigurationFile],
75 "-> Starting Traffic Server 2 (Prefix=ndn:/A, FreshnessPeriod=10ms, Data=A)")
76 time.sleep(0.1)
77
78 #Start ndn-traffic-server to serve ndn:/A/B/C with Content "C", FreshnessPeriod=10ms
79 #Prefix registration using NFD FibMgmt
80 serverConfigurationFile = os.path.abspath(
81 "test_fib_matching/test-traffic-server-3.conf")
82 self.startProcess("ndn-traffic-server-3",
83 ["ndn-traffic-server", serverConfigurationFile],
84 "-> Starting Traffic Server 3 (Prefix=ndn:/A/B/C, FreshnessPeriod=10ms, Data=C)")
85 time.sleep(0.1)
86
87 #Start ndn-traffic-server to serve ndn:/D/E with Content "E", FreshnessPeriod=10ms
88 #Prefix registration using NFD FibMgmt
89 serverConfigurationFile = os.path.abspath(
90 "test_fib_matching/test-traffic-server-4.conf")
91 self.startProcess("ndn-traffic-server-4",
92 ["ndn-traffic-server", serverConfigurationFile],
93 "-> Starting Traffic Server 4 (Prefix=ndn:/D/E, FreshnessPeriod=10ms, Data=E)")
94 time.sleep(0.1)
95
96 #Invoke ndn-traffic to request ndn:/ MustBeFresh=yes
97 #Fail if unanswered. Fail if Content is not "Z".
98 clientConfigurationFile = os.path.abspath(
99 "test_fib_matching/test-traffic-client-1.conf")
100 self.startProcess("ndn-traffic-client-1",
101 ["ndn-traffic", "-c 1", clientConfigurationFile],
102 ("-> Starting Traffic Client 1 (Prefix=ndn:/, MustBeFresh=Yes,"
103 " ExpectedContent=Z, MaxSuffixComponents=2)"))
104 self.waitForProcessCompletion("ndn-traffic-client-1", 10)
105 self.checkAndReportFailure("ndn-traffic-client-1", "Traffic Client 1")
106 print "-> Traffic Client 1 received data with Content=Z"
107
108 #Wait 100ms
109 time.sleep(0.1)
110
111 #Invoke ndn-traffic to request ndn:/F MustBeFresh=yes
112 #Fail if unanswered. Fail if Content is not "Z".
113 clientConfigurationFile = os.path.abspath(
114 "test_fib_matching/test-traffic-client-2.conf")
115 self.startProcess("ndn-traffic-client-2",
116 ["ndn-traffic", "-c 1", clientConfigurationFile],
117 "-> Starting Traffic Client 2 (Prefix=ndn:/F, MustBeFresh=Yes, ExpectedContent=Z)")
118 self.waitForProcessCompletion("ndn-traffic-client-2", 10)
119 self.checkAndReportFailure("ndn-traffic-client-2", "Traffic Client 2")
120 print "-> Traffic Client 2 received data with Content=Z"
121
122 #Wait 100ms
123 time.sleep(0.1)
124
125 #Invoke ndn-traffic to request ndn:/A MustBeFresh=yes
126 #Fail if unanswered. Fail if Content is not "A".
127 clientConfigurationFile = os.path.abspath(
128 "test_fib_matching/test-traffic-client-3.conf")
129 self.startProcess("ndn-traffic-client-3",
130 ["ndn-traffic", "-c 1", clientConfigurationFile],
131 "-> Starting Traffic Client 3 (Prefix=ndn:/A, MustBeFresh=Yes, ExpectedContent=A)")
132 self.waitForProcessCompletion("ndn-traffic-client-3", 10)
133 self.checkAndReportFailure("ndn-traffic-client-3", "Traffic Client 3")
134 print "-> Traffic Client 3 received data with Content=A"
135
136 #Wait 100ms
137 time.sleep(0.1)
138
139 #Invoke ndn-traffic to request ndn:/a MustBeFresh=yes
140 #Fail if unanswered. Fail if Content is not "Z".
141 clientConfigurationFile = os.path.abspath(
142 "test_fib_matching/test-traffic-client-4.conf")
143 self.startProcess("ndn-traffic-client-4",
144 ["ndn-traffic", "-c 1", clientConfigurationFile],
145 "-> Starting Traffic Client 4 (Prefix=ndn:/a, MustBeFresh=Yes, ExpectedContent=Z)")
146 self.waitForProcessCompletion("ndn-traffic-client-4", 10)
147 self.checkAndReportFailure("ndn-traffic-client-4", "Traffic Client 4")
148 print "-> Traffic Client 4 received data with Content=Z"
149
150 #Wait 100ms
151 time.sleep(0.1)
152
153 #Invoke ndn-traffic to request ndn:/A/B MustBeFresh=yes
154 #Fail if unanswered. Fail if Content is not "A".
155 clientConfigurationFile = os.path.abspath(
156 "test_fib_matching/test-traffic-client-5.conf")
157 self.startProcess("ndn-traffic-client-5",
158 ["ndn-traffic", "-c 1", clientConfigurationFile],
159 "-> Starting Traffic Client 5 (Prefix=ndn:/A/B, MustBeFresh=Yes, ExpectedContent=A)")
160 self.waitForProcessCompletion("ndn-traffic-client-5", 10)
161 self.checkAndReportFailure("ndn-traffic-client-5", "Traffic Client 5")
162 print "-> Traffic Client 5 received data with Content=A"
163
164 #Wait 100ms
165 time.sleep(0.1)
166
167 #Invoke ndn-traffic to request ndn:/A/B/G MustBeFresh=yes
168 #Fail if unanswered. Fail if Content is not "A".
169 clientConfigurationFile = os.path.abspath(
170 "test_fib_matching/test-traffic-client-6.conf")
171 self.startProcess("ndn-traffic-client-6",
172 ["ndn-traffic", "-c 1", clientConfigurationFile],
173 "-> Starting Traffic Client 6 (Prefix=ndn:/A/B/G, MustBeFresh=Yes, ExpectedContent=A)")
174 self.waitForProcessCompletion("ndn-traffic-client-6", 10)
175 self.checkAndReportFailure("ndn-traffic-client-6", "Traffic Client 6")
176 print "-> Traffic Client 6 received data with Content=A"
177
178 #Wait 100ms
179 time.sleep(0.1)
180
181 #Invoke ndn-traffic to request ndn:/A/B/C MustBeFresh=yes
182 #Fail if unanswered. Fail if Content is not "C".
183 clientConfigurationFile = os.path.abspath(
184 "test_fib_matching/test-traffic-client-7.conf")
185 self.startProcess("ndn-traffic-client-7",
186 ["ndn-traffic", "-c 1", clientConfigurationFile],
187 "-> Starting Traffic Client 7 (Prefix=ndn:/A/B/C, MustBeFresh=Yes, ExpectedContent=C)")
188 self.waitForProcessCompletion("ndn-traffic-client-7", 10)
189 self.checkAndReportFailure("ndn-traffic-client-7", "Traffic Client 7")
190 print "-> Traffic Client 7 received data with Content=C"
191
192 #Wait 100ms
193 time.sleep(0.1)
194
195 #Invoke ndn-traffic to request ndn:/A/B/C/P/Q/R/S/T/U/V/W/X/Y/Z MustBeFresh=yes
196 #Fail if unanswered. Fail if Content is not "C".
197 clientConfigurationFile = os.path.abspath(
198 "test_fib_matching/test-traffic-client-8.conf")
199 self.startProcess("ndn-traffic-client-8",
200 ["ndn-traffic", "-c 1", clientConfigurationFile],
201 ("-> Starting Traffic Client 8 (Prefix=ndn:/A/B/C/P/Q/R/S/T/U/V/W/X/Y/Z,"
202 " MustBeFresh=Yes, ExpectedContent=C)"))
203 self.waitForProcessCompletion("ndn-traffic-client-8", 10)
204 self.checkAndReportFailure("ndn-traffic-client-8", "Traffic Client 8")
205 print "-> Traffic Client 8 received data with Content=C"
206
207 #Wait 100ms
208 time.sleep(0.1)
209
210 #Invoke ndn-traffic to request ndn:/D MustBeFresh=yes Exclude=[,D]
211 #Fail if unanswered. Fail if Content is not "Z".
212 clientConfigurationFile = os.path.abspath(
213 "test_fib_matching/test-traffic-client-9.conf")
214 self.startProcess("ndn-traffic-client-9",
215 ["ndn-traffic", "-c 1", clientConfigurationFile],
216 ("-> Starting Traffic Client 9 (Prefix=ndn:/D, MustBeFresh=Yes,"
217 " ExcludeBefore=D, ExpectedContent=Z)"))
218 self.waitForProcessCompletion("ndn-traffic-client-9", 10)
219 self.checkAndReportFailure("ndn-traffic-client-9", "Traffic Client 9")
220 print "-> Traffic Client 9 received data with Content=Z"
221
222 #Wait 100ms
223 time.sleep(0.1)
224
225 #Invoke ndn-traffic to request ndn:/D MustBeFresh=yes Exclude=[,E].
226 #Fail if unanswered. Fail if Content is not "Z".
227 clientConfigurationFile = os.path.abspath(
228 "test_fib_matching/test-traffic-client-10.conf")
229 self.startProcess("ndn-traffic-client-10",
230 ["ndn-traffic", "-c 1", clientConfigurationFile],
231 ("-> Starting Traffic Client 10 (Prefix=ndn:/E, MustBeFresh=Yes,"
232 " ExcludeBefore=E, ExpectedContent=Z)"))
233 self.waitForProcessCompletion("ndn-traffic-client-10", 10)
234 self.checkAndReportFailure("ndn-traffic-client-10", "Traffic Client 10")
235 print "-> Traffic Client 10 received data with Content=Z"
236
237 #Stop all four traffic servers
238 self.killProcess("ndn-traffic-server-1")
239 self.killProcess("ndn-traffic-server-2")
240 self.killProcess("ndn-traffic-server-3")
241 self.killProcess("ndn-traffic-server-4")
242 print ">> TEST SUCCESSFUL"