|
|
@@ -0,0 +1,102 @@ |
|
|
|
package com.alibaba.csp.sentinel.cluster.server.connection; |
|
|
|
|
|
|
|
import java.util.List; |
|
|
|
import java.util.concurrent.CopyOnWriteArrayList; |
|
|
|
import java.util.concurrent.CountDownLatch; |
|
|
|
|
|
|
|
import org.junit.After; |
|
|
|
import org.junit.Before; |
|
|
|
import org.junit.Test; |
|
|
|
|
|
|
|
import static org.junit.Assert.*; |
|
|
|
|
|
|
|
/** |
|
|
|
* @author Eric Zhao |
|
|
|
*/ |
|
|
|
public class ConnectionManagerTest { |
|
|
|
|
|
|
|
@Before |
|
|
|
public void setUp() { |
|
|
|
ConnectionManager.clear(); |
|
|
|
} |
|
|
|
|
|
|
|
@After |
|
|
|
public void cleanUp() { |
|
|
|
ConnectionManager.clear(); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testAndConnectionAndGetConnectedCount() { |
|
|
|
String namespace = "test-namespace"; |
|
|
|
assertEquals(0, ConnectionManager.getConnectedCount(namespace)); |
|
|
|
|
|
|
|
// Put one connection. |
|
|
|
ConnectionManager.addConnection(namespace, "12.23.34.45:1997"); |
|
|
|
assertEquals(1, ConnectionManager.getConnectedCount(namespace)); |
|
|
|
// Put duplicate connection. |
|
|
|
ConnectionManager.addConnection(namespace, "12.23.34.45:1997"); |
|
|
|
assertEquals(1, ConnectionManager.getConnectedCount(namespace)); |
|
|
|
|
|
|
|
// Put another connection. |
|
|
|
ConnectionManager.addConnection(namespace, "12.23.34.49:22123"); |
|
|
|
assertEquals(2, ConnectionManager.getConnectedCount(namespace)); |
|
|
|
} |
|
|
|
|
|
|
|
@Test(expected = IllegalArgumentException.class) |
|
|
|
public void testGetOrCreateGroupBadNamespace() { |
|
|
|
ConnectionManager.getOrCreateGroup(""); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testGetOrCreateGroupMultipleThread() throws Exception { |
|
|
|
final String namespace = "test-namespace"; |
|
|
|
int threadCount = 32; |
|
|
|
final List<ConnectionGroup> groups = new CopyOnWriteArrayList<>(); |
|
|
|
final CountDownLatch latch = new CountDownLatch(threadCount); |
|
|
|
for (int i = 0; i < threadCount; i++) { |
|
|
|
new Thread(new Runnable() { |
|
|
|
@Override |
|
|
|
public void run() { |
|
|
|
groups.add(ConnectionManager.getOrCreateGroup(namespace)); |
|
|
|
latch.countDown(); |
|
|
|
} |
|
|
|
}).start(); |
|
|
|
} |
|
|
|
latch.await(); |
|
|
|
for (int i = 1; i < groups.size(); i++) { |
|
|
|
assertSame(groups.get(i - 1).getNamespace(), groups.get(i).getNamespace()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testRemoveConnection() { |
|
|
|
String namespace = "test-namespace-remove"; |
|
|
|
String address1 = "12.23.34.45:1997"; |
|
|
|
String address2 = "12.23.34.46:1998"; |
|
|
|
String address3 = "12.23.34.47:1999"; |
|
|
|
ConnectionManager.addConnection(namespace, address1); |
|
|
|
ConnectionManager.addConnection(namespace, address2); |
|
|
|
ConnectionManager.addConnection(namespace, address3); |
|
|
|
|
|
|
|
assertEquals(3, ConnectionManager.getConnectedCount(namespace)); |
|
|
|
ConnectionManager.removeConnection(namespace, address3); |
|
|
|
assertEquals(2, ConnectionManager.getConnectedCount(namespace)); |
|
|
|
assertFalse(ConnectionManager.getOrCreateConnectionGroup(namespace).getConnectionSet().contains( |
|
|
|
new ConnectionDescriptor().setAddress(address3) |
|
|
|
)); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testGetOrCreateConnectionGroup() { |
|
|
|
String namespace = "test-namespace"; |
|
|
|
assertNull(ConnectionManager.getConnectionGroup(namespace)); |
|
|
|
ConnectionGroup group1 = ConnectionManager.getOrCreateConnectionGroup(namespace); |
|
|
|
assertNotNull(group1); |
|
|
|
|
|
|
|
// Put one connection. |
|
|
|
ConnectionManager.addConnection(namespace, "12.23.34.45:1997"); |
|
|
|
ConnectionGroup group2 = ConnectionManager.getOrCreateConnectionGroup(namespace); |
|
|
|
|
|
|
|
assertSame(group1, group2); |
|
|
|
} |
|
|
|
} |