提交 96aee0c6 编写于 作者: C chao.liuc

http://agile.alibaba-inc.com/browse/DUBBO-743

directory notify中多加几个test case

git-svn-id: http://code.alibabatech.com/svn/dubbo/trunk@154 1a56cb94-b969-4eaa-88fa-be21384802f2
上级 6ce8ad20
......@@ -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() {
}
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册