1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
package javax.jmdns.test; |
5 |
|
|
6 |
|
import static junit.framework.Assert.assertEquals; |
7 |
|
import static junit.framework.Assert.assertNull; |
8 |
|
import static junit.framework.Assert.assertNotNull; |
9 |
|
import static junit.framework.Assert.assertTrue; |
10 |
|
|
11 |
|
import java.io.IOException; |
12 |
|
import java.util.ArrayList; |
13 |
|
import java.util.Collections; |
14 |
|
import java.util.Enumeration; |
15 |
|
import java.util.HashMap; |
16 |
|
import java.util.List; |
17 |
|
import java.util.Map; |
18 |
|
import java.util.logging.ConsoleHandler; |
19 |
|
import java.util.logging.Level; |
20 |
|
import java.util.logging.LogManager; |
21 |
|
import java.util.logging.Logger; |
22 |
|
|
23 |
|
import javax.jmdns.JmDNS; |
24 |
|
import javax.jmdns.ServiceEvent; |
25 |
|
import javax.jmdns.ServiceInfo; |
26 |
|
import javax.jmdns.ServiceListener; |
27 |
|
import javax.jmdns.impl.constants.DNSConstants; |
28 |
|
import javax.jmdns.impl.tasks.state.DNSStateTask; |
29 |
|
|
30 |
|
import org.junit.Before; |
31 |
|
import org.junit.Test; |
32 |
|
|
33 |
|
|
34 |
|
|
35 |
|
|
|
|
| 90.7% |
Uncovered Elements: 20 (215) |
Complexity: 18 |
Complexity Density: 0.1 |
|
36 |
|
public class TextUpdateTest { |
37 |
|
|
38 |
|
private ServiceInfo service; |
39 |
|
private ServiceInfo printer; |
40 |
|
private MockListener serviceListenerMock; |
41 |
|
|
42 |
|
private final static String serviceKey = "srvname"; |
43 |
|
|
|
|
| 27.9% |
Uncovered Elements: 31 (43) |
Complexity: 8 |
Complexity Density: 0.23 |
|
44 |
|
public static class MockListener implements ServiceListener { |
45 |
|
|
46 |
|
private final List<ServiceEvent> _serviceAdded = Collections.synchronizedList(new ArrayList<ServiceEvent>(2)); |
47 |
|
private final List<ServiceEvent> _serviceRemoved = Collections.synchronizedList(new ArrayList<ServiceEvent>(2)); |
48 |
|
private final List<ServiceEvent> _serviceResolved = Collections.synchronizedList(new ArrayList<ServiceEvent>(2)); |
49 |
|
|
50 |
|
|
51 |
|
|
52 |
|
@see |
53 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
54 |
5
|
@Override... |
55 |
|
public void serviceAdded(ServiceEvent event) { |
56 |
5
|
_serviceAdded.add(event.clone()); |
57 |
|
} |
58 |
|
|
59 |
|
|
60 |
|
|
61 |
|
@see |
62 |
|
|
|
|
| 0% |
Uncovered Elements: 1 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
63 |
0
|
@Override... |
64 |
|
public void serviceRemoved(ServiceEvent event) { |
65 |
0
|
_serviceRemoved.add(event.clone()); |
66 |
|
} |
67 |
|
|
68 |
|
|
69 |
|
|
70 |
|
@see |
71 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
72 |
9
|
@Override... |
73 |
|
public void serviceResolved(ServiceEvent event) { |
74 |
9
|
_serviceResolved.add(event.clone()); |
75 |
|
} |
76 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
77 |
5
|
public List<ServiceEvent> servicesAdded() {... |
78 |
5
|
return _serviceAdded; |
79 |
|
} |
80 |
|
|
|
|
| 0% |
Uncovered Elements: 1 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
81 |
0
|
public List<ServiceEvent> servicesRemoved() {... |
82 |
0
|
return _serviceRemoved; |
83 |
|
} |
84 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
85 |
8
|
public List<ServiceEvent> servicesResolved() {... |
86 |
8
|
return _serviceResolved; |
87 |
|
} |
88 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (3) |
Complexity: 1 |
Complexity Density: 0.33 |
|
89 |
5
|
public synchronized void reset() {... |
90 |
5
|
_serviceAdded.clear(); |
91 |
5
|
_serviceRemoved.clear(); |
92 |
5
|
_serviceResolved.clear(); |
93 |
|
} |
94 |
|
|
|
|
| 0% |
Uncovered Elements: 26 (26) |
Complexity: 1 |
Complexity Density: 0.04 |
|
95 |
0
|
@Override... |
96 |
|
public String toString() { |
97 |
0
|
StringBuilder aLog = new StringBuilder(); |
98 |
0
|
aLog.append("Services Added: " + _serviceAdded.size()); |
99 |
0
|
for (ServiceEvent event : _serviceAdded) { |
100 |
0
|
aLog.append("\n\tevent name: '"); |
101 |
0
|
aLog.append(event.getName()); |
102 |
0
|
aLog.append("' type: '"); |
103 |
0
|
aLog.append(event.getType()); |
104 |
0
|
aLog.append("' info: '"); |
105 |
0
|
aLog.append(event.getInfo()); |
106 |
|
} |
107 |
0
|
aLog.append("\nServices Removed: " + _serviceRemoved.size()); |
108 |
0
|
for (ServiceEvent event : _serviceRemoved) { |
109 |
0
|
aLog.append("\n\tevent name: '"); |
110 |
0
|
aLog.append(event.getName()); |
111 |
0
|
aLog.append("' type: '"); |
112 |
0
|
aLog.append(event.getType()); |
113 |
0
|
aLog.append("' info: '"); |
114 |
0
|
aLog.append(event.getInfo()); |
115 |
|
} |
116 |
0
|
aLog.append("\nServices Resolved: " + _serviceResolved.size()); |
117 |
0
|
for (ServiceEvent event : _serviceResolved) { |
118 |
0
|
aLog.append("\n\tevent name: '"); |
119 |
0
|
aLog.append(event.getName()); |
120 |
0
|
aLog.append("' type: '"); |
121 |
0
|
aLog.append(event.getType()); |
122 |
0
|
aLog.append("' info: '"); |
123 |
0
|
aLog.append(event.getInfo()); |
124 |
|
} |
125 |
0
|
return aLog.toString(); |
126 |
|
} |
127 |
|
|
128 |
|
} |
129 |
|
|
|
|
| 54.5% |
Uncovered Elements: 10 (22) |
Complexity: 3 |
Complexity Density: 0.17 |
|
130 |
5
|
@Before... |
131 |
|
public void setup() { |
132 |
5
|
boolean log = false; |
133 |
5
|
if (log) { |
134 |
0
|
ConsoleHandler handler = new ConsoleHandler(); |
135 |
0
|
handler.setLevel(Level.FINEST); |
136 |
0
|
for (Enumeration<String> enumerator = LogManager.getLogManager().getLoggerNames(); enumerator.hasMoreElements();) { |
137 |
0
|
String loggerName = enumerator.nextElement(); |
138 |
0
|
Logger logger = Logger.getLogger(loggerName); |
139 |
0
|
logger.addHandler(handler); |
140 |
0
|
logger.setLevel(Level.FINEST); |
141 |
|
} |
142 |
|
} |
143 |
|
|
144 |
5
|
String text = "Test hypothetical web server"; |
145 |
5
|
Map<String, byte[]> properties = new HashMap<String, byte[]>(); |
146 |
5
|
properties.put(serviceKey, text.getBytes()); |
147 |
5
|
service = ServiceInfo.create("_html._tcp.local.", "apache-someuniqueid", 80, 0, 0, true, properties); |
148 |
5
|
text = "Test hypothetical print server"; |
149 |
5
|
properties.clear(); |
150 |
5
|
properties.put(serviceKey, text.getBytes()); |
151 |
5
|
printer = ServiceInfo.create("_html._tcp.local.", "printer-someuniqueid", "_printer", 80, 0, 0, true, properties); |
152 |
5
|
serviceListenerMock = new MockListener(); |
153 |
|
} |
154 |
|
|
|
|
| 96.5% |
Uncovered Elements: 2 (57) |
Complexity: 3 |
Complexity Density: 0.06 |
1
PASS
|
|
155 |
1
|
@Test... |
156 |
|
public void testListenForTextUpdateOnOtherRegistry() throws IOException, InterruptedException { |
157 |
1
|
System.out.println("Unit Test: testListenForTextUpdateOnOtherRegistry()"); |
158 |
1
|
JmDNS registry = null; |
159 |
1
|
JmDNS newServiceRegistry = null; |
160 |
1
|
try { |
161 |
1
|
registry = JmDNS.create("Listener"); |
162 |
1
|
registry.addServiceListener(service.getType(), serviceListenerMock); |
163 |
|
|
164 |
1
|
newServiceRegistry = JmDNS.create("Registry"); |
165 |
1
|
newServiceRegistry.registerService(service); |
166 |
|
|
167 |
|
|
168 |
|
|
169 |
1
|
List<ServiceEvent> servicesAdded = serviceListenerMock.servicesAdded(); |
170 |
1
|
assertEquals("We did not get the service added event.", 1, servicesAdded.size()); |
171 |
1
|
ServiceInfo info = servicesAdded.get(servicesAdded.size() - 1).getInfo(); |
172 |
1
|
assertEquals("We did not get the right name for the resolved service:", service.getName(), info.getName()); |
173 |
1
|
assertEquals("We did not get the right type for the resolved service:", service.getType(), info.getType()); |
174 |
|
|
175 |
|
|
176 |
1
|
List<ServiceEvent> servicesResolved = serviceListenerMock.servicesResolved(); |
177 |
1
|
assertEquals("We did not get the service resolved event.", 1, servicesResolved.size()); |
178 |
1
|
ServiceInfo result = servicesResolved.get(servicesResolved.size() - 1).getInfo(); |
179 |
1
|
assertNotNull("Did not get the expected service info: ", result); |
180 |
1
|
assertEquals("Did not get the expected service info: ", service, result); |
181 |
1
|
assertEquals("Did not get the expected service info text: ", service.getPropertyString(serviceKey), result.getPropertyString(serviceKey)); |
182 |
|
|
183 |
1
|
serviceListenerMock.reset(); |
184 |
1
|
String text = "Test improbable web server"; |
185 |
1
|
Map<String, byte[]> properties = new HashMap<String, byte[]>(); |
186 |
1
|
properties.put(serviceKey, text.getBytes()); |
187 |
1
|
service.setText(properties); |
188 |
1
|
Thread.sleep(3000); |
189 |
1
|
servicesResolved = serviceListenerMock.servicesResolved(); |
190 |
1
|
assertEquals("We did not get the service text updated event.", 1, servicesResolved.size()); |
191 |
1
|
result = servicesResolved.get(servicesResolved.size() - 1).getInfo(); |
192 |
1
|
assertEquals("Did not get the expected service info text: ", text, result.getPropertyString(serviceKey)); |
193 |
|
|
194 |
1
|
serviceListenerMock.reset(); |
195 |
1
|
text = "Test more improbable web server"; |
196 |
1
|
properties = new HashMap<String, byte[]>(); |
197 |
1
|
properties.put(serviceKey, text.getBytes()); |
198 |
1
|
service.setText(properties); |
199 |
1
|
Thread.sleep(3000); |
200 |
1
|
servicesResolved = serviceListenerMock.servicesResolved(); |
201 |
1
|
assertEquals("We did not get the service text updated event.", 1, servicesResolved.size()); |
202 |
1
|
result = servicesResolved.get(servicesResolved.size() - 1).getInfo(); |
203 |
1
|
assertEquals("Did not get the expected service info text: ", text, result.getPropertyString(serviceKey)); |
204 |
|
|
205 |
1
|
serviceListenerMock.reset(); |
206 |
1
|
text = "Test even more improbable web server"; |
207 |
1
|
properties = new HashMap<String, byte[]>(); |
208 |
1
|
properties.put(serviceKey, text.getBytes()); |
209 |
1
|
service.setText(properties); |
210 |
1
|
Thread.sleep(3000); |
211 |
1
|
servicesResolved = serviceListenerMock.servicesResolved(); |
212 |
1
|
assertEquals("We did not get the service text updated event.", 1, servicesResolved.size()); |
213 |
1
|
result = servicesResolved.get(servicesResolved.size() - 1).getInfo(); |
214 |
1
|
assertEquals("Did not get the expected service info text: ", text, result.getPropertyString(serviceKey)); |
215 |
|
|
216 |
|
} finally { |
217 |
1
|
if (registry != null) registry.close(); |
218 |
1
|
if (newServiceRegistry != null) newServiceRegistry.close(); |
219 |
|
} |
220 |
|
} |
221 |
|
|
|
|
| 94.3% |
Uncovered Elements: 2 (35) |
Complexity: 3 |
Complexity Density: 0.1 |
1
PASS
|
|
222 |
1
|
@Test... |
223 |
|
public void testRegisterEmptyTXTField() throws IOException, InterruptedException { |
224 |
1
|
System.out.println("Unit Test: testRegisterEmptyTXTField()"); |
225 |
1
|
JmDNS registry = null; |
226 |
1
|
JmDNS newServiceRegistry = null; |
227 |
1
|
try { |
228 |
1
|
registry = JmDNS.create("Listener"); |
229 |
1
|
registry.addServiceListener(service.getType(), serviceListenerMock); |
230 |
|
|
231 |
1
|
newServiceRegistry = JmDNS.create("Registry"); |
232 |
1
|
newServiceRegistry.registerService(service); |
233 |
|
|
234 |
|
|
235 |
|
|
236 |
1
|
List<ServiceEvent> servicesAdded = serviceListenerMock.servicesAdded(); |
237 |
1
|
assertEquals("We did not get the service added event.", 1, servicesAdded.size()); |
238 |
1
|
ServiceInfo info = servicesAdded.get(servicesAdded.size() - 1).getInfo(); |
239 |
1
|
assertEquals("We did not get the right name for the resolved service:", service.getName(), info.getName()); |
240 |
1
|
assertEquals("We did not get the right type for the resolved service:", service.getType(), info.getType()); |
241 |
|
|
242 |
|
|
243 |
1
|
List<ServiceEvent> servicesResolved = serviceListenerMock.servicesResolved(); |
244 |
1
|
assertEquals("We did not get the service resolved event.", 1, servicesResolved.size()); |
245 |
1
|
ServiceInfo result = servicesResolved.get(servicesResolved.size() - 1).getInfo(); |
246 |
1
|
assertNotNull("Did not get the expected service info: ", result); |
247 |
1
|
assertEquals("Did not get the expected service info: ", service, result); |
248 |
1
|
assertEquals("Did not get the expected service info text: ", service.getPropertyString(serviceKey), result.getPropertyString(serviceKey)); |
249 |
|
|
250 |
1
|
serviceListenerMock.reset(); |
251 |
1
|
Map<String, byte[]> properties = new HashMap<String, byte[]>(); |
252 |
1
|
service.setText(properties); |
253 |
1
|
Thread.sleep(3000); |
254 |
1
|
servicesResolved = serviceListenerMock.servicesResolved(); |
255 |
1
|
assertEquals("We did not get the service text updated event.", 1, servicesResolved.size()); |
256 |
1
|
result = servicesResolved.get(servicesResolved.size() - 1).getInfo(); |
257 |
1
|
assertNull("Did not get the expected service info text: ", result.getPropertyString(serviceKey)); |
258 |
|
} finally { |
259 |
1
|
if (registry != null) registry.close(); |
260 |
1
|
if (newServiceRegistry != null) newServiceRegistry.close(); |
261 |
|
} |
262 |
|
} |
263 |
|
|
|
|
| 94.9% |
Uncovered Elements: 2 (39) |
Complexity: 3 |
Complexity Density: 0.09 |
1
PASS
|
|
264 |
1
|
@Test... |
265 |
|
public void testRegisterCaseSensitiveField() throws IOException { |
266 |
1
|
System.out.println("Unit Test: testRegisterCaseSensitiveField()"); |
267 |
1
|
JmDNS registry = null; |
268 |
1
|
JmDNS newServiceRegistry = null; |
269 |
1
|
try { |
270 |
1
|
String text = "Test hypothetical Web Server"; |
271 |
1
|
Map<String, byte[]> properties = new HashMap<String, byte[]>(); |
272 |
1
|
properties.put(serviceKey, text.getBytes()); |
273 |
1
|
service = ServiceInfo.create("_Html._Tcp.local.", "Apache-SomeUniqueId", 80, 0, 0, true, properties); |
274 |
|
|
275 |
1
|
registry = JmDNS.create("Listener"); |
276 |
1
|
registry.addServiceListener(service.getType(), serviceListenerMock); |
277 |
|
|
278 |
1
|
newServiceRegistry = JmDNS.create("Registry"); |
279 |
1
|
newServiceRegistry.registerService(service); |
280 |
|
|
281 |
|
|
282 |
|
|
283 |
1
|
List<ServiceEvent> servicesAdded = serviceListenerMock.servicesAdded(); |
284 |
1
|
assertEquals("We did not get the service added event.", 1, servicesAdded.size()); |
285 |
1
|
ServiceInfo info = servicesAdded.get(servicesAdded.size() - 1).getInfo(); |
286 |
1
|
assertEquals("We did not get the right name for the resolved service:", service.getName(), info.getName()); |
287 |
1
|
assertEquals("We did not get the right type for the resolved service:", service.getType(), info.getType()); |
288 |
|
|
289 |
|
|
290 |
1
|
List<ServiceEvent> servicesResolved = serviceListenerMock.servicesResolved(); |
291 |
1
|
assertEquals("We did not get the service resolved event.", 1, servicesResolved.size()); |
292 |
1
|
ServiceInfo result = servicesResolved.get(servicesResolved.size() - 1).getInfo(); |
293 |
1
|
assertNotNull("Did not get the expected service info: ", result); |
294 |
1
|
assertEquals("Did not get the expected service info: ", service, result); |
295 |
1
|
assertEquals("Did not get the expected service info text: ", service.getPropertyString(serviceKey), result.getPropertyString(serviceKey)); |
296 |
|
|
297 |
1
|
ServiceInfo[] infos = registry.list(service.getType()); |
298 |
1
|
assertEquals("We did not get the right list of service info.", 1, infos.length); |
299 |
1
|
assertEquals("Did not get the expected service info: ", service, infos[0]); |
300 |
1
|
assertEquals("Did not get the expected service info text: ", service.getPropertyString(serviceKey), infos[0].getPropertyString(serviceKey)); |
301 |
|
|
302 |
1
|
infos = registry.list(service.getType().toLowerCase()); |
303 |
1
|
assertEquals("We did not get the right list of service info.", 1, infos.length); |
304 |
1
|
assertEquals("Did not get the expected service info: ", service, infos[0]); |
305 |
1
|
assertEquals("Did not get the expected service info text: ", service.getPropertyString(serviceKey), infos[0].getPropertyString(serviceKey)); |
306 |
|
|
307 |
|
} finally { |
308 |
1
|
if (registry != null) registry.close(); |
309 |
1
|
if (newServiceRegistry != null) newServiceRegistry.close(); |
310 |
|
} |
311 |
|
} |
312 |
|
|
|
|
| 92.6% |
Uncovered Elements: 2 (27) |
Complexity: 3 |
Complexity Density: 0.13 |
1
PASS
|
|
313 |
1
|
@Test... |
314 |
|
public void testRenewExpiringRequests() throws IOException, InterruptedException { |
315 |
1
|
System.out.println("Unit Test: testRenewExpiringRequests()"); |
316 |
1
|
JmDNS registry = null; |
317 |
1
|
JmDNS newServiceRegistry = null; |
318 |
1
|
try { |
319 |
|
|
320 |
|
|
321 |
1
|
DNSStateTask.setDefaultTTL(1 * 60); |
322 |
|
|
323 |
1
|
registry = JmDNS.create("Listener"); |
324 |
1
|
registry.addServiceListener(service.getType(), serviceListenerMock); |
325 |
|
|
326 |
1
|
newServiceRegistry = JmDNS.create("Registry"); |
327 |
1
|
newServiceRegistry.registerService(service); |
328 |
|
|
329 |
1
|
List<ServiceEvent> servicesAdded = serviceListenerMock.servicesAdded(); |
330 |
1
|
assertTrue("We did not get the service added event.", servicesAdded.size() == 1); |
331 |
|
|
332 |
1
|
ServiceInfo[] services = registry.list(service.getType()); |
333 |
1
|
assertEquals("We should see the service we just registered: ", 1, services.length); |
334 |
1
|
assertEquals(service, services[0]); |
335 |
|
|
336 |
|
|
337 |
1
|
Thread.sleep(2 * 60 * 1000); |
338 |
|
|
339 |
1
|
services = registry.list(service.getType()); |
340 |
1
|
assertEquals("We should see the service after the renewal: ", 1, services.length); |
341 |
1
|
assertEquals(service, services[0]); |
342 |
|
|
343 |
|
} finally { |
344 |
1
|
if (registry != null) registry.close(); |
345 |
1
|
if (newServiceRegistry != null) newServiceRegistry.close(); |
346 |
1
|
DNSStateTask.setDefaultTTL(DNSConstants.DNS_TTL); |
347 |
|
} |
348 |
|
} |
349 |
|
|
|
|
| 93.1% |
Uncovered Elements: 2 (29) |
Complexity: 3 |
Complexity Density: 0.12 |
1
PASS
|
|
350 |
1
|
@Test... |
351 |
|
public void testSubtype() throws IOException { |
352 |
1
|
System.out.println("Unit Test: testSubtype()"); |
353 |
1
|
JmDNS registry = null; |
354 |
1
|
JmDNS newServiceRegistry = null; |
355 |
1
|
try { |
356 |
1
|
registry = JmDNS.create("Listener"); |
357 |
1
|
registry.addServiceListener(service.getType(), serviceListenerMock); |
358 |
|
|
359 |
1
|
newServiceRegistry = JmDNS.create("Registry"); |
360 |
1
|
newServiceRegistry.registerService(printer); |
361 |
|
|
362 |
|
|
363 |
|
|
364 |
1
|
List<ServiceEvent> servicesAdded = serviceListenerMock.servicesAdded(); |
365 |
1
|
assertEquals("We did not get the service added event.", 1, servicesAdded.size()); |
366 |
1
|
ServiceInfo info = servicesAdded.get(servicesAdded.size() - 1).getInfo(); |
367 |
1
|
assertEquals("We did not get the right name for the resolved service:", printer.getName(), info.getName()); |
368 |
1
|
assertEquals("We did not get the right type for the resolved service:", printer.getType(), info.getType()); |
369 |
|
|
370 |
|
|
371 |
1
|
List<ServiceEvent> servicesResolved = serviceListenerMock.servicesResolved(); |
372 |
1
|
assertEquals("We did not get the service resolved event.", 1, servicesResolved.size()); |
373 |
1
|
ServiceInfo result = servicesResolved.get(servicesResolved.size() - 1).getInfo(); |
374 |
1
|
assertNotNull("Did not get the expected service info: ", result); |
375 |
1
|
assertEquals("Did not get the expected service info: ", printer, result); |
376 |
1
|
assertEquals("Did not get the expected service info subtype: ", printer.getSubtype(), result.getSubtype()); |
377 |
1
|
assertEquals("Did not get the expected service info text: ", printer.getPropertyString(serviceKey), result.getPropertyString(serviceKey)); |
378 |
1
|
serviceListenerMock.reset(); |
379 |
|
} finally { |
380 |
1
|
if (registry != null) registry.close(); |
381 |
1
|
if (newServiceRegistry != null) newServiceRegistry.close(); |
382 |
|
} |
383 |
|
|
384 |
|
} |
385 |
|
|
386 |
|
} |