/components/gnutella-core/src/test/java/com/limegroup/gnutella/NetworkManagerImplTest.java

https://github.com/wiregit/wirecode · Java · 487 lines · 405 code · 73 blank · 9 comment · 0 complexity · a9b06d3dafadb809e92e529d6fdcc7b1 MD5 · raw file

  1. package com.limegroup.gnutella;
  2. import java.io.IOException;
  3. import java.net.InetAddress;
  4. import java.net.InetSocketAddress;
  5. import java.util.HashSet;
  6. import java.util.Set;
  7. import java.util.concurrent.TimeUnit;
  8. import org.limewire.core.settings.ConnectionSettings;
  9. import org.limewire.gnutella.tests.LimeTestCase;
  10. import org.limewire.gnutella.tests.LimeTestUtils;
  11. import org.limewire.io.Address;
  12. import org.limewire.io.Connectable;
  13. import org.limewire.io.ConnectableImpl;
  14. import org.limewire.io.GUID;
  15. import org.limewire.listener.BlockingEventListener;
  16. import org.limewire.listener.ListenerSupport;
  17. import org.limewire.net.address.AddressEvent;
  18. import org.limewire.net.address.FirewalledAddress;
  19. import org.limewire.net.address.StrictIpPortSet;
  20. import org.limewire.rudp.RUDPUtils;
  21. import com.google.inject.AbstractModule;
  22. import com.google.inject.Inject;
  23. import com.google.inject.Injector;
  24. import com.google.inject.Singleton;
  25. public class NetworkManagerImplTest extends LimeTestCase {
  26. private Injector injector;
  27. private AddressChangedListener addressChangedListener;
  28. public NetworkManagerImplTest(String name) {
  29. super(name);
  30. }
  31. @Override
  32. protected void setUp() throws Exception {
  33. super.setUp();
  34. injector = LimeTestUtils.createInjectorAndStart(new AbstractModule() {
  35. @Override
  36. protected void configure() {
  37. //bind(ConnectionManager.class).toInstance(connectionManager);
  38. bind(AddressChangedListener.class);
  39. }
  40. });
  41. addressChangedListener = injector.getInstance(AddressChangedListener.class);
  42. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  43. acceptor.setListeningPort(0);
  44. }
  45. @Override
  46. protected void tearDown() {
  47. LifecycleManager lifecycleManager = injector.getInstance(LifecycleManager.class);
  48. lifecycleManager.shutdown();
  49. }
  50. private void assertEquals(Connectable connectable, Address address) {
  51. assertEquals(connectable + "!=" + address, 0, ConnectableImpl.COMPARATOR.compare(connectable, (Connectable) address));
  52. }
  53. public void testDirectConnectionAddressEvent() throws IOException {
  54. assertNull(addressChangedListener.getEvent());
  55. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  56. acceptor.setExternalAddress(InetAddress.getByName(RemoteFileDesc.BOGUS_IP));
  57. assertNull(addressChangedListener.getEvent());
  58. acceptor.setExternalAddress(InetAddress.getByName("199.199.199.199"));
  59. assertNull(addressChangedListener.getEvent());
  60. acceptor.setListeningPort(5000);
  61. assertNull(addressChangedListener.getEvent());
  62. acceptor.setIncoming(true);
  63. AddressEvent event = addressChangedListener.getEvent();
  64. assertNotNull(event);
  65. assertEquals(new ConnectableImpl("199.199.199.199", 5000, true), event.getData());
  66. }
  67. public void testNewDirectConnectionAddressEventAcceptedIncomingTrigger() throws IOException {
  68. assertNull(addressChangedListener.getEvent());
  69. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  70. acceptor.setExternalAddress(InetAddress.getByName("199.199.199.199"));
  71. acceptor.setListeningPort(5000);
  72. assertNull(addressChangedListener.getEvent());
  73. acceptor.setIncoming(true);
  74. AddressEvent event = addressChangedListener.getEvent();
  75. assertNotNull(event);
  76. assertEquals(new ConnectableImpl("199.199.199.199", 5000, true), event.getData());
  77. }
  78. public void testNewDirectConnectionAddressEventExternalAddressTrigger() throws IOException {
  79. assertNull(addressChangedListener.getEvent());
  80. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  81. acceptor.setIncoming(true);
  82. acceptor.setListeningPort(5000);
  83. assertNull(addressChangedListener.getEvent());
  84. acceptor.setExternalAddress(InetAddress.getByName("199.199.199.199"));
  85. AddressEvent event = addressChangedListener.getEvent();
  86. assertNotNull(event);
  87. assertEquals(new ConnectableImpl("199.199.199.199", 5000, true), event.getData());
  88. }
  89. public void testNewDirectConnectionAddressEventPortTrigger() throws IOException {
  90. assertNull(addressChangedListener.getEvent());
  91. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  92. acceptor.setIncoming(true);
  93. acceptor.setExternalAddress(InetAddress.getByName("199.199.199.199"));
  94. assertNull(addressChangedListener.getEvent());
  95. acceptor.setListeningPort(5000);
  96. AddressEvent event = addressChangedListener.getEvent();
  97. assertNotNull(event);
  98. assertEquals(new ConnectableImpl("199.199.199.199", 5000, true), event.getData());
  99. }
  100. public void testDirectConnectionAddressEventNoDups() throws IOException {
  101. assertNull(addressChangedListener.getEvent());
  102. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  103. acceptor.setExternalAddress(InetAddress.getByName("199.199.199.199"));
  104. acceptor.setListeningPort(5000);
  105. acceptor.setIncoming(true);
  106. AddressEvent event = addressChangedListener.getEvent();
  107. assertNotNull(event);
  108. assertEquals(new ConnectableImpl("199.199.199.199", 5000, true), event.getData());
  109. acceptor.setExternalAddress(InetAddress.getByName("199.199.199.199"));
  110. assertNull(addressChangedListener.getEvent());
  111. acceptor.setListeningPort(5000);
  112. assertNull(addressChangedListener.getEvent());
  113. acceptor.setIncoming(true);
  114. assertNull(addressChangedListener.getEvent());
  115. }
  116. public void testDirectConnectionAddressEventTriggeredAfterAllInfoIsThere() throws IOException {
  117. assertNull(addressChangedListener.getEvent());
  118. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  119. acceptor.setExternalAddress(InetAddress.getByAddress(new byte[] { (byte)129, 0, 0, 1 }));
  120. assertNull(addressChangedListener.getEvent());
  121. acceptor.setListeningPort(5000);
  122. assertNull(addressChangedListener.getEvent());
  123. acceptor.setIncoming(true);
  124. AddressEvent event = addressChangedListener.getEvent();
  125. assertNotNull(event);
  126. assertEquals(new ConnectableImpl("129.0.0.1", 5000, true), event.getData());
  127. }
  128. public void testDirectConnectionAddressChangedExternalAddressTrigger() throws IOException {
  129. assertNull(addressChangedListener.getEvent());
  130. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  131. acceptor.setExternalAddress(InetAddress.getByName("199.199.199.199"));
  132. acceptor.setListeningPort(5000);
  133. acceptor.setIncoming(true);
  134. AddressEvent event = addressChangedListener.getEvent();
  135. assertNotNull(event);
  136. assertEquals(new ConnectableImpl("199.199.199.199", 5000, true), event.getData());
  137. acceptor.setExternalAddress(InetAddress.getByName("200.200.200.200"));
  138. event = addressChangedListener.getEvent();
  139. assertNotNull(event);
  140. assertEquals(new ConnectableImpl("200.200.200.200", 5000, true), event.getData());
  141. }
  142. public void testDirectConnectionAddressChangedEventPortTrigger() throws IOException {
  143. assertNull(addressChangedListener.getEvent());
  144. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  145. acceptor.setExternalAddress(InetAddress.getByName("199.199.199.199"));
  146. acceptor.setListeningPort(5000);
  147. acceptor.setIncoming(true);
  148. AddressEvent event = addressChangedListener.getEvent();
  149. assertNotNull(event);
  150. assertEquals(new ConnectableImpl("199.199.199.199", 5000, true), event.getData());
  151. acceptor.setListeningPort(5001);
  152. event = addressChangedListener.getEvent();
  153. assertNotNull(event);
  154. assertEquals(new ConnectableImpl("199.199.199.199", 5001, true), event.getData());
  155. }
  156. public void testDirectConnectionAddressSupressesPushProxyAddressEvent() throws IOException {
  157. assertNull(addressChangedListener.getEvent());
  158. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  159. acceptor.setExternalAddress(InetAddress.getByAddress(new byte[] { (byte)129, 0, 0, 1 }));
  160. acceptor.setListeningPort(5000);
  161. acceptor.setIncoming(true);
  162. AddressEvent event = addressChangedListener.getEvent();
  163. assertNotNull(event);
  164. assertEquals(new ConnectableImpl("129.0.0.1", 5000, true), event.getData());
  165. NetworkManager networkManager = injector.getInstance(NetworkManager.class);
  166. assertNull(addressChangedListener.getEvent());
  167. Set<Connectable> proxies = new StrictIpPortSet<Connectable>();
  168. proxies.add(new ConnectableImpl("199.199.199.199", 5000, true));
  169. networkManager.newPushProxies(proxies);
  170. assertNull(addressChangedListener.getEvent());
  171. }
  172. public void testPushProxyAddressEvent() throws IOException {
  173. ApplicationServices applicationServices = injector.getInstance(ApplicationServices.class);
  174. NetworkManager networkManager = injector.getInstance(NetworkManager.class);
  175. AcceptorImpl acceptor = (AcceptorImpl) injector.getInstance(Acceptor.class);
  176. assertNull(addressChangedListener.getEvent());
  177. acceptor.setListeningPort(5000);
  178. acceptor.setExternalAddress(InetAddress.getByName("129.0.0.1"));
  179. Set<Connectable> proxies = new StrictIpPortSet<Connectable>();
  180. proxies.add(new ConnectableImpl("199.199.199.199", 5000, true));
  181. networkManager.newPushProxies(proxies);
  182. AddressEvent event = addressChangedListener.getEvent();
  183. assertNotNull(event);
  184. FirewalledAddress firewalledAddress = (FirewalledAddress)event.getData();
  185. assertEquals(proxies, firewalledAddress.getPushProxies());
  186. assertEquals(applicationServices.getMyGUID(), firewalledAddress.getClientGuid().bytes());
  187. }
  188. public void testPushProxyAddressChangedEvent() throws IOException {
  189. ApplicationServices applicationServices = injector.getInstance(ApplicationServices.class);
  190. NetworkManager networkManager = injector.getInstance(NetworkManager.class);
  191. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  192. // regular setup which usually takes place before first push proxies come in
  193. acceptor.setListeningPort(5000);
  194. acceptor.setExternalAddress(InetAddress.getByName("129.0.0.1"));
  195. assertNull(addressChangedListener.getEvent());
  196. Set<Connectable> proxies = new StrictIpPortSet<Connectable>();
  197. networkManager.newPushProxies(proxies);
  198. AddressEvent event = addressChangedListener.getEvent();
  199. assertNotNull(event);
  200. FirewalledAddress firewalledAddress = (FirewalledAddress)event.getData();
  201. assertEquals(proxies, firewalledAddress.getPushProxies());
  202. assertEquals(applicationServices.getMyGUID(), firewalledAddress.getClientGuid().bytes());
  203. proxies = new StrictIpPortSet<Connectable>();
  204. Connectable proxyAddress = new ConnectableImpl("199.199.199.199", 5000, true);
  205. Connectable proxyAddress2 = new ConnectableImpl("200.200.200.200", 5001, false);
  206. proxies.add(proxyAddress);
  207. proxies.add(proxyAddress2);
  208. networkManager.newPushProxies(proxies);
  209. event = addressChangedListener.getEvent();
  210. assertNotNull(event);
  211. firewalledAddress = (FirewalledAddress)event.getData();
  212. assertEquals(proxies, firewalledAddress.getPushProxies());
  213. assertEquals(applicationServices.getMyGUID(), firewalledAddress.getClientGuid().bytes());
  214. }
  215. public void testPushProxyAddressEventNoDups() throws IOException {
  216. ApplicationServices applicationServices = injector.getInstance(ApplicationServices.class);
  217. NetworkManager networkManager = injector.getInstance(NetworkManager.class);
  218. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  219. // regular setup which usually takes place before first push proxies come in
  220. acceptor.setListeningPort(5000);
  221. acceptor.setExternalAddress(InetAddress.getByName("129.0.0.1"));
  222. assertNull(addressChangedListener.getEvent());
  223. Set<Connectable> proxies = new StrictIpPortSet<Connectable>();
  224. proxies.add(new ConnectableImpl("199.199.199.199", 5000, true));
  225. networkManager.newPushProxies(proxies);
  226. AddressEvent event = addressChangedListener.getEvent();
  227. assertNotNull(event);
  228. FirewalledAddress firewalledAddress = (FirewalledAddress)event.getData();
  229. assertEquals(proxies, firewalledAddress.getPushProxies());
  230. assertEquals(applicationServices.getMyGUID(), firewalledAddress.getClientGuid().bytes());
  231. proxies = new StrictIpPortSet<Connectable>();
  232. proxies.add(new ConnectableImpl("199.199.199.199", 5000, true));
  233. networkManager.newPushProxies(proxies);
  234. assertNull(addressChangedListener.getEvent());
  235. }
  236. public void testNewPushProxyHolePunchAddressEventFWTStatusTrigger() throws IOException {
  237. ApplicationServices applicationServices = injector.getInstance(ApplicationServices.class);
  238. NetworkManager networkManager = injector.getInstance(NetworkManager.class);
  239. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  240. // regular setup which usually takes place before first push proxies come in
  241. acceptor.setListeningPort(5000);
  242. acceptor.setExternalAddress(InetAddress.getByName("129.0.0.1"));
  243. assertNull(addressChangedListener.getEvent());
  244. Set<Connectable> proxies = new StrictIpPortSet<Connectable>();
  245. proxies.add(new ConnectableImpl("199.199.199.199", 5000, true));
  246. networkManager.newPushProxies(proxies);
  247. AddressEvent event = addressChangedListener.getEvent();
  248. assertNotNull(event);
  249. FirewalledAddress firewalledAddress = (FirewalledAddress)event.getData();
  250. assertEquals(proxies, firewalledAddress.getPushProxies());
  251. assertEquals(applicationServices.getMyGUID(), firewalledAddress.getClientGuid().bytes());
  252. assertEquals(0, firewalledAddress.getFwtVersion());
  253. // set valid external address and port for proper fwt support
  254. acceptor.setExternalAddress(InetAddress.getByName("200.200.200.200"));
  255. acceptor.setListeningPort(5001);
  256. // signal fwt capability
  257. UDPService udpService = injector.getInstance(UDPService.class);
  258. udpService.setReceiveSolicited(true);
  259. ConnectionSettings.CANNOT_DO_FWT.setValue(false);
  260. networkManager.incomingStatusChanged();
  261. event = addressChangedListener.getEvent();
  262. assertNotNull(event);
  263. acceptor.setExternalAddress(InetAddress.getByName("100.100.100.100"));
  264. acceptor.setListeningPort(5001);
  265. networkManager.incomingStatusChanged();
  266. event = addressChangedListener.getEvent();
  267. assertNotNull(event);
  268. firewalledAddress = (FirewalledAddress)event.getData();
  269. assertEquals(proxies, firewalledAddress.getPushProxies());
  270. assertEquals(applicationServices.getMyGUID(), firewalledAddress.getClientGuid().bytes());
  271. assertEquals(RUDPUtils.VERSION, firewalledAddress.getFwtVersion());
  272. assertEquals(new ConnectableImpl("100.100.100.100", 5001, true), firewalledAddress.getPublicAddress());
  273. }
  274. public void testNewPushProxyHolePunchAddressEventPushProxyTrigger() throws IOException {
  275. ApplicationServices applicationServices = injector.getInstance(ApplicationServices.class);
  276. NetworkManager networkManager = injector.getInstance(NetworkManager.class);
  277. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  278. assertNull(addressChangedListener.getEvent());
  279. UDPService udpService = injector.getInstance(UDPService.class);
  280. udpService.setReceiveSolicited(true);
  281. ConnectionSettings.CANNOT_DO_FWT.setValue(false);
  282. networkManager.incomingStatusChanged();
  283. assertNull(addressChangedListener.getEvent());
  284. acceptor.setExternalAddress(InetAddress.getByName("200.200.200.200"));
  285. InetAddress privateAddress = InetAddress.getByName("192.168.0.1");
  286. acceptor.setAddress(privateAddress);
  287. acceptor.setListeningPort(5001);
  288. Set<Connectable> proxies = new StrictIpPortSet<Connectable>();
  289. proxies.add(new ConnectableImpl("199.199.199.199", 5000, true));
  290. networkManager.newPushProxies(proxies);
  291. AddressEvent event = addressChangedListener.getEvent();
  292. assertNotNull(event);
  293. FirewalledAddress expectedAddress = new FirewalledAddress(new ConnectableImpl("200.200.200.200", 5001, true),
  294. new ConnectableImpl(new InetSocketAddress(privateAddress, 5001), networkManager.isIncomingTLSEnabled()), new GUID(applicationServices.getMyGUID()), proxies, networkManager.supportsFWTVersion());
  295. assertEquals(expectedAddress, event.getData());
  296. }
  297. public void testPushProxyHolePunchAddressChangedEventPushProxyTrigger() throws IOException {
  298. ApplicationServices applicationServices = injector.getInstance(ApplicationServices.class);
  299. NetworkManager networkManager = injector.getInstance(NetworkManager.class);
  300. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  301. assertNull(addressChangedListener.getEvent());
  302. UDPService udpService = injector.getInstance(UDPService.class);
  303. udpService.setReceiveSolicited(true);
  304. ConnectionSettings.CANNOT_DO_FWT.setValue(false);
  305. InetAddress privateAddress = InetAddress.getByName("192.168.0.1");
  306. acceptor.setAddress(privateAddress);
  307. acceptor.setExternalAddress(InetAddress.getByName("200.200.200.200"));
  308. acceptor.setListeningPort(5001);
  309. Set<Connectable> proxies = new StrictIpPortSet<Connectable>();
  310. proxies.add(new ConnectableImpl("199.199.199.199", 5000, true));
  311. networkManager.newPushProxies(proxies);
  312. FirewalledAddress expectedAddress = new FirewalledAddress(new ConnectableImpl("200.200.200.200", 5001, true),
  313. new ConnectableImpl(new InetSocketAddress(privateAddress, networkManager.getNonForcedPort()), networkManager.isIncomingTLSEnabled()),
  314. new GUID(applicationServices.getMyGUID()), proxies, networkManager.supportsFWTVersion());
  315. AddressEvent event = addressChangedListener.getEvent();
  316. assertNotNull(event);
  317. assertEquals(expectedAddress, event.getData());
  318. proxies = new StrictIpPortSet<Connectable>();
  319. proxies.add(new ConnectableImpl("199.199.199.199", 5000, true));
  320. proxies.add(new ConnectableImpl("201.201.201.201", 5002, false));
  321. networkManager.newPushProxies(proxies);
  322. expectedAddress = new FirewalledAddress(new ConnectableImpl("200.200.200.200", 5001, true),
  323. new ConnectableImpl(new InetSocketAddress(privateAddress, networkManager.getNonForcedPort()), networkManager.isIncomingTLSEnabled()),
  324. new GUID(applicationServices.getMyGUID()), proxies, networkManager.supportsFWTVersion());
  325. event = addressChangedListener.getEvent();
  326. assertNotNull(event);
  327. assertEquals(expectedAddress, event.getData());
  328. }
  329. public void testPushProxyHolePunchAddressChangedEventFWTStatusTrigger() throws IOException {
  330. ApplicationServices applicationServices = injector.getInstance(ApplicationServices.class);
  331. NetworkManager networkManager = injector.getInstance(NetworkManager.class);
  332. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  333. assertNull(addressChangedListener.getEvent());
  334. UDPService udpService = injector.getInstance(UDPService.class);
  335. udpService.setReceiveSolicited(true);
  336. ConnectionSettings.CANNOT_DO_FWT.setValue(false);
  337. InetAddress privateAddress = InetAddress.getByName("192.168.0.1");
  338. acceptor.setAddress(privateAddress);
  339. acceptor.setExternalAddress(InetAddress.getByName("200.200.200.200"));
  340. acceptor.setListeningPort(5001);
  341. Set<Connectable> proxies = new HashSet<Connectable>();
  342. proxies.add(new ConnectableImpl("199.199.199.199", 5000, true));
  343. networkManager.newPushProxies(proxies);
  344. FirewalledAddress expectedAddress = new FirewalledAddress(new ConnectableImpl("200.200.200.200", 5001, true),
  345. new ConnectableImpl(new InetSocketAddress(privateAddress, networkManager.getNonForcedPort()), networkManager.isIncomingTLSEnabled()),
  346. new GUID(applicationServices.getMyGUID()), proxies, networkManager.supportsFWTVersion());
  347. AddressEvent event = addressChangedListener.getEvent();
  348. assertNotNull(event);
  349. assertEquals(expectedAddress, event.getData());
  350. udpService.setReceiveSolicited(false);
  351. ConnectionSettings.CANNOT_DO_FWT.setValue(false);
  352. networkManager.incomingStatusChanged();
  353. expectedAddress = new FirewalledAddress(new ConnectableImpl("200.200.200.200", 5001, true),
  354. new ConnectableImpl(new InetSocketAddress(privateAddress, networkManager.getNonForcedPort()), networkManager.isIncomingTLSEnabled()),
  355. new GUID(applicationServices.getMyGUID()), proxies, networkManager.supportsFWTVersion());
  356. event = addressChangedListener.getEvent();
  357. assertNotNull(event);
  358. assertEquals(expectedAddress, event.getData());
  359. }
  360. public void testPushProxyHolePunchAddressEventNoDups() throws IOException {
  361. ApplicationServices applicationServices = injector.getInstance(ApplicationServices.class);
  362. NetworkManager networkManager = injector.getInstance(NetworkManager.class);
  363. AcceptorImpl acceptor = (AcceptorImpl)injector.getInstance(Acceptor.class);
  364. assertNull(addressChangedListener.getEvent());
  365. UDPService udpService = injector.getInstance(UDPService.class);
  366. udpService.setReceiveSolicited(true);
  367. ConnectionSettings.CANNOT_DO_FWT.setValue(false);
  368. InetAddress privateAddress = InetAddress.getByName("192.168.0.1");
  369. acceptor.setAddress(privateAddress);
  370. acceptor.setExternalAddress(InetAddress.getByName("200.200.200.200"));
  371. acceptor.setListeningPort(5001);
  372. Set<Connectable> proxies = new StrictIpPortSet<Connectable>();
  373. proxies.add(new ConnectableImpl("199.199.199.199", 5000, true));
  374. networkManager.newPushProxies(proxies);
  375. FirewalledAddress expectedAddress = new FirewalledAddress(new ConnectableImpl("200.200.200.200", 5001, true),
  376. new ConnectableImpl(new InetSocketAddress(privateAddress, networkManager.getNonForcedPort()), networkManager.isIncomingTLSEnabled()),
  377. new GUID(applicationServices.getMyGUID()), proxies, networkManager.supportsFWTVersion());
  378. AddressEvent event = addressChangedListener.getEvent();
  379. assertNotNull(event);
  380. assertEquals(expectedAddress, event.getData());
  381. networkManager.incomingStatusChanged();
  382. assertNull(addressChangedListener.getEvent());
  383. proxies = new StrictIpPortSet<Connectable>();
  384. proxies.add(new ConnectableImpl("199.199.199.199", 5000, true));
  385. networkManager.newPushProxies(proxies);
  386. assertNull(addressChangedListener.getEvent());
  387. }
  388. public void testNewPushProxiesDoesNotTriggerEventIfExternalAddressNotKnownYet() throws Exception {
  389. NetworkManager networkManager = injector.getInstance(NetworkManager.class);
  390. Acceptor acceptor = injector.getInstance(Acceptor.class);
  391. acceptor.setListeningPort(5000);
  392. // no events, since no valid address yet
  393. assertNull(addressChangedListener.getEvent());
  394. networkManager.newPushProxies(new StrictIpPortSet<Connectable>(new ConnectableImpl("129.0.0.1", 4545, true)));
  395. // no events, since no valid address yet
  396. assertNull(addressChangedListener.getEvent());
  397. // now set external address and test for events again
  398. acceptor.setExternalAddress(InetAddress.getByName("199.0.0.1"));
  399. AddressEvent event = addressChangedListener.getEvent();
  400. FirewalledAddress address = (FirewalledAddress) event.getData();
  401. assertEquals(new ConnectableImpl("199.0.0.1", 5000, true), address.getPublicAddress());
  402. assertEquals(new StrictIpPortSet<Connectable>(new ConnectableImpl("129.0.0.1", 4545, true)), address.getPushProxies());
  403. }
  404. @Singleton
  405. public static class AddressChangedListener extends BlockingEventListener<AddressEvent> {
  406. @Inject
  407. void register(ListenerSupport<AddressEvent> broadcaster) {
  408. broadcaster.addListener(this);
  409. }
  410. AddressEvent getEvent() {
  411. return getEvent(25, TimeUnit.MILLISECONDS);
  412. }
  413. }
  414. }