PageRenderTime 28ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/servers/diameter/testsuite/tests/src/test/java/org/mobicents/diameter/stack/StackReConnectionTest.java

http://mobicents.googlecode.com/
Java | 616 lines | 491 code | 95 blank | 30 comment | 4 complexity | e4d9115357f9e6754900801797ea3d5c MD5 | raw file
Possible License(s): LGPL-3.0, GPL-3.0, LGPL-2.1, GPL-2.0, CC-BY-SA-3.0, CC0-1.0, Apache-2.0, BSD-3-Clause
  1. /*
  2. * JBoss, Home of Professional Open Source
  3. * Copyright 2011, Red Hat, Inc. and individual contributors
  4. * by the @authors tag. See the copyright.txt in the distribution for a
  5. * full listing of individual contributors.
  6. *
  7. * This is free software; you can redistribute it and/or modify it
  8. * under the terms of the GNU Lesser General Public License as
  9. * published by the Free Software Foundation; either version 2.1 of
  10. * the License, or (at your option) any later version.
  11. *
  12. * This software is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with this software; if not, write to the Free
  19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21. */
  22. package org.mobicents.diameter.stack;
  23. import static org.junit.Assert.assertEquals;
  24. import static org.junit.Assert.assertFalse;
  25. import static org.junit.Assert.assertTrue;
  26. import java.io.InputStream;
  27. import java.util.List;
  28. import java.util.concurrent.TimeUnit;
  29. import org.apache.log4j.Logger;
  30. import org.jdiameter.api.Answer;
  31. import org.jdiameter.api.ApplicationId;
  32. import org.jdiameter.api.Configuration;
  33. import org.jdiameter.api.DisconnectCause;
  34. import org.jdiameter.api.Mode;
  35. import org.jdiameter.api.Network;
  36. import org.jdiameter.api.NetworkReqListener;
  37. import org.jdiameter.api.Peer;
  38. import org.jdiameter.api.PeerState;
  39. import org.jdiameter.api.PeerTable;
  40. import org.jdiameter.api.Request;
  41. import org.jdiameter.client.api.controller.IPeer;
  42. import org.jdiameter.server.impl.StackImpl;
  43. import org.junit.Test;
  44. /**
  45. *
  46. * @author <a href="mailto:brainslog@gmail.com"> Alexandre Mendonca </a>
  47. * @author <a href="mailto:baranowb@gmail.com"> Bartosz Baranowski </a>
  48. */
  49. public class StackReConnectionTest {
  50. private static Logger logger = Logger.getLogger(StackReConnectionTest.class);
  51. // 1. start server
  52. // 2. start client + wait for connection
  53. // 3. stop client, start it again
  54. // 4. wait for connection
  55. @Test
  56. public void testReconnectionWithNewClient() throws Exception {
  57. StackImpl server = new StackImpl();
  58. StackImpl client = new StackImpl();
  59. try {
  60. String serverConfigName = "jdiameter-server-two.xml";
  61. String clientConfigName = "jdiameter-client-two.xml";
  62. InputStream serverConfigInputStream = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + serverConfigName);
  63. InputStream clientConfigInputStream = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + clientConfigName);
  64. Configuration serverConfig = new org.jdiameter.server.impl.helpers.XMLConfiguration(serverConfigInputStream);
  65. Configuration clientConfig = new org.jdiameter.server.impl.helpers.XMLConfiguration(clientConfigInputStream);
  66. server.init(serverConfig);
  67. serverConfigInputStream.close();
  68. Network network = server.unwrap(Network.class);
  69. network.addNetworkReqListener(new NetworkReqListener() {
  70. public Answer processRequest(Request request) {
  71. return null;
  72. }
  73. }, ApplicationId.createByAccAppId(193, 19302));
  74. server.start();
  75. _wait();
  76. client.init(clientConfig);
  77. clientConfigInputStream.close();
  78. network = client.unwrap(Network.class);
  79. network.addNetworkReqListener(new NetworkReqListener() {
  80. public Answer processRequest(Request request) {
  81. return null;
  82. }
  83. }, ApplicationId.createByAccAppId(193, 19302));
  84. client.start(Mode.ALL_PEERS, 5000, TimeUnit.MILLISECONDS);
  85. List<Peer> peers = server.unwrap(PeerTable.class).getPeerTable();
  86. assertEquals("Wrong num of connections, initial setup did not succeed. ", 1, peers.size());
  87. assertTrue("Peer not connected. State[" + ((IPeer) peers.get(0)).getState(PeerState.class) + "]", ((IPeer) peers.get(0)).isConnected());
  88. client.stop(DisconnectCause.REBOOTING);
  89. _wait();
  90. peers = server.unwrap(PeerTable.class).getPeerTable();
  91. assertEquals("Wrong num of connections, initial setup did not succeed. ", 1, peers.size());
  92. assertTrue("Peer not connected. State[" + ((IPeer) peers.get(0)).getState(PeerState.class) + "]", !((IPeer) peers.get(0)).isConnected());
  93. client = new StackImpl();
  94. clientConfigInputStream = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + clientConfigName);
  95. clientConfig = new org.jdiameter.server.impl.helpers.XMLConfiguration(clientConfigInputStream);
  96. client.init(clientConfig);
  97. network = client.unwrap(Network.class);
  98. network.addNetworkReqListener(new NetworkReqListener() {
  99. public Answer processRequest(Request request) {
  100. return null;
  101. }
  102. }, ApplicationId.createByAccAppId(193, 19302));
  103. client.start(Mode.ALL_PEERS, 5000, TimeUnit.MILLISECONDS);
  104. peers = server.unwrap(PeerTable.class).getPeerTable();
  105. assertEquals("Wrong num of connections, initial setup did not succeed. ", 1, peers.size());
  106. assertTrue("Peer not connected. State[" + ((IPeer) peers.get(0)).getState(PeerState.class) + "]", ((IPeer) peers.get(0)).isConnected());
  107. }
  108. finally {
  109. try {
  110. client.stop(DisconnectCause.REBOOTING);
  111. client.destroy();
  112. }
  113. catch (Exception e) {
  114. logger.warn("Failed to stop/destroy CLIENT stack.", e);
  115. }
  116. try {
  117. server.stop(DisconnectCause.REBOOTING);
  118. server.destroy();
  119. }
  120. catch (Exception e) {
  121. logger.warn("Failed to stop/destroy SERVER stack.", e);
  122. }
  123. }
  124. }
  125. @Test
  126. public void testReconnectionWithStoppedClient() throws Exception {
  127. StackImpl server = new StackImpl();
  128. StackImpl client = new StackImpl();
  129. try {
  130. String serverConfigName = "jdiameter-server-two.xml";
  131. String clientConfigName = "jdiameter-client-two.xml";
  132. InputStream serverConfigInputStream = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + serverConfigName);
  133. InputStream clientConfigInputStream = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + clientConfigName);
  134. Configuration serverConfig = new org.jdiameter.server.impl.helpers.XMLConfiguration(serverConfigInputStream);
  135. Configuration clientConfig = new org.jdiameter.server.impl.helpers.XMLConfiguration(clientConfigInputStream);
  136. server.init(serverConfig);
  137. serverConfigInputStream.close();
  138. Network network = server.unwrap(Network.class);
  139. network.addNetworkReqListener(new NetworkReqListener() {
  140. public Answer processRequest(Request request) {
  141. return null;
  142. }
  143. }, ApplicationId.createByAccAppId(193, 19302));
  144. server.start();
  145. _wait();
  146. client.init(clientConfig);
  147. clientConfigInputStream.close();
  148. network = client.unwrap(Network.class);
  149. network.addNetworkReqListener(new NetworkReqListener() {
  150. public Answer processRequest(Request request) {
  151. return null;
  152. }
  153. }, ApplicationId.createByAccAppId(193, 19302));
  154. client.start(Mode.ALL_PEERS, 5000, TimeUnit.MILLISECONDS);
  155. List<Peer> peers = server.unwrap(PeerTable.class).getPeerTable();
  156. assertEquals("Wrong num of connections, initial setup did not succeed. ", 1, peers.size());
  157. assertTrue("Peer not connected. State[" + ((IPeer) peers.get(0)).getState(PeerState.class) + "]", ((IPeer) peers.get(0)).isConnected());
  158. client.stop(DisconnectCause.REBOOTING);
  159. _wait();
  160. peers = server.unwrap(PeerTable.class).getPeerTable();
  161. assertEquals("Wrong num of connections, initial setup did not succeed. ", 1, peers.size());
  162. assertTrue("Peer not connected. State[" + ((IPeer) peers.get(0)).getState(PeerState.class) + "]", !((IPeer) peers.get(0)).isConnected());
  163. client.start(Mode.ALL_PEERS, 15000, TimeUnit.MILLISECONDS);
  164. peers = server.unwrap(PeerTable.class).getPeerTable();
  165. assertEquals("Wrong num of connections, initial setup did not succeed. ", 1, peers.size());
  166. assertTrue("Peer not connected. State[" + ((IPeer) peers.get(0)).getState(PeerState.class) + "]", ((IPeer) peers.get(0)).isConnected());
  167. }
  168. finally {
  169. try {
  170. client.stop(DisconnectCause.REBOOTING);
  171. client.destroy();
  172. }
  173. catch (Exception e) {
  174. logger.warn("Failed to stop/destroy CLIENT stack.", e);
  175. }
  176. try {
  177. server.stop(DisconnectCause.REBOOTING);
  178. server.destroy();
  179. }
  180. catch (Exception e) {
  181. logger.warn("Failed to stop/destroy SERVER stack.", e);
  182. }
  183. }
  184. }
  185. @Test
  186. public void testConnectTwoClients() throws Exception {
  187. StackImpl server = new StackImpl();
  188. StackImpl client = new StackImpl();
  189. StackImpl client2 = new StackImpl();
  190. try {
  191. String serverConfigName = "jdiameter-server-two.xml";
  192. String clientConfigName = "jdiameter-client-two.xml";
  193. String clientConfigName2 = "jdiameter-client-two-second.xml";
  194. InputStream serverConfigInputStream = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + serverConfigName);
  195. InputStream clientConfigInputStream = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + clientConfigName);
  196. InputStream clientConfigInputStream2 = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + clientConfigName2);
  197. Configuration serverConfig = new org.jdiameter.server.impl.helpers.XMLConfiguration(serverConfigInputStream);
  198. Configuration clientConfig = new org.jdiameter.server.impl.helpers.XMLConfiguration(clientConfigInputStream);
  199. Configuration clientConfig2 = new org.jdiameter.server.impl.helpers.XMLConfiguration(clientConfigInputStream2);
  200. server.init(serverConfig);
  201. serverConfigInputStream.close();
  202. Network network = server.unwrap(Network.class);
  203. network.addNetworkReqListener(new NetworkReqListener() {
  204. public Answer processRequest(Request request) {
  205. return null;
  206. }
  207. }, ApplicationId.createByAccAppId(193, 19302));
  208. server.start();
  209. _wait();
  210. client.init(clientConfig);
  211. clientConfigInputStream.close();
  212. network = client.unwrap(Network.class);
  213. network.addNetworkReqListener(new NetworkReqListener() {
  214. public Answer processRequest(Request request) {
  215. return null;
  216. }
  217. }, ApplicationId.createByAccAppId(193, 19302));
  218. client.start(Mode.ALL_PEERS, 5000, TimeUnit.MILLISECONDS);
  219. client2.init(clientConfig2);
  220. clientConfigInputStream2.close();
  221. network = client2.unwrap(Network.class);
  222. network.addNetworkReqListener(new NetworkReqListener() {
  223. public Answer processRequest(Request request) {
  224. return null;
  225. }
  226. }, ApplicationId.createByAccAppId(193, 19302));
  227. client2.start(Mode.ALL_PEERS, 5000, TimeUnit.MILLISECONDS);
  228. List<Peer> peers = server.unwrap(PeerTable.class).getPeerTable();
  229. assertEquals("Wrong num of connections, initial setup did not succeed. ", 2, peers.size());
  230. assertTrue("Peer1 not connected. State[" + ((IPeer) peers.get(0)).getState(PeerState.class) + "]", ((IPeer) peers.get(0)).isConnected());
  231. assertTrue("Peer2 not connected. State[" + ((IPeer) peers.get(1)).getState(PeerState.class) + "]", ((IPeer) peers.get(0)).isConnected());
  232. }
  233. finally {
  234. try {
  235. client.stop(DisconnectCause.REBOOTING);
  236. client.destroy();
  237. }
  238. catch (Exception e) {
  239. logger.warn("Failed to stop/destroy CLIENT (1) stack.", e);
  240. }
  241. try {
  242. client2.stop(DisconnectCause.REBOOTING);
  243. client2.destroy();
  244. }
  245. catch (Exception e) {
  246. logger.warn("Failed to stop/destroy CLIENT (2) stack.", e);
  247. }
  248. try {
  249. server.stop(DisconnectCause.REBOOTING);
  250. server.destroy();
  251. }
  252. catch (Exception e) {
  253. logger.warn("Failed to stop/destroy SERVER stack.", e);
  254. }
  255. }
  256. }
  257. @Test
  258. public void testReConnectTwoClientsReused() throws Exception {
  259. StackImpl server = new StackImpl();
  260. StackImpl client = new StackImpl();
  261. StackImpl client2 = new StackImpl();
  262. try {
  263. String serverConfigName = "jdiameter-server-two.xml";
  264. String clientConfigName = "jdiameter-client-two.xml";
  265. String clientConfigName2 = "jdiameter-client-two-second.xml";
  266. InputStream serverConfigInputStream = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + serverConfigName);
  267. InputStream clientConfigInputStream = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + clientConfigName);
  268. InputStream clientConfigInputStream2 = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + clientConfigName2);
  269. Configuration serverConfig = new org.jdiameter.server.impl.helpers.XMLConfiguration(serverConfigInputStream);
  270. Configuration clientConfig = new org.jdiameter.server.impl.helpers.XMLConfiguration(clientConfigInputStream);
  271. Configuration clientConfig2 = new org.jdiameter.server.impl.helpers.XMLConfiguration(clientConfigInputStream2);
  272. server.init(serverConfig);
  273. serverConfigInputStream.close();
  274. Network network = server.unwrap(Network.class);
  275. network.addNetworkReqListener(new NetworkReqListener() {
  276. public Answer processRequest(Request request) {
  277. return null;
  278. }
  279. }, ApplicationId.createByAccAppId(193, 19302));
  280. server.start();
  281. _wait();
  282. client.init(clientConfig);
  283. clientConfigInputStream.close();
  284. network = client.unwrap(Network.class);
  285. network.addNetworkReqListener(new NetworkReqListener() {
  286. public Answer processRequest(Request request) {
  287. return null;
  288. }
  289. }, ApplicationId.createByAccAppId(193, 19302));
  290. client.start(Mode.ALL_PEERS, 5000, TimeUnit.MILLISECONDS);
  291. Thread.sleep(1500);
  292. client2.init(clientConfig2);
  293. clientConfigInputStream2.close();
  294. network = client2.unwrap(Network.class);
  295. network.addNetworkReqListener(new NetworkReqListener() {
  296. public Answer processRequest(Request request) {
  297. return null;
  298. }
  299. }, ApplicationId.createByAccAppId(193, 19302));
  300. client2.start(Mode.ALL_PEERS, 5000, TimeUnit.MILLISECONDS);
  301. List<Peer> peers = server.unwrap(PeerTable.class).getPeerTable();
  302. assertEquals("Wrong num of connections, initial setup did not succeed. ", 2, peers.size());
  303. assertTrue("Peer1 not connected. State[" + ((IPeer) peers.get(0)).getState(PeerState.class) + "]", ((IPeer) peers.get(0)).isConnected());
  304. assertTrue("Peer2 not connected. State[" + ((IPeer) peers.get(1)).getState(PeerState.class) + "]", ((IPeer) peers.get(1)).isConnected());
  305. client.stop(DisconnectCause.REBOOTING);
  306. _wait();
  307. peers = server.unwrap(PeerTable.class).getPeerTable();
  308. assertEquals("Wrong num of connections, initial setup did not succeed. ", 2, peers.size());
  309. boolean foundConnected = false;
  310. boolean foundNotConnected = false;
  311. for (Peer p : peers) {
  312. if (((IPeer) p).isConnected()) {
  313. foundConnected = true;
  314. }
  315. else {
  316. foundNotConnected = true;
  317. }
  318. }
  319. assertTrue("Did not find connected client peer", foundConnected);
  320. assertTrue("Did not find not connected client peer", foundNotConnected);
  321. client.start(Mode.ALL_PEERS, 15000, TimeUnit.MILLISECONDS);
  322. peers = server.unwrap(PeerTable.class).getPeerTable();
  323. assertEquals("Wrong num of connections, initial setup did not succeed. ", 2, peers.size());
  324. assertTrue("Peer1 not connected. State[" + ((IPeer) peers.get(0)).getState(PeerState.class) + "]", ((IPeer) peers.get(0)).isConnected());
  325. assertTrue("Peer2 not connected. State[" + ((IPeer) peers.get(1)).getState(PeerState.class) + "]", ((IPeer) peers.get(1)).isConnected());
  326. }
  327. finally {
  328. try {
  329. client.stop(DisconnectCause.REBOOTING);
  330. client.destroy();
  331. }
  332. catch (Exception e) {
  333. logger.warn("Failed to stop/destroy CLIENT (1) stack.", e);
  334. }
  335. try {
  336. client2.stop(DisconnectCause.REBOOTING);
  337. client2.destroy();
  338. }
  339. catch (Exception e) {
  340. logger.warn("Failed to stop/destroy CLIENT (2) stack.", e);
  341. }
  342. try {
  343. server.stop(DisconnectCause.REBOOTING);
  344. server.destroy();
  345. }
  346. catch (Exception e) {
  347. logger.warn("Failed to stop/destroy SERVER stack.", e);
  348. }
  349. }
  350. }
  351. @Test
  352. public void testClientReconnectOnServerRestart() throws Exception {
  353. StackImpl server = new StackImpl();
  354. StackImpl client = new StackImpl();
  355. StackImpl client2 = new StackImpl();
  356. try {
  357. String serverConfigName = "jdiameter-server-two.xml";
  358. String clientConfigName = "jdiameter-client-two.xml";
  359. String clientConfigName2 = "jdiameter-client-two-second.xml";
  360. InputStream serverConfigInputStream = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + serverConfigName);
  361. InputStream clientConfigInputStream = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + clientConfigName);
  362. InputStream clientConfigInputStream2 = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + clientConfigName2);
  363. Configuration serverConfig = new org.jdiameter.server.impl.helpers.XMLConfiguration(serverConfigInputStream);
  364. Configuration clientConfig = new org.jdiameter.server.impl.helpers.XMLConfiguration(clientConfigInputStream);
  365. Configuration clientConfig2 = new org.jdiameter.server.impl.helpers.XMLConfiguration(clientConfigInputStream2);
  366. server.init(serverConfig);
  367. serverConfigInputStream.close();
  368. Network network = server.unwrap(Network.class);
  369. network.addNetworkReqListener(new NetworkReqListener() {
  370. public Answer processRequest(Request request) {
  371. return null;
  372. }
  373. }, ApplicationId.createByAccAppId(193, 19302));
  374. server.start();
  375. _wait();
  376. client.init(clientConfig);
  377. clientConfigInputStream.close();
  378. network = client.unwrap(Network.class);
  379. network.addNetworkReqListener(new NetworkReqListener() {
  380. public Answer processRequest(Request request) {
  381. return null;
  382. }
  383. }, ApplicationId.createByAccAppId(193, 19302));
  384. client.start(Mode.ALL_PEERS, 5000, TimeUnit.MILLISECONDS);
  385. Thread.sleep(1500);
  386. client2.init(clientConfig2);
  387. clientConfigInputStream2.close();
  388. network = client2.unwrap(Network.class);
  389. network.addNetworkReqListener(new NetworkReqListener() {
  390. public Answer processRequest(Request request) {
  391. return null;
  392. }
  393. }, ApplicationId.createByAccAppId(193, 19302));
  394. client2.start(Mode.ALL_PEERS, 5000, TimeUnit.MILLISECONDS);
  395. List<Peer> peers = server.unwrap(PeerTable.class).getPeerTable();
  396. assertEquals("Wrong num of connections, initial setup did not succeed. ", 2, peers.size());
  397. assertTrue("Peer1 not connected. State[" + ((IPeer) peers.get(0)).getState(PeerState.class) + "]", ((IPeer) peers.get(0)).isConnected());
  398. assertTrue("Peer2 not connected. State[" + ((IPeer) peers.get(1)).getState(PeerState.class) + "]", ((IPeer) peers.get(1)).isConnected());
  399. server.stop(DisconnectCause.REBOOTING);
  400. _wait();
  401. server.start();
  402. _wait();
  403. _wait();
  404. peers = server.unwrap(PeerTable.class).getPeerTable();
  405. assertEquals("Wrong num of connections, initial setup did not succeed. ", 2, peers.size());
  406. assertTrue("Peer1 not connected. State[" + ((IPeer) peers.get(0)).getState(PeerState.class) + "]", ((IPeer) peers.get(0)).isConnected());
  407. assertTrue("Peer2 not connected. State[" + ((IPeer) peers.get(1)).getState(PeerState.class) + "]", ((IPeer) peers.get(1)).isConnected());
  408. }
  409. finally {
  410. try {
  411. client.stop(DisconnectCause.REBOOTING);
  412. client.destroy();
  413. }
  414. catch (Exception e) {
  415. logger.warn("Failed to stop/destroy CLIENT (1) stack.", e);
  416. }
  417. try {
  418. client2.stop(DisconnectCause.REBOOTING);
  419. client2.destroy();
  420. }
  421. catch (Exception e) {
  422. logger.warn("Failed to stop/destroy CLIENT (2) stack.", e);
  423. }
  424. try {
  425. server.stop(DisconnectCause.REBOOTING);
  426. server.destroy();
  427. }
  428. catch (Exception e) {
  429. logger.warn("Failed to stop/destroy SERVER stack.", e);
  430. }
  431. }
  432. }
  433. @Test
  434. public void testClientNotReconnectingOnServerRestart() throws Exception {
  435. StackImpl server = new StackImpl();
  436. StackImpl client = new StackImpl();
  437. StackImpl client2 = new StackImpl();
  438. try {
  439. String serverConfigName = "jdiameter-server-two.xml";
  440. String clientConfigName = "jdiameter-client-two.xml";
  441. String clientConfigName2 = "jdiameter-client-two-second.xml";
  442. InputStream serverConfigInputStream = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + serverConfigName);
  443. InputStream clientConfigInputStream = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + clientConfigName);
  444. InputStream clientConfigInputStream2 = StackReConnectionTest.class.getClassLoader().getResourceAsStream("configurations/" + clientConfigName2);
  445. Configuration serverConfig = new org.jdiameter.server.impl.helpers.XMLConfiguration(serverConfigInputStream);
  446. Configuration clientConfig = new org.jdiameter.server.impl.helpers.XMLConfiguration(clientConfigInputStream);
  447. Configuration clientConfig2 = new org.jdiameter.server.impl.helpers.XMLConfiguration(clientConfigInputStream2);
  448. server.init(serverConfig);
  449. serverConfigInputStream.close();
  450. Network network = server.unwrap(Network.class);
  451. network.addNetworkReqListener(new NetworkReqListener() {
  452. public Answer processRequest(Request request) {
  453. return null;
  454. }
  455. }, ApplicationId.createByAccAppId(193, 19302));
  456. server.start();
  457. _wait();
  458. client.init(clientConfig);
  459. clientConfigInputStream.close();
  460. network = client.unwrap(Network.class);
  461. network.addNetworkReqListener(new NetworkReqListener() {
  462. public Answer processRequest(Request request) {
  463. return null;
  464. }
  465. }, ApplicationId.createByAccAppId(193, 19302));
  466. client.start(Mode.ALL_PEERS, 5000, TimeUnit.MILLISECONDS);
  467. Thread.sleep(1500);
  468. client2.init(clientConfig2);
  469. clientConfigInputStream2.close();
  470. network = client2.unwrap(Network.class);
  471. network.addNetworkReqListener(new NetworkReqListener() {
  472. public Answer processRequest(Request request) {
  473. return null;
  474. }
  475. }, ApplicationId.createByAccAppId(193, 19302));
  476. client2.start(Mode.ALL_PEERS, 5000, TimeUnit.MILLISECONDS);
  477. List<Peer> peers = server.unwrap(PeerTable.class).getPeerTable();
  478. assertEquals("Wrong num of connections, initial setup did not succeed. ", 2, peers.size());
  479. assertTrue("Peer1 not connected. State[" + ((IPeer) peers.get(0)).getState(PeerState.class) + "]", ((IPeer) peers.get(0)).isConnected());
  480. assertTrue("Peer2 not connected. State[" + ((IPeer) peers.get(1)).getState(PeerState.class) + "]", ((IPeer) peers.get(1)).isConnected());
  481. server.stop(DisconnectCause.DO_NOT_WANT_TO_TALK_TO_YOU);
  482. _wait();
  483. peers = server.unwrap(PeerTable.class).getPeerTable();
  484. int stoppedPeerTableSize = peers.size();
  485. server.start();
  486. _wait();
  487. _wait(); // just to make sure...
  488. peers = server.unwrap(PeerTable.class).getPeerTable();
  489. assertEquals("Wrong number of peers in table, probably clients tried to reconnect.", stoppedPeerTableSize, peers.size());
  490. for(Peer p : peers) {
  491. assertFalse("Peer [" + p.getUri() + "] is connected. State[" + p.getState(PeerState.class) + "]", ((IPeer)p).isConnected());
  492. }
  493. }
  494. finally {
  495. try {
  496. client.stop(DisconnectCause.REBOOTING);
  497. client.destroy();
  498. }
  499. catch (Exception e) {
  500. logger.warn("Failed to stop/destroy CLIENT (1) stack.", e);
  501. }
  502. try {
  503. client2.stop(DisconnectCause.REBOOTING);
  504. client2.destroy();
  505. }
  506. catch (Exception e) {
  507. logger.warn("Failed to stop/destroy CLIENT (2) stack.", e);
  508. }
  509. try {
  510. server.stop(DisconnectCause.REBOOTING);
  511. server.destroy();
  512. }
  513. catch (Exception e) {
  514. logger.warn("Failed to stop/destroy SERVER stack.", e);
  515. }
  516. }
  517. }
  518. private void _wait() throws InterruptedException {
  519. Thread.sleep(5000);
  520. }
  521. }