directory notify中多加几个test case git-svn-id: http://code.alibabatech.com/svn/dubbo/trunk@154 1a56cb94-b969-4eaa-88fa-be21384802f2
This commit is contained in:
parent
6ce8ad20ab
commit
96aee0c65c
|
|
@ -21,20 +21,23 @@ import java.lang.reflect.Field;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
|
||||
import javax.script.ScriptEngineManager;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.alibaba.dubbo.common.Constants;
|
||||
import com.alibaba.dubbo.common.ExtensionLoader;
|
||||
import com.alibaba.dubbo.common.URL;
|
||||
import com.alibaba.dubbo.common.utils.NetUtils;
|
||||
import com.alibaba.dubbo.registry.NotifyListener;
|
||||
import com.alibaba.dubbo.registry.Registry;
|
||||
import com.alibaba.dubbo.registry.RegistryFactory;
|
||||
import com.alibaba.dubbo.registry.support.RegistryDirectory;
|
||||
import com.alibaba.dubbo.registry.support.SimpleRegistryExporter;
|
||||
import com.alibaba.dubbo.rpc.Invoker;
|
||||
import com.alibaba.dubbo.rpc.Protocol;
|
||||
import com.alibaba.dubbo.rpc.RpcConstants;
|
||||
|
|
@ -50,46 +53,49 @@ import com.alibaba.dubbo.rpc.cluster.router.ScriptRouterFactory;
|
|||
public class RegistryDirectoryTest {
|
||||
RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
|
||||
Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();
|
||||
|
||||
static {
|
||||
SimpleRegistryExporter.exportIfAbsent(9090);
|
||||
SimpleRegistryExporter.exportIfAbsent(9091);
|
||||
SimpleRegistryExporter.exportIfAbsent(9092);
|
||||
SimpleRegistryExporter.exportIfAbsent(9093);
|
||||
}
|
||||
private static String service = DemoService.class.getName();
|
||||
String service = DemoService.class.getName();
|
||||
RpcInvocation invocation = new RpcInvocation();
|
||||
URL url = REGURL.addParameter("test", "reg");
|
||||
URL url2 = REGURL.addParameter("test", "reg").addParameterAndEncoded(RpcConstants.REFER_KEY,
|
||||
"key=query&" + Constants.LOADBALANCE_KEY + "=" + LeastActiveLoadBalance.NAME);
|
||||
public static URL REGURL= URL.valueOf("dubbo://"+NetUtils.getLocalHost()+":9090/"+service);
|
||||
public static URL SERVICEURL= URL.valueOf("dubbo://"+NetUtils.getLocalHost()+":9091/"+service);
|
||||
public static URL SERVICEURL2= URL.valueOf("dubbo://"+NetUtils.getLocalHost()+":9092/"+service);
|
||||
public static URL SERVICEURL3= URL.valueOf("dubbo://"+NetUtils.getLocalHost()+":9093/"+service);
|
||||
public static URL SERVICEURL_DUBBO_NOPATH= URL.valueOf("dubbo://"+NetUtils.getLocalHost()+":9092");
|
||||
|
||||
RegistryDirectory<RegistryDirectoryTest> registryDirectory = new RegistryDirectory(RegistryDirectoryTest.class, url);
|
||||
{
|
||||
registryDirectory.setRegistry(registryFactory.getRegistry(url));
|
||||
registryDirectory.setProtocol(protocol);
|
||||
|
||||
URL noMeaningUrl = URL.valueOf("notsupport:/"+service);
|
||||
URL SERVICEURL= URL.valueOf("dubbo://127.0.0.1:9091/"+service+"?lazy=true");
|
||||
URL SERVICEURL2= URL.valueOf("dubbo://127.0.0.1:9092/"+service+"?lazy=true");
|
||||
URL SERVICEURL3= URL.valueOf("dubbo://127.0.0.1:9093/"+service+"?lazy=true");
|
||||
URL SERVICEURL_DUBBO_NOPATH= URL.valueOf("dubbo://127.0.0.1:9092"+"?lazy=true");
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
}
|
||||
|
||||
private RegistryDirectory getRegistryDirectory (URL url){
|
||||
RegistryDirectory registryDirectory = new RegistryDirectory(URL.class, url);
|
||||
registryDirectory.setProtocol(protocol);
|
||||
//asert empty
|
||||
List invokers = registryDirectory.list(invocation);
|
||||
Assert.assertEquals(0,invokers.size());
|
||||
Assert.assertEquals(false, registryDirectory.isAvailable());
|
||||
return registryDirectory;
|
||||
}
|
||||
private RegistryDirectory getRegistryDirectory (){
|
||||
return getRegistryDirectory(noMeaningUrl);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_Constructor_WithErrorParam(){
|
||||
try{
|
||||
new RegistryDirectory(null, null);
|
||||
fail();
|
||||
fail();
|
||||
}catch (IllegalArgumentException e) {
|
||||
|
||||
}
|
||||
try{
|
||||
new RegistryDirectory(null, url2);
|
||||
fail();
|
||||
//null url
|
||||
new RegistryDirectory(null, noMeaningUrl);
|
||||
fail();
|
||||
}catch (IllegalArgumentException e) {
|
||||
|
||||
}
|
||||
try{
|
||||
//no servicekey
|
||||
new RegistryDirectory(RegistryDirectoryTest.class, URL.valueOf("dubbo://10.20.30.40:9090"));
|
||||
fail();
|
||||
}catch (IllegalArgumentException e) {
|
||||
|
|
@ -98,8 +104,8 @@ public class RegistryDirectoryTest {
|
|||
}
|
||||
@Test
|
||||
public void test_Constructor_CheckStatus() throws Exception{
|
||||
URL url = URL.valueOf("registry://10.20.30.40/"+service+"?a=b").addParameterAndEncoded(RpcConstants.REFER_KEY, "foo=bar");
|
||||
RegistryDirectory<RegistryDirectoryTest> reg = new RegistryDirectory(RegistryDirectoryTest.class, url);
|
||||
URL url = URL.valueOf("notsupported://10.20.30.40/"+service+"?a=b").addParameterAndEncoded(RpcConstants.REFER_KEY, "foo=bar");
|
||||
RegistryDirectory reg = getRegistryDirectory(url);
|
||||
Field field = reg.getClass().getDeclaredField("queryMap");
|
||||
field.setAccessible(true);
|
||||
Map<String, String> queryMap = (Map<String, String>)field.get(reg);
|
||||
|
|
@ -109,20 +115,44 @@ public class RegistryDirectoryTest {
|
|||
|
||||
@Test
|
||||
public void testNotified_Normal() {
|
||||
List invokers = registryDirectory.list(invocation);
|
||||
Assert.assertEquals(0,invokers.size());
|
||||
Assert.assertEquals(false, registryDirectory.isAvailable());
|
||||
|
||||
test_Notified2invokers();
|
||||
test_Notified1invokers();
|
||||
test_Notified3invokers();
|
||||
testforbid();
|
||||
RegistryDirectory registryDirectory = getRegistryDirectory();
|
||||
test_Notified2invokers(registryDirectory);
|
||||
test_Notified1invokers(registryDirectory);
|
||||
test_Notified3invokers(registryDirectory);
|
||||
testforbid(registryDirectory);
|
||||
}
|
||||
@Test
|
||||
@Ignore //FIXME
|
||||
public void testNotified_CloseAutoDestroy() {
|
||||
RegistryDirectory registryDirectory = getRegistryDirectory();
|
||||
List<URL> serviceUrls = new ArrayList<URL> ();
|
||||
serviceUrls.add(SERVICEURL);
|
||||
serviceUrls.add(SERVICEURL2);
|
||||
registryDirectory.notify(serviceUrls);
|
||||
invocation = new RpcInvocation();
|
||||
|
||||
List<Invoker> invokers = registryDirectory.list(invocation);
|
||||
Assert.assertEquals(true,invokers.get(0).isAvailable());
|
||||
Assert.assertEquals(true,invokers.get(1).isAvailable());
|
||||
|
||||
serviceUrls = new ArrayList<URL> ();
|
||||
serviceUrls.add(SERVICEURL2.addParameter(RpcConstants.REFER_AUTODESTROY_KEY, false));
|
||||
registryDirectory.notify(serviceUrls);
|
||||
Assert.assertEquals(true,invokers.get(0).isAvailable());
|
||||
Assert.assertEquals(true,invokers.get(1).isAvailable());
|
||||
|
||||
serviceUrls = new ArrayList<URL> ();
|
||||
serviceUrls.add(SERVICEURL2);
|
||||
registryDirectory.notify(serviceUrls);
|
||||
Assert.assertEquals(false,invokers.get(0).isAvailable());
|
||||
Assert.assertEquals(true,invokers.get(1).isAvailable());
|
||||
}
|
||||
@Test
|
||||
public void testNotified_WithError() {
|
||||
RegistryDirectory registryDirectory = getRegistryDirectory();
|
||||
List<URL> serviceUrls = new ArrayList<URL> ();
|
||||
//ignore error log
|
||||
URL badurl = URL.valueOf("notsupported://"+NetUtils.getLocalHost()+"/"+service);
|
||||
URL badurl = URL.valueOf("notsupported://127.0.0.1/"+service);
|
||||
serviceUrls.add(badurl);
|
||||
serviceUrls.add(SERVICEURL);
|
||||
|
||||
|
|
@ -139,15 +169,14 @@ public class RegistryDirectoryTest {
|
|||
serviceUrls.add(SERVICEURL);
|
||||
serviceUrls.add(SERVICEURL);
|
||||
|
||||
RegistryDirectory registryDirectory = getRegistryDirectory();
|
||||
registryDirectory.notify(serviceUrls);
|
||||
List invokers = registryDirectory.list(invocation);
|
||||
Assert.assertEquals(1, invokers.size());
|
||||
|
||||
}
|
||||
|
||||
|
||||
//forbid
|
||||
private void testforbid(){
|
||||
private void testforbid(RegistryDirectory registryDirectory){
|
||||
invocation = new RpcInvocation();
|
||||
List<URL> serviceUrls = new ArrayList<URL> ();
|
||||
registryDirectory.notify(serviceUrls);
|
||||
|
|
@ -161,7 +190,7 @@ public class RegistryDirectoryTest {
|
|||
}
|
||||
|
||||
//notify one invoker
|
||||
private void test_Notified1invokers(){
|
||||
private void test_Notified1invokers(RegistryDirectory registryDirectory){
|
||||
|
||||
List<URL> serviceUrls = new ArrayList<URL> ();
|
||||
serviceUrls.add(SERVICEURL.addParameter("methods", "getXXX1"));//.addParameter("refer.autodestroy", "true")
|
||||
|
|
@ -187,7 +216,7 @@ public class RegistryDirectoryTest {
|
|||
}
|
||||
|
||||
//两个invoker===================================
|
||||
private void test_Notified2invokers(){
|
||||
private void test_Notified2invokers(RegistryDirectory registryDirectory){
|
||||
List<URL> serviceUrls = new ArrayList<URL> ();
|
||||
serviceUrls.add(SERVICEURL.addParameter("methods", "getXXX1"));
|
||||
serviceUrls.add(SERVICEURL2.addParameter("methods", "getXXX1,getXXX2"));
|
||||
|
|
@ -216,7 +245,7 @@ public class RegistryDirectoryTest {
|
|||
}
|
||||
|
||||
//通知成3个invoker===================================
|
||||
private void test_Notified3invokers(){
|
||||
private void test_Notified3invokers(RegistryDirectory registryDirectory){
|
||||
List<URL> serviceUrls = new ArrayList<URL> ();
|
||||
serviceUrls.add(SERVICEURL.addParameter("methods", "getXXX1"));
|
||||
serviceUrls.add(SERVICEURL2.addParameter("methods", "getXXX1,getXXX2"));
|
||||
|
|
@ -250,12 +279,12 @@ public class RegistryDirectoryTest {
|
|||
|
||||
@Test
|
||||
public void testParametersMerge(){
|
||||
|
||||
RegistryDirectory<RegistryDirectoryTest> registryDirectory2 = new RegistryDirectory(RegistryDirectoryTest.class, url2);
|
||||
{
|
||||
registryDirectory2.setRegistry(registryFactory.getRegistry(url2));
|
||||
RegistryDirectory registryDirectory = getRegistryDirectory();
|
||||
URL regurl= noMeaningUrl
|
||||
.addParameter("test", "reg")
|
||||
.addParameterAndEncoded(RpcConstants.REFER_KEY,"key=query&" + Constants.LOADBALANCE_KEY + "=" + LeastActiveLoadBalance.NAME);
|
||||
RegistryDirectory<RegistryDirectoryTest> registryDirectory2 = new RegistryDirectory(RegistryDirectoryTest.class, regurl);
|
||||
registryDirectory2.setProtocol(protocol);
|
||||
}
|
||||
|
||||
List<URL> serviceUrls = new ArrayList<URL> ();
|
||||
//检验注册中心的参数需要被清除
|
||||
|
|
@ -331,16 +360,25 @@ public class RegistryDirectoryTest {
|
|||
* 2. destroy all invokers
|
||||
*/
|
||||
@Test
|
||||
public void testDestroy(){
|
||||
public void testDestroy(){
|
||||
RegistryDirectory registryDirectory = getRegistryDirectory();
|
||||
|
||||
List<URL> serviceUrls = new ArrayList<URL> ();
|
||||
serviceUrls.add(SERVICEURL.addParameter("methods", "getXXX1"));
|
||||
serviceUrls.add(SERVICEURL2.addParameter("methods", "getXXX1,getXXX2"));
|
||||
serviceUrls.add(SERVICEURL3.addParameter("methods", "getXXX1,getXXX2,getXXX3"));
|
||||
|
||||
registryDirectory.notify(serviceUrls);
|
||||
registryDirectory.notify(serviceUrls);
|
||||
List<Invoker> invokers = registryDirectory.list(invocation);
|
||||
Assert.assertEquals(true, registryDirectory.isAvailable());
|
||||
Assert.assertEquals(true, invokers.get(0).isAvailable());
|
||||
|
||||
registryDirectory.destroy();
|
||||
Assert.assertEquals(false, registryDirectory.isAvailable());
|
||||
registryDirectory.destroy();
|
||||
Assert.assertEquals(false, invokers.get(0).isAvailable());
|
||||
|
||||
registryDirectory.destroy();
|
||||
|
||||
Map<String, List<Invoker<RegistryDirectoryTest>>> methodInvokerMap = registryDirectory.getMethodInvokerMap();
|
||||
Map<String, Invoker<RegistryDirectoryTest>> urlInvokerMap = registryDirectory.getUrlInvokerMap();
|
||||
|
||||
|
|
@ -360,9 +398,12 @@ public class RegistryDirectoryTest {
|
|||
|
||||
@Test
|
||||
public void testDubbo1UrlWithGenericInvocation(){
|
||||
|
||||
RegistryDirectory registryDirectory = getRegistryDirectory();
|
||||
|
||||
List<URL> serviceUrls = new ArrayList<URL> ();
|
||||
serviceUrls.add(SERVICEURL_DUBBO_NOPATH.addParameter("methods", "getXXX1,getXXX2,getXXX3"));
|
||||
List<URL> serviceUrls = new ArrayList<URL> ();
|
||||
URL serviceURL = SERVICEURL_DUBBO_NOPATH.addParameter("methods", "getXXX1,getXXX2,getXXX3");
|
||||
serviceUrls.add(serviceURL);
|
||||
|
||||
registryDirectory.notify(serviceUrls);
|
||||
|
||||
|
|
@ -371,10 +412,10 @@ public class RegistryDirectoryTest {
|
|||
new Class[]{String.class, String[].class, Object[].class},
|
||||
new Object[]{"getXXX1", "", new Object[]{}});
|
||||
|
||||
List invokers = registryDirectory.list(invocation);
|
||||
List<Invoker> invokers = registryDirectory.list(invocation);
|
||||
|
||||
Assert.assertEquals(1, invokers.size());
|
||||
Assert.assertEquals("dubbo://"+NetUtils.getLocalHost()+":9092/"+service+"?check=false&methods=getXXX1,getXXX2,getXXX3", invokers.get(0).toString());
|
||||
Assert.assertEquals(1, invokers.size());
|
||||
Assert.assertEquals(serviceURL.setPath(service), invokers.get(0).getUrl());
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -387,7 +428,8 @@ public class RegistryDirectoryTest {
|
|||
* can do parameter-value-based routing.
|
||||
*/
|
||||
@Test
|
||||
public void testParmeterRoute(){
|
||||
public void testParmeterRoute(){
|
||||
RegistryDirectory registryDirectory = getRegistryDirectory();
|
||||
List<URL> serviceUrls = new ArrayList<URL> ();
|
||||
serviceUrls.add(SERVICEURL.addParameter("methods", "getXXX1.napoli"));
|
||||
serviceUrls.add(SERVICEURL2.addParameter("methods", "getXXX1.MORGAN,getXXX2"));
|
||||
|
|
@ -407,7 +449,8 @@ public class RegistryDirectoryTest {
|
|||
* Empty notify cause forbidden, non-empty notify cancels forbidden state
|
||||
*/
|
||||
@Test
|
||||
public void testEmptyNotifyCauseForbidden(){
|
||||
public void testEmptyNotifyCauseForbidden(){
|
||||
RegistryDirectory registryDirectory = getRegistryDirectory();
|
||||
List invokers = null;
|
||||
|
||||
List<URL> serviceUrls = new ArrayList<URL> ();
|
||||
|
|
@ -441,8 +484,9 @@ public class RegistryDirectoryTest {
|
|||
@Test
|
||||
public void testNotifyRouterUrls(){
|
||||
if (isScriptUnsupported) return;
|
||||
URL routerurl= URL.valueOf(RpcConstants.ROUTE_PROTOCOL + "://"+NetUtils.getLocalHost()+":9096/");
|
||||
URL routerurl2= URL.valueOf(RpcConstants.ROUTE_PROTOCOL + "://"+NetUtils.getLocalHost()+":9097/");
|
||||
RegistryDirectory registryDirectory = getRegistryDirectory();
|
||||
URL routerurl= URL.valueOf(RpcConstants.ROUTE_PROTOCOL + "://127.0.0.1:9096/");
|
||||
URL routerurl2= URL.valueOf(RpcConstants.ROUTE_PROTOCOL + "://127.0.0.1:9097/");
|
||||
|
||||
List<URL> serviceUrls = new ArrayList<URL> ();
|
||||
// without ROUTER_KEY, the first router should not be created.
|
||||
|
|
@ -470,5 +514,35 @@ public class RegistryDirectoryTest {
|
|||
}
|
||||
|
||||
|
||||
private static interface DemoService {}
|
||||
private static interface DemoService {}
|
||||
private static class MockRegistry implements Registry{
|
||||
CountDownLatch latch ;
|
||||
public MockRegistry(CountDownLatch latch) {
|
||||
this.latch = latch;
|
||||
}
|
||||
public void register(URL url) {
|
||||
|
||||
}
|
||||
public void unregister(URL url) {
|
||||
|
||||
}
|
||||
public void subscribe(URL url, NotifyListener listener) {
|
||||
|
||||
}
|
||||
public void unsubscribe(URL url, NotifyListener listener) {
|
||||
latch.countDown();
|
||||
}
|
||||
public List<URL> lookup(URL url) {
|
||||
return null;
|
||||
}
|
||||
public URL getUrl() {
|
||||
return null;
|
||||
}
|
||||
public boolean isAvailable() {
|
||||
return false;
|
||||
}
|
||||
public void destroy() {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue