From a0a9df849e9022589f538eb3fe66c732c9d88b5e Mon Sep 17 00:00:00 2001 From: "chao.liuc" Date: Tue, 1 Nov 2011 09:54:44 +0000 Subject: [PATCH] more test case git-svn-id: http://code.alibabatech.com/svn/dubbo/trunk@163 1a56cb94-b969-4eaa-88fa-be21384802f2 --- .../registry/dubbo/RegistryDirectoryTest.java | 26 ++++++++++++++++++- .../registry/support/RegistryDirectory.java | 14 +++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/dubbo-registry-default/src/test/java/com/alibaba/dubbo/registry/dubbo/RegistryDirectoryTest.java b/dubbo-registry-default/src/test/java/com/alibaba/dubbo/registry/dubbo/RegistryDirectoryTest.java index 41e979f993..b5b33c49b3 100644 --- a/dubbo-registry-default/src/test/java/com/alibaba/dubbo/registry/dubbo/RegistryDirectoryTest.java +++ b/dubbo-registry-default/src/test/java/com/alibaba/dubbo/registry/dubbo/RegistryDirectoryTest.java @@ -478,7 +478,8 @@ public class RegistryDirectoryTest { List serviceUrls = new ArrayList (); // without ROUTER_KEY, the first router should not be created. - serviceUrls.add(routerurl.addParameter(RpcConstants.TYPE_KEY, "javascript") + serviceUrls.add(routerurl.addParameter(RpcConstants.TYPE_KEY, "javascript") + .addParameter(RpcConstants.ROUTER_KEY, "notsupported") .addParameter(RpcConstants.RULE_KEY, "function test1(){}")); serviceUrls.add(routerurl2.addParameter(RpcConstants.TYPE_KEY, "javascript") .addParameter(RpcConstants.ROUTER_KEY, ScriptRouterFactory.NAME) @@ -499,6 +500,29 @@ public class RegistryDirectoryTest { registryDirectory.notify(serviceUrls); routers = registryDirectory.getRouters(); Assert.assertEquals(0, routers.size()); + } + + @Test + public void testNotifyRouterUrls_Clean(){ + if (isScriptUnsupported) return; + RegistryDirectory registryDirectory = getRegistryDirectory(); + URL routerurl= URL.valueOf(RpcConstants.ROUTE_PROTOCOL + "://127.0.0.1:9096/") + .addParameter(RpcConstants.ROUTER_KEY, "javascript") + .addParameter(RpcConstants.RULE_KEY, "function test1(){}") + .addParameter(RpcConstants.ROUTER_KEY, "script"); //FIX BAD + + List serviceUrls = new ArrayList (); + // without ROUTER_KEY, the first router should not be created. + serviceUrls.add(routerurl); + registryDirectory.notify(serviceUrls); + List routers = registryDirectory.getRouters(); + Assert.assertEquals(1, routers.size()); + + serviceUrls.clear(); + serviceUrls.add(routerurl.addParameter(RpcConstants.ROUTER_KEY, RpcConstants.ROUTER_TYPE_CLEAR)); + registryDirectory.notify(serviceUrls); + routers = registryDirectory.getRouters(); + Assert.assertEquals(0, routers.size()); } diff --git a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/RegistryDirectory.java b/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/RegistryDirectory.java index e663510574..622182e35a 100644 --- a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/RegistryDirectory.java +++ b/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/RegistryDirectory.java @@ -44,6 +44,7 @@ import com.alibaba.dubbo.rpc.RpcConstants; import com.alibaba.dubbo.rpc.RpcException; import com.alibaba.dubbo.rpc.cluster.Router; import com.alibaba.dubbo.rpc.cluster.RouterFactory; +import com.alibaba.dubbo.rpc.cluster.router.ScriptRouterFactory; import com.alibaba.dubbo.rpc.cluster.support.AbstractDirectory; import com.alibaba.dubbo.rpc.cluster.support.ClusterUtils; @@ -108,7 +109,7 @@ public class RegistryDirectory extends AbstractDirectory implements Notify registry.unsubscribe(directoryUrl, this); } } catch (Throwable t) { - logger.warn("unexpeced error when unsubscribe service " + serviceKey + "from registry" + registry.getUrl().getAddress(), t); + logger.warn("unexpeced error when unsubscribe service " + serviceKey + "from registry" + registry.getUrl(), t); } try { destroyAllInvokers(); @@ -193,13 +194,18 @@ public class RegistryDirectory extends AbstractDirectory implements Notify if (urls != null && urls.size() > 0) { for (URL url : urls) { - String router_type = url.getParameter(RpcConstants.ROUTER_KEY); + String router_type = url.getParameter(RpcConstants.ROUTER_KEY, ScriptRouterFactory.NAME); if (router_type == null || router_type.length() == 0){ logger.warn("Router url:\"" + url.toString() + "\" does not contain " + RpcConstants.ROUTER_KEY + ", router creation ignored!"); continue; } - routers.add(ExtensionLoader.getExtensionLoader(RouterFactory.class).getExtension(router_type).getRouter(url)); -// routers.add(routerFactory.getRouter(url.setProtocol(router_type))); + try{ + Router router = ExtensionLoader.getExtensionLoader(RouterFactory.class).getExtension(router_type).getRouter(url); + if (!routers.contains(router)) + routers.add(router); + }catch (Throwable t) { + logger.error("convert router url to router error, url: "+ url, t); + } } } return routers;