/hazelcast-client/src/test/java/com/hazelcast/client/ConnectionManagerTest.java

https://bitbucket.org/gabral6_gmailcom/hazelcast · Java · 271 lines · 241 code · 15 blank · 15 comment · 0 complexity · 38b418533f461e9fb10b4ac6c675ca09 MD5 · raw file

  1. /*
  2. * Copyright (c) 2008-2013, Hazelcast, Inc. All Rights Reserved.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.hazelcast.client;
  17. import com.hazelcast.core.*;
  18. import com.hazelcast.core.LifecycleEvent.LifecycleState;
  19. import com.hazelcast.security.Credentials;
  20. import com.hazelcast.security.UsernamePasswordCredentials;
  21. import org.junit.Ignore;
  22. import org.junit.Test;
  23. import org.junit.runner.RunWith;
  24. import java.net.InetSocketAddress;
  25. import java.util.ArrayList;
  26. import java.util.HashSet;
  27. import java.util.List;
  28. import java.util.Set;
  29. import java.util.concurrent.CountDownLatch;
  30. import java.util.concurrent.TimeUnit;
  31. import static org.junit.Assert.*;
  32. import static org.mockito.Mockito.*;
  33. @RunWith(com.hazelcast.util.RandomBlockJUnit4ClassRunner.class)
  34. public class ConnectionManagerTest {
  35. final Credentials credentials = new UsernamePasswordCredentials();
  36. private LifecycleServiceClientImpl createLifecycleServiceClientImpl(HazelcastClient hazelcastClient, final List<LifecycleState> lifecycleEvents) {
  37. final LifecycleServiceClientImpl lifecycleService = new LifecycleServiceClientImpl(hazelcastClient);
  38. lifecycleService.addLifecycleListener(new LifecycleListener() {
  39. public void stateChanged(LifecycleEvent event) {
  40. lifecycleEvents.add(event.getState());
  41. }
  42. });
  43. return lifecycleService;
  44. }
  45. @Test
  46. public void testGetConnection() throws Exception {
  47. HazelcastClient client = mock(HazelcastClient.class);
  48. InetSocketAddress inetSocketAddress = new InetSocketAddress("localhost", 5701);
  49. final Connection connection = mock(Connection.class);
  50. final CountDownLatch latch = new CountDownLatch(2);
  51. final List<LifecycleState> lifecycleEvents = new ArrayList<LifecycleState>();
  52. final LifecycleServiceClientImpl lifecycleService = createLifecycleServiceClientImpl(client, lifecycleEvents);
  53. ClientConfig clientConfig = new ClientConfig();
  54. clientConfig.setCredentials(credentials).addInetSocketAddress(inetSocketAddress).setConnectionTimeout(60000);
  55. ConnectionManager connectionManager = new ConnectionManager(client, clientConfig, lifecycleService) {
  56. protected Connection getNextConnection() {
  57. latch.countDown();
  58. return connection;
  59. }
  60. };
  61. ClientBinder binder = mock(ClientBinder.class);
  62. connectionManager.setBinder(binder);
  63. connectionManager.getConnection();
  64. assertEquals(connection, connectionManager.getConnection());
  65. verify(binder).bind(connection, credentials);
  66. assertEquals(connection, connectionManager.getConnection());
  67. assertEquals(1, latch.getCount());
  68. Thread.sleep(100); // wait a little events to be fired
  69. assertArrayEquals(new Object[]{LifecycleState.CLIENT_CONNECTION_OPENING}, lifecycleEvents.toArray());
  70. }
  71. @Test
  72. public void testGetConnectionWhenThereIsNoConnection() throws Exception {
  73. HazelcastClient client = mock(HazelcastClient.class);
  74. InetSocketAddress inetSocketAddress = new InetSocketAddress("localhost", 5701);
  75. final List<LifecycleState> lifecycleEvents = new ArrayList<LifecycleState>();
  76. final LifecycleServiceClientImpl lifecycleService = createLifecycleServiceClientImpl(client, lifecycleEvents);
  77. ClientConfig clientConfig = new ClientConfig();
  78. clientConfig.setCredentials(credentials).addInetSocketAddress(inetSocketAddress).setConnectionTimeout(60000);
  79. ConnectionManager connectionManager = new ConnectionManager(client, clientConfig, lifecycleService) {
  80. protected Connection getNextConnection() {
  81. return null;
  82. }
  83. };
  84. ClientBinder binder = mock(ClientBinder.class);
  85. connectionManager.setBinder(binder);
  86. connectionManager.getConnection();
  87. assertEquals(null, connectionManager.getConnection());
  88. assertEquals(null, connectionManager.getConnection());
  89. assertArrayEquals(new Object[0], lifecycleEvents.toArray());
  90. }
  91. @Test
  92. public void testDestroyConnection() throws Exception {
  93. HazelcastClient client = mock(HazelcastClient.class);
  94. InetSocketAddress inetSocketAddress = new InetSocketAddress("localhost", 5701);
  95. final Connection connection = mock(Connection.class);
  96. final CountDownLatch latch = new CountDownLatch(2);
  97. final List<LifecycleState> lifecycleEvents = new ArrayList<LifecycleState>();
  98. final LifecycleServiceClientImpl lifecycleService = createLifecycleServiceClientImpl(client, lifecycleEvents);
  99. ClientConfig clientConfig = new ClientConfig();
  100. clientConfig.setCredentials(credentials).addInetSocketAddress(inetSocketAddress).setConnectionTimeout(60000);
  101. ConnectionManager connectionManager = new ConnectionManager(client, clientConfig, lifecycleService) {
  102. protected Connection getNextConnection() {
  103. latch.countDown();
  104. return connection;
  105. }
  106. };
  107. ClientBinder binder = mock(ClientBinder.class);
  108. connectionManager.setBinder(binder);
  109. assertEquals(connection, connectionManager.getConnection());
  110. connectionManager.destroyConnection(connection);
  111. connectionManager.getConnection();
  112. assertTrue(latch.await(1, TimeUnit.SECONDS));
  113. Thread.sleep(100); // wait a little events to be fired
  114. assertArrayEquals(new Object[]{LifecycleState.CLIENT_CONNECTION_OPENING,
  115. LifecycleState.CLIENT_CONNECTION_LOST,
  116. LifecycleState.CLIENT_CONNECTION_OPENING},
  117. lifecycleEvents.toArray());
  118. }
  119. @Test
  120. @Ignore
  121. public void testSameMemberAdded() throws Exception {
  122. HazelcastClient client = mock(HazelcastClient.class);
  123. InetSocketAddress inetSocketAddress = new InetSocketAddress("localhost", 5701);
  124. final Connection connection = mock(Connection.class);
  125. final CountDownLatch latch = new CountDownLatch(2);
  126. final List<LifecycleState> lifecycleEvents = new ArrayList<LifecycleState>();
  127. final LifecycleServiceClientImpl lifecycleService = createLifecycleServiceClientImpl(client, lifecycleEvents);
  128. ClientConfig clientConfig = new ClientConfig();
  129. clientConfig.setCredentials(credentials).addInetSocketAddress(inetSocketAddress).setConnectionTimeout(60000);
  130. ConnectionManager connectionManager = new ConnectionManager(client, clientConfig, lifecycleService) {
  131. protected Connection getNextConnection() {
  132. latch.countDown();
  133. return connection;
  134. }
  135. };
  136. ClientBinder binder = mock(ClientBinder.class);
  137. connectionManager.setBinder(binder);
  138. Cluster cluster = mock(Cluster.class);
  139. Member member = mock(Member.class);
  140. when(member.getInetSocketAddress()).thenReturn(inetSocketAddress);
  141. MembershipEvent membershipEvent = new MembershipEvent(cluster, member, MembershipEvent.MEMBER_ADDED);
  142. connectionManager.memberAdded(membershipEvent);
  143. connectionManager.getClusterMembers().contains(inetSocketAddress);
  144. assertEquals(1, connectionManager.getClusterMembers().size());
  145. assertArrayEquals(new Object[0], lifecycleEvents.toArray());
  146. }
  147. @Test
  148. @Ignore
  149. public void testDifferentMemberAdded() throws Exception {
  150. HazelcastClient client = mock(HazelcastClient.class);
  151. InetSocketAddress inetSocketAddress = new InetSocketAddress("localhost", 5701);
  152. final Connection connection = mock(Connection.class);
  153. final List<LifecycleState> lifecycleEvents = new ArrayList<LifecycleState>();
  154. final LifecycleServiceClientImpl lifecycleService = createLifecycleServiceClientImpl(client, lifecycleEvents);
  155. ClientConfig clientConfig = new ClientConfig();
  156. clientConfig.setCredentials(credentials).addInetSocketAddress(inetSocketAddress).setConnectionTimeout(60000);
  157. ConnectionManager connectionManager = new ConnectionManager(client, clientConfig, lifecycleService) {
  158. protected Connection getNextConnection() {
  159. return connection;
  160. }
  161. };
  162. ClientBinder binder = mock(ClientBinder.class);
  163. connectionManager.setBinder(binder);
  164. Cluster cluster = mock(Cluster.class);
  165. InetSocketAddress inetSocketAddress2 = new InetSocketAddress("hostname", 5702);
  166. Member member = mock(Member.class);
  167. when(member.getInetSocketAddress()).thenReturn(inetSocketAddress2);
  168. MembershipEvent membershipEvent = new MembershipEvent(cluster, member, MembershipEvent.MEMBER_ADDED);
  169. connectionManager.memberAdded(membershipEvent);
  170. connectionManager.getClusterMembers().contains(inetSocketAddress2);
  171. assertEquals(2, connectionManager.getClusterMembers().size());
  172. assertArrayEquals(new Object[0], lifecycleEvents.toArray());
  173. }
  174. @Test
  175. public void testMemberRemoved() throws Exception {
  176. HazelcastClient client = mock(HazelcastClient.class);
  177. InetSocketAddress inetSocketAddress = new InetSocketAddress("localhost", 5701);
  178. final Connection connection = mock(Connection.class);
  179. final List<LifecycleState> lifecycleEvents = new ArrayList<LifecycleState>();
  180. final LifecycleServiceClientImpl lifecycleService = createLifecycleServiceClientImpl(client, lifecycleEvents);
  181. ClientConfig clientConfig = new ClientConfig();
  182. clientConfig.setCredentials(credentials).addInetSocketAddress(inetSocketAddress).setConnectionTimeout(60000);
  183. ConnectionManager connectionManager = new ConnectionManager(client, clientConfig, lifecycleService) {
  184. protected Connection getNextConnection() {
  185. return connection;
  186. }
  187. };
  188. ClientBinder binder = mock(ClientBinder.class);
  189. connectionManager.setBinder(binder);
  190. Cluster cluster = mock(Cluster.class);
  191. Member member = mock(Member.class);
  192. when(member.getInetSocketAddress()).thenReturn(inetSocketAddress);
  193. MembershipEvent membershipEvent = new MembershipEvent(cluster, member, MembershipEvent.MEMBER_REMOVED);
  194. connectionManager.memberRemoved(membershipEvent);
  195. assertEquals(0, connectionManager.getClusterMembers().size());
  196. assertArrayEquals(new Object[0], lifecycleEvents.toArray());
  197. }
  198. @Test
  199. public void testUpdateMembers() throws Exception {
  200. HazelcastClient client = mock(HazelcastClient.class);
  201. Cluster cluster = mock(Cluster.class);
  202. when(client.getCluster()).thenReturn(cluster);
  203. Set<Member> members = new HashSet<Member>();
  204. Member member1 = mock(Member.class);
  205. Member member2 = mock(Member.class);
  206. Member member3 = mock(Member.class);
  207. InetSocketAddress inetSocketAddress1 = new InetSocketAddress("localhost", 9701);
  208. InetSocketAddress inetSocketAddress2 = new InetSocketAddress("localhost", 9702);
  209. InetSocketAddress inetSocketAddress3 = new InetSocketAddress("localhost", 9703);
  210. when(member1.getInetSocketAddress()).thenReturn(inetSocketAddress1);
  211. when(member2.getInetSocketAddress()).thenReturn(inetSocketAddress2);
  212. when(member3.getInetSocketAddress()).thenReturn(inetSocketAddress3);
  213. members.add(member1);
  214. members.add(member2);
  215. members.add(member3);
  216. when(cluster.getMembers()).thenReturn(members);
  217. InetSocketAddress inetSocketAddress = new InetSocketAddress("localhost", 5701);
  218. final Connection connection = mock(Connection.class);
  219. final List<LifecycleState> lifecycleEvents = new ArrayList<LifecycleState>();
  220. final LifecycleServiceClientImpl lifecycleService = createLifecycleServiceClientImpl(client, lifecycleEvents);
  221. ClientConfig clientConfig = new ClientConfig();
  222. clientConfig.setCredentials(credentials).addInetSocketAddress(inetSocketAddress).setConnectionTimeout(60000);
  223. ConnectionManager connectionManager = new ConnectionManager(client, clientConfig, lifecycleService) {
  224. protected Connection getNextConnection() {
  225. return connection;
  226. }
  227. };
  228. ClientBinder binder = mock(ClientBinder.class);
  229. connectionManager.setBinder(binder);
  230. connectionManager.updateMembers();
  231. assertTrue(connectionManager.getClusterMembers().contains(inetSocketAddress1));
  232. assertTrue(connectionManager.getClusterMembers().contains(inetSocketAddress2));
  233. assertTrue(connectionManager.getClusterMembers().contains(inetSocketAddress3));
  234. assertFalse(connectionManager.getClusterMembers().contains(inetSocketAddress));
  235. assertEquals(3, connectionManager.getClusterMembers().size());
  236. assertArrayEquals(new Object[0], lifecycleEvents.toArray());
  237. }
  238. @Test
  239. public void testShouldExecuteOnDisconnect() throws Exception {
  240. HazelcastClient client = mock(HazelcastClient.class);
  241. InetSocketAddress inetSocketAddress = new InetSocketAddress("localhost", 5701);
  242. final Connection connection = mock(Connection.class);
  243. final List<LifecycleState> lifecycleEvents = new ArrayList<LifecycleState>();
  244. final LifecycleServiceClientImpl lifecycleService = createLifecycleServiceClientImpl(client, lifecycleEvents);
  245. ClientConfig clientConfig = new ClientConfig();
  246. clientConfig.setCredentials(credentials).addInetSocketAddress(inetSocketAddress).setConnectionTimeout(60000);
  247. ConnectionManager connectionManager = new ConnectionManager(client, clientConfig, lifecycleService) {
  248. protected Connection getNextConnection() {
  249. return connection;
  250. }
  251. };
  252. assertTrue(connectionManager.shouldExecuteOnDisconnect(connection));
  253. assertFalse(connectionManager.shouldExecuteOnDisconnect(connection));
  254. assertArrayEquals(new Object[0], lifecycleEvents.toArray());
  255. }
  256. }