fix broken ut DUBBO-577
diff --git a/dubbo-cluster/src/test/java/com/alibaba/dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java b/dubbo-cluster/src/test/java/com/alibaba/dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java
index ed3a3ee..c1e6145 100644
--- a/dubbo-cluster/src/test/java/com/alibaba/dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java
+++ b/dubbo-cluster/src/test/java/com/alibaba/dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java
@@ -13,8 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.cluster.support;
-
+package com.alibaba.dubbo.rpc.cluster.support;
+
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -44,362 +44,365 @@
import com.alibaba.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance;
import com.alibaba.dubbo.rpc.cluster.loadbalance.RandomLoadBalance;
import com.alibaba.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance;
-
-/**
- * AbstractClusterInvokerTest
- * @author chao.liuc
- *
- */
-@SuppressWarnings("rawtypes")
-public class AbstractClusterInvokerTest {
- List<Invoker<IHelloService>> invokers = new ArrayList<Invoker<IHelloService>>();
- List<Invoker<IHelloService>> selectedInvokers = new ArrayList<Invoker<IHelloService>>();
- AbstractClusterInvoker<IHelloService> cluster;
+
+/**
+ * AbstractClusterInvokerTest
+ * @author chao.liuc
+ *
+ */
+@SuppressWarnings("rawtypes")
+public class AbstractClusterInvokerTest {
+ List<Invoker<IHelloService>> invokers = new ArrayList<Invoker<IHelloService>>();
+ List<Invoker<IHelloService>> selectedInvokers = new ArrayList<Invoker<IHelloService>>();
+ AbstractClusterInvoker<IHelloService> cluster;
AbstractClusterInvoker<IHelloService> cluster_nocheck;
- Directory<IHelloService> dic ;
+ Directory<IHelloService> dic ;
RpcInvocation invocation = new RpcInvocation();
- URL url = URL.valueOf("registry://localhost:9090");
-
- Invoker<IHelloService> invoker1 ;
- Invoker<IHelloService> invoker2 ;
- Invoker<IHelloService> invoker3 ;
- Invoker<IHelloService> invoker4 ;
+ URL url = URL.valueOf("registry://localhost:9090");
+
+ Invoker<IHelloService> invoker1 ;
+ Invoker<IHelloService> invoker2 ;
+ Invoker<IHelloService> invoker3 ;
+ Invoker<IHelloService> invoker4 ;
Invoker<IHelloService> invoker5 ;
- Invoker<IHelloService> mockedInvoker1 ;
-
-
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- }
- @SuppressWarnings({ "unchecked" })
- @Before
- public void setUp() throws Exception {
+ Invoker<IHelloService> mockedInvoker1 ;
+
+
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ }
+ @SuppressWarnings({ "unchecked" })
+ @Before
+ public void setUp() throws Exception {
invocation.setMethodName("sayHello");
-
- invoker1 = EasyMock.createMock(Invoker.class);
- invoker2 = EasyMock.createMock(Invoker.class);
- invoker3 = EasyMock.createMock(Invoker.class);
- invoker4 = EasyMock.createMock(Invoker.class);
+
+ invoker1 = EasyMock.createMock(Invoker.class);
+ invoker2 = EasyMock.createMock(Invoker.class);
+ invoker3 = EasyMock.createMock(Invoker.class);
+ invoker4 = EasyMock.createMock(Invoker.class);
invoker5 = EasyMock.createMock(Invoker.class);
- mockedInvoker1 = EasyMock.createMock(Invoker.class);
-
- URL turl = URL.valueOf("test://test:11/test");
-
- EasyMock.expect(invoker1.isAvailable()).andReturn(false).anyTimes();
- EasyMock.expect(invoker1.getInterface()).andReturn(IHelloService.class).anyTimes();
- EasyMock.expect(invoker1.getUrl()).andReturn(turl.addParameter("name", "invoker1")).anyTimes();
-
- EasyMock.expect(invoker2.isAvailable()).andReturn(true).anyTimes();
- EasyMock.expect(invoker2.getInterface()).andReturn(IHelloService.class).anyTimes();
- EasyMock.expect(invoker2.getUrl()).andReturn(turl.addParameter("name", "invoker2")).anyTimes();
-
- EasyMock.expect(invoker3.isAvailable()).andReturn(false).anyTimes();
- EasyMock.expect(invoker3.getInterface()).andReturn(IHelloService.class).anyTimes();
- EasyMock.expect(invoker3.getUrl()).andReturn(turl.addParameter("name", "invoker3")).anyTimes();
-
- EasyMock.expect(invoker4.isAvailable()).andReturn(true).anyTimes();
- EasyMock.expect(invoker4.getInterface()).andReturn(IHelloService.class).anyTimes();
- EasyMock.expect(invoker4.getUrl()).andReturn(turl.addParameter("name", "invoker4")).anyTimes();
-
- EasyMock.expect(invoker5.isAvailable()).andReturn(false).anyTimes();
- EasyMock.expect(invoker5.getInterface()).andReturn(IHelloService.class).anyTimes();
+ mockedInvoker1 = EasyMock.createMock(Invoker.class);
+
+ URL turl = URL.valueOf("test://test:11/test");
+
+ EasyMock.expect(invoker1.isAvailable()).andReturn(false).anyTimes();
+ EasyMock.expect(invoker1.getInterface()).andReturn(IHelloService.class).anyTimes();
+ EasyMock.expect(invoker1.getUrl()).andReturn(turl.addParameter("name", "invoker1")).anyTimes();
+
+ EasyMock.expect(invoker2.isAvailable()).andReturn(true).anyTimes();
+ EasyMock.expect(invoker2.getInterface()).andReturn(IHelloService.class).anyTimes();
+ EasyMock.expect(invoker2.getUrl()).andReturn(turl.addParameter("name", "invoker2")).anyTimes();
+
+ EasyMock.expect(invoker3.isAvailable()).andReturn(false).anyTimes();
+ EasyMock.expect(invoker3.getInterface()).andReturn(IHelloService.class).anyTimes();
+ EasyMock.expect(invoker3.getUrl()).andReturn(turl.addParameter("name", "invoker3")).anyTimes();
+
+ EasyMock.expect(invoker4.isAvailable()).andReturn(true).anyTimes();
+ EasyMock.expect(invoker4.getInterface()).andReturn(IHelloService.class).anyTimes();
+ EasyMock.expect(invoker4.getUrl()).andReturn(turl.addParameter("name", "invoker4")).anyTimes();
+
+ EasyMock.expect(invoker5.isAvailable()).andReturn(false).anyTimes();
+ EasyMock.expect(invoker5.getInterface()).andReturn(IHelloService.class).anyTimes();
EasyMock.expect(invoker5.getUrl()).andReturn(turl.addParameter("name", "invoker5")).anyTimes();
EasyMock.expect(mockedInvoker1.isAvailable()).andReturn(false).anyTimes();
EasyMock.expect(mockedInvoker1.getInterface()).andReturn(IHelloService.class).anyTimes();
- EasyMock.expect(mockedInvoker1.getUrl()).andReturn(turl.setProtocol("mock")).anyTimes();
-
- EasyMock.replay(invoker1,invoker2,invoker3,invoker4,invoker5,mockedInvoker1);
+ EasyMock.expect(mockedInvoker1.getUrl()).andReturn(turl.setProtocol("mock")).anyTimes();
+
+ EasyMock.replay(invoker1,invoker2,invoker3,invoker4,invoker5,mockedInvoker1);
invokers.add(invoker1);
dic = new StaticDirectory<IHelloService>(url, invokers, null);
- cluster = new AbstractClusterInvoker(dic) {
- @Override
- protected Result doInvoke(Invocation invocation, List invokers, LoadBalance loadbalance)
- throws RpcException {
- return null;
- }
- };
-
- cluster_nocheck = new AbstractClusterInvoker(dic,url.addParameterIfAbsent(Constants.CLUSTER_AVAILABLE_CHECK_KEY, Boolean.FALSE.toString())) {
- @Override
- protected Result doInvoke(Invocation invocation, List invokers, LoadBalance loadbalance)
- throws RpcException {
- return null;
- }
+ cluster = new AbstractClusterInvoker(dic) {
+ @Override
+ protected Result doInvoke(Invocation invocation, List invokers, LoadBalance loadbalance)
+ throws RpcException {
+ return null;
+ }
};
- }
-
- @Test
- public void testSelect_Invokersize0() throws Exception {
- {
- Invoker invoker = cluster.select(null,null,null,null);
- Assert.assertEquals(null, invoker);
- }
- {
- invokers.clear();
- selectedInvokers.clear();
- Invoker invoker = cluster.select(null,null,invokers,null);
- Assert.assertEquals(null, invoker);
- }
- }
-
- @Test
- public void testSelect_Invokersize1() throws Exception {
- invokers.clear();
- invokers.add(invoker1);
- Invoker invoker = cluster.select(null,null,invokers,null);
- Assert.assertEquals(invoker1, invoker);
- }
-
- @Test
- public void testSelect_Invokersize2AndselectNotNull() throws Exception {
- invokers.clear();
- invokers.add(invoker1);
- invokers.add(invoker2);
- {
- selectedInvokers.clear();
- selectedInvokers.add(invoker1);
- Invoker invoker = cluster.select(null,null,invokers,selectedInvokers);
- Assert.assertEquals(invoker2, invoker);
- }
- {
- selectedInvokers.clear();
- selectedInvokers.add(invoker2);
- Invoker invoker = cluster.select(null,null,invokers,selectedInvokers);
- Assert.assertEquals(invoker1, invoker);
- }
- }
-
- @Test
- public void testSelect_multiInvokers() throws Exception {
- testSelect_multiInvokers( RoundRobinLoadBalance.NAME);
- testSelect_multiInvokers( LeastActiveLoadBalance.NAME);
- testSelect_multiInvokers( RandomLoadBalance.NAME);
- }
-
- @Test
- public void testCloseAvailablecheck(){
- LoadBalance lb = EasyMock.createMock(LoadBalance.class);
- EasyMock.expect(lb.select(invokers, url, invocation)).andReturn(invoker1);
- EasyMock.replay(lb);
- initlistsize5();
-
- Invoker sinvoker = cluster_nocheck.select(lb, invocation, invokers, selectedInvokers);
- Assert.assertEquals(false,sinvoker.isAvailable());
- Assert.assertEquals(invoker1,sinvoker);
-
- }
-
- @Test
- public void testDonotSelectAgainAndNoCheckAvailable(){
-
- LoadBalance lb = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(RoundRobinLoadBalance.NAME);
- initlistsize5();
- {
- //边界测试.
- selectedInvokers.clear();
- selectedInvokers.add(invoker2);
- selectedInvokers.add(invoker3);
- selectedInvokers.add(invoker4);
- selectedInvokers.add(invoker5);
- Invoker sinvoker = cluster_nocheck.select(lb, invocation, invokers, selectedInvokers);
- Assert.assertSame(invoker1, sinvoker);
- }
- {
- //边界测试.
- selectedInvokers.clear();
- selectedInvokers.add(invoker1);
- selectedInvokers.add(invoker3);
- selectedInvokers.add(invoker4);
- selectedInvokers.add(invoker5);
- Invoker sinvoker = cluster_nocheck.select(lb, invocation, invokers, selectedInvokers);
- Assert.assertSame(invoker2, sinvoker);
- }
- {
- //边界测试.
- selectedInvokers.clear();
- selectedInvokers.add(invoker1);
- selectedInvokers.add(invoker2);
- selectedInvokers.add(invoker4);
- selectedInvokers.add(invoker5);
- Invoker sinvoker = cluster_nocheck.select(lb, invocation, invokers, selectedInvokers );
- Assert.assertSame(invoker3, sinvoker);
- }
- {
- //边界测试.
- selectedInvokers.clear();
- selectedInvokers.add(invoker1);
- selectedInvokers.add(invoker2);
- selectedInvokers.add(invoker3);
- selectedInvokers.add(invoker4);
- Invoker sinvoker = cluster_nocheck.select(lb, invocation, invokers, selectedInvokers );
- Assert.assertSame(invoker5, sinvoker);
- }
- {
- //边界测试.
- selectedInvokers.clear();
- selectedInvokers.add(invoker1);
- selectedInvokers.add(invoker2);
- selectedInvokers.add(invoker3);
- selectedInvokers.add(invoker4);
- selectedInvokers.add(invoker5);
- Invoker sinvoker = cluster_nocheck.select(lb, invocation, invokers, selectedInvokers);
- Assert.assertTrue(invokers.contains(sinvoker));
- }
-
- }
-
- @Test
- public void testSelectAgainAndCheckAvailable(){
-
- LoadBalance lb = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(RoundRobinLoadBalance.NAME);
- initlistsize5();
- {
- //边界测试.
- selectedInvokers.clear();
- selectedInvokers.add(invoker1);
- selectedInvokers.add(invoker2);
- selectedInvokers.add(invoker3);
- selectedInvokers.add(invoker5);
- Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
- Assert.assertTrue(sinvoker == invoker4 );
- }
- {
- //边界测试.
- selectedInvokers.clear();
- selectedInvokers.add(invoker2);
- selectedInvokers.add(invoker3);
- selectedInvokers.add(invoker4);
- selectedInvokers.add(invoker5);
- Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
- Assert.assertTrue(sinvoker == invoker2 || sinvoker == invoker4);
- }
- {
- //边界测试.
- for(int i=0;i<100;i++){
- selectedInvokers.clear();
- Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
- Assert.assertTrue(sinvoker == invoker2 || sinvoker == invoker4);
- }
- }
- {
- //边界测试.
- for(int i=0;i<100;i++){
- selectedInvokers.clear();
- selectedInvokers.add(invoker1);
- selectedInvokers.add(invoker3);
- selectedInvokers.add(invoker5);
- Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
- Assert.assertTrue(sinvoker == invoker2 || sinvoker == invoker4);
- }
- }
- {
- //边界测试.
- for(int i=0;i<100;i++){
- selectedInvokers.clear();
- selectedInvokers.add(invoker1);
- selectedInvokers.add(invoker3);
- selectedInvokers.add(invoker2);
- selectedInvokers.add(invoker4);
- selectedInvokers.add(invoker5);
- Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
- Assert.assertTrue(sinvoker == invoker2 || sinvoker == invoker4);
- }
- }
- }
-
-
- public void testSelect_multiInvokers(String lbname) throws Exception {
-
- int min=1000,max=5000;
- Double d = (Math.random()*(max-min+1)+min);
- int runs = d.intValue();
- Assert.assertTrue(runs>min);
- LoadBalance lb = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(lbname);
- initlistsize5();
- for(int i=0;i<runs;i++){
- Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
- Assert.assertEquals(true,sinvoker.isAvailable());
- }
- for(int i=0;i<runs;i++){
- selectedInvokers.clear();
- selectedInvokers.add(invoker1);
- Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
- Assert.assertEquals(true,sinvoker.isAvailable());
- }
- for(int i=0;i<runs;i++){
- selectedInvokers.clear();
- selectedInvokers.add(invoker2);
- Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
- Assert.assertEquals(true,sinvoker.isAvailable());
- }
- for(int i=0;i<runs;i++){
- selectedInvokers.clear();
- selectedInvokers.add(invoker2);
- selectedInvokers.add(invoker4);
- Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
- Assert.assertEquals(true,sinvoker.isAvailable());
- }
- for(int i=0;i<runs;i++){
- selectedInvokers.clear();
- selectedInvokers.add(invoker1);
- selectedInvokers.add(invoker3);
- selectedInvokers.add(invoker5);
- Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
- Assert.assertEquals(true,sinvoker.isAvailable());
- }
- for(int i=0;i<runs;i++){
- selectedInvokers.clear();
- selectedInvokers.add(invoker1);
- selectedInvokers.add(invoker2);
- selectedInvokers.add(invoker3);
- Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
- Assert.assertEquals(true,sinvoker.isAvailable());
- }
- }
-
- /**
- * 测试均衡.
- */
- @Test
- public void testSelectBalance(){
-
- LoadBalance lb = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(RoundRobinLoadBalance.NAME);
- initlistsize5();
-
- Map<Invoker,AtomicLong> counter = new ConcurrentHashMap<Invoker,AtomicLong>();
- for(Invoker invoker :invokers){
- counter.put(invoker, new AtomicLong(0));
- }
- int runs = 1000;
- for(int i=0;i<runs;i++){
- selectedInvokers.clear();
- Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
- counter.get(sinvoker).incrementAndGet();
- }
-
- for (Invoker minvoker :counter.keySet() ){
- Long count = counter.get(minvoker).get();
-// System.out.println(count);
- if(minvoker.isAvailable())
- Assert.assertTrue("count should > avg", count>runs/invokers.size());
- }
-
- Assert.assertEquals(runs, counter.get(invoker2).get()+counter.get(invoker4).get());;
-
- }
-
- private void initlistsize5(){
- invokers.clear();
- selectedInvokers.clear();//需要清除,之前的测试中会主动将正确的invoker2放入其中.
- invokers.add(invoker1);
- invokers.add(invoker2);
- invokers.add(invoker3);
- invokers.add(invoker4);
+ cluster_nocheck = new AbstractClusterInvoker(dic,url.addParameterIfAbsent(Constants.CLUSTER_AVAILABLE_CHECK_KEY, Boolean.FALSE.toString())) {
+ @Override
+ protected Result doInvoke(Invocation invocation, List invokers, LoadBalance loadbalance)
+ throws RpcException {
+ return null;
+ }
+ };
+
+ }
+
+ @Test
+ public void testSelect_Invokersize0() throws Exception {
+ {
+ Invoker invoker = cluster.select(null,null,null,null);
+ Assert.assertEquals(null, invoker);
+ }
+ {
+ invokers.clear();
+ selectedInvokers.clear();
+ Invoker invoker = cluster.select(null,null,invokers,null);
+ Assert.assertEquals(null, invoker);
+ }
+ }
+
+ @Test
+ public void testSelect_Invokersize1() throws Exception {
+ invokers.clear();
+ invokers.add(invoker1);
+ Invoker invoker = cluster.select(null,null,invokers,null);
+ Assert.assertEquals(invoker1, invoker);
+ }
+
+ @Test
+ public void testSelect_Invokersize2AndselectNotNull() throws Exception {
+ invokers.clear();
+ invokers.add(invoker1);
+ invokers.add(invoker2);
+ {
+ selectedInvokers.clear();
+ selectedInvokers.add(invoker1);
+ Invoker invoker = cluster.select(null,null,invokers,selectedInvokers);
+ Assert.assertEquals(invoker2, invoker);
+ }
+ {
+ selectedInvokers.clear();
+ selectedInvokers.add(invoker2);
+ Invoker invoker = cluster.select(null,null,invokers,selectedInvokers);
+ Assert.assertEquals(invoker1, invoker);
+ }
+ }
+
+ @Test
+ public void testSelect_multiInvokers() throws Exception {
+ testSelect_multiInvokers( RoundRobinLoadBalance.NAME);
+ testSelect_multiInvokers( LeastActiveLoadBalance.NAME);
+ testSelect_multiInvokers( RandomLoadBalance.NAME);
+ }
+
+ @Test
+ public void testCloseAvailablecheck(){
+ LoadBalance lb = EasyMock.createMock(LoadBalance.class);
+ EasyMock.expect(lb.select(
+ EasyMock.same(invokers),
+ (URL)EasyMock.anyObject(),
+ EasyMock.same(invocation))).andReturn(invoker1);
+ EasyMock.replay(lb);
+ initlistsize5();
+
+ Invoker sinvoker = cluster_nocheck.select(lb, invocation, invokers, selectedInvokers);
+ Assert.assertEquals(false,sinvoker.isAvailable());
+ Assert.assertEquals(invoker1,sinvoker);
+
+ }
+
+ @Test
+ public void testDonotSelectAgainAndNoCheckAvailable(){
+
+ LoadBalance lb = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(RoundRobinLoadBalance.NAME);
+ initlistsize5();
+ {
+ //边界测试.
+ selectedInvokers.clear();
+ selectedInvokers.add(invoker2);
+ selectedInvokers.add(invoker3);
+ selectedInvokers.add(invoker4);
+ selectedInvokers.add(invoker5);
+ Invoker sinvoker = cluster_nocheck.select(lb, invocation, invokers, selectedInvokers);
+ Assert.assertSame(invoker1, sinvoker);
+ }
+ {
+ //边界测试.
+ selectedInvokers.clear();
+ selectedInvokers.add(invoker1);
+ selectedInvokers.add(invoker3);
+ selectedInvokers.add(invoker4);
+ selectedInvokers.add(invoker5);
+ Invoker sinvoker = cluster_nocheck.select(lb, invocation, invokers, selectedInvokers);
+ Assert.assertSame(invoker2, sinvoker);
+ }
+ {
+ //边界测试.
+ selectedInvokers.clear();
+ selectedInvokers.add(invoker1);
+ selectedInvokers.add(invoker2);
+ selectedInvokers.add(invoker4);
+ selectedInvokers.add(invoker5);
+ Invoker sinvoker = cluster_nocheck.select(lb, invocation, invokers, selectedInvokers );
+ Assert.assertSame(invoker3, sinvoker);
+ }
+ {
+ //边界测试.
+ selectedInvokers.clear();
+ selectedInvokers.add(invoker1);
+ selectedInvokers.add(invoker2);
+ selectedInvokers.add(invoker3);
+ selectedInvokers.add(invoker4);
+ Invoker sinvoker = cluster_nocheck.select(lb, invocation, invokers, selectedInvokers );
+ Assert.assertSame(invoker5, sinvoker);
+ }
+ {
+ //边界测试.
+ selectedInvokers.clear();
+ selectedInvokers.add(invoker1);
+ selectedInvokers.add(invoker2);
+ selectedInvokers.add(invoker3);
+ selectedInvokers.add(invoker4);
+ selectedInvokers.add(invoker5);
+ Invoker sinvoker = cluster_nocheck.select(lb, invocation, invokers, selectedInvokers);
+ Assert.assertTrue(invokers.contains(sinvoker));
+ }
+
+ }
+
+ @Test
+ public void testSelectAgainAndCheckAvailable(){
+
+ LoadBalance lb = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(RoundRobinLoadBalance.NAME);
+ initlistsize5();
+ {
+ //边界测试.
+ selectedInvokers.clear();
+ selectedInvokers.add(invoker1);
+ selectedInvokers.add(invoker2);
+ selectedInvokers.add(invoker3);
+ selectedInvokers.add(invoker5);
+ Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
+ Assert.assertTrue(sinvoker == invoker4 );
+ }
+ {
+ //边界测试.
+ selectedInvokers.clear();
+ selectedInvokers.add(invoker2);
+ selectedInvokers.add(invoker3);
+ selectedInvokers.add(invoker4);
+ selectedInvokers.add(invoker5);
+ Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
+ Assert.assertTrue(sinvoker == invoker2 || sinvoker == invoker4);
+ }
+ {
+ //边界测试.
+ for(int i=0;i<100;i++){
+ selectedInvokers.clear();
+ Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
+ Assert.assertTrue(sinvoker == invoker2 || sinvoker == invoker4);
+ }
+ }
+ {
+ //边界测试.
+ for(int i=0;i<100;i++){
+ selectedInvokers.clear();
+ selectedInvokers.add(invoker1);
+ selectedInvokers.add(invoker3);
+ selectedInvokers.add(invoker5);
+ Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
+ Assert.assertTrue(sinvoker == invoker2 || sinvoker == invoker4);
+ }
+ }
+ {
+ //边界测试.
+ for(int i=0;i<100;i++){
+ selectedInvokers.clear();
+ selectedInvokers.add(invoker1);
+ selectedInvokers.add(invoker3);
+ selectedInvokers.add(invoker2);
+ selectedInvokers.add(invoker4);
+ selectedInvokers.add(invoker5);
+ Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
+ Assert.assertTrue(sinvoker == invoker2 || sinvoker == invoker4);
+ }
+ }
+ }
+
+
+ public void testSelect_multiInvokers(String lbname) throws Exception {
+
+ int min=1000,max=5000;
+ Double d = (Math.random()*(max-min+1)+min);
+ int runs = d.intValue();
+ Assert.assertTrue(runs>min);
+ LoadBalance lb = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(lbname);
+ initlistsize5();
+ for(int i=0;i<runs;i++){
+ Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
+ Assert.assertEquals(true,sinvoker.isAvailable());
+ }
+ for(int i=0;i<runs;i++){
+ selectedInvokers.clear();
+ selectedInvokers.add(invoker1);
+ Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
+ Assert.assertEquals(true,sinvoker.isAvailable());
+ }
+ for(int i=0;i<runs;i++){
+ selectedInvokers.clear();
+ selectedInvokers.add(invoker2);
+ Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
+ Assert.assertEquals(true,sinvoker.isAvailable());
+ }
+ for(int i=0;i<runs;i++){
+ selectedInvokers.clear();
+ selectedInvokers.add(invoker2);
+ selectedInvokers.add(invoker4);
+ Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
+ Assert.assertEquals(true,sinvoker.isAvailable());
+ }
+ for(int i=0;i<runs;i++){
+ selectedInvokers.clear();
+ selectedInvokers.add(invoker1);
+ selectedInvokers.add(invoker3);
+ selectedInvokers.add(invoker5);
+ Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
+ Assert.assertEquals(true,sinvoker.isAvailable());
+ }
+ for(int i=0;i<runs;i++){
+ selectedInvokers.clear();
+ selectedInvokers.add(invoker1);
+ selectedInvokers.add(invoker2);
+ selectedInvokers.add(invoker3);
+ Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
+ Assert.assertEquals(true,sinvoker.isAvailable());
+ }
+ }
+
+ /**
+ * 测试均衡.
+ */
+ @Test
+ public void testSelectBalance(){
+
+ LoadBalance lb = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(RoundRobinLoadBalance.NAME);
+ initlistsize5();
+
+ Map<Invoker,AtomicLong> counter = new ConcurrentHashMap<Invoker,AtomicLong>();
+ for(Invoker invoker :invokers){
+ counter.put(invoker, new AtomicLong(0));
+ }
+ int runs = 1000;
+ for(int i=0;i<runs;i++){
+ selectedInvokers.clear();
+ Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers);
+ counter.get(sinvoker).incrementAndGet();
+ }
+
+ for (Invoker minvoker :counter.keySet() ){
+ Long count = counter.get(minvoker).get();
+// System.out.println(count);
+ if(minvoker.isAvailable())
+ Assert.assertTrue("count should > avg", count>runs/invokers.size());
+ }
+
+ Assert.assertEquals(runs, counter.get(invoker2).get()+counter.get(invoker4).get());;
+
+ }
+
+ private void initlistsize5(){
+ invokers.clear();
+ selectedInvokers.clear();//需要清除,之前的测试中会主动将正确的invoker2放入其中.
+ invokers.add(invoker1);
+ invokers.add(invoker2);
+ invokers.add(invoker3);
+ invokers.add(invoker4);
invokers.add(invoker5);
- }
+ }
@Test()
public void testTimeoutExceptionCode() {
List<Invoker<DemoService>> invokers = new ArrayList<Invoker<DemoService>>();