From 215e1405b7742fb93b375ec76f6abf61db638b3f Mon Sep 17 00:00:00 2001 From: kimi Date: Sat, 30 Jun 2012 20:48:43 +0800 Subject: [PATCH] =?UTF-8?q?DUBBO-424=20Heartbeat=20response=E4=B8=8D?= =?UTF-8?q?=E5=BA=94=E8=AF=A5=E5=9C=A8=E4=B8=9A=E5=8A=A1=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../support/header/HeartbeatHandler.java | 8 ++ .../support/header/HeartbeatHandlerTest.java | 120 ++++++++++++++++++ .../dispather/FakeChannelHandlers.java | 46 +++++++ 3 files changed, 174 insertions(+) create mode 100644 dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/exchange/support/header/HeartbeatHandler.java create mode 100644 dubbo-remoting/dubbo-remoting-netty/src/test/java/com/alibaba/dubbo/remoting/exchange/support/header/HeartbeatHandlerTest.java create mode 100644 dubbo-remoting/dubbo-remoting-netty/src/test/java/com/alibaba/dubbo/remoting/transport/dispather/FakeChannelHandlers.java diff --git a/dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/exchange/support/header/HeartbeatHandler.java b/dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/exchange/support/header/HeartbeatHandler.java new file mode 100644 index 000000000..8a7aaca61 --- /dev/null +++ b/dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/exchange/support/header/HeartbeatHandler.java @@ -0,0 +1,8 @@ +package com.alibaba.dubbo.remoting.exchange.support.header; + +/** + * @author kimi + */ +public class HeartbeatHandler { + +} diff --git a/dubbo-remoting/dubbo-remoting-netty/src/test/java/com/alibaba/dubbo/remoting/exchange/support/header/HeartbeatHandlerTest.java b/dubbo-remoting/dubbo-remoting-netty/src/test/java/com/alibaba/dubbo/remoting/exchange/support/header/HeartbeatHandlerTest.java new file mode 100644 index 000000000..d1ca8cb90 --- /dev/null +++ b/dubbo-remoting/dubbo-remoting-netty/src/test/java/com/alibaba/dubbo/remoting/exchange/support/header/HeartbeatHandlerTest.java @@ -0,0 +1,120 @@ +/* + * Copyright 1999-2011 Alibaba Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.dubbo.remoting.exchange.support.header; + +import org.junit.After; +import org.junit.Test; + +import com.alibaba.dubbo.common.Constants; +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.remoting.Channel; +import com.alibaba.dubbo.remoting.RemotingException; +import com.alibaba.dubbo.remoting.exchange.ExchangeChannel; +import com.alibaba.dubbo.remoting.exchange.ExchangeClient; +import com.alibaba.dubbo.remoting.exchange.ExchangeHandler; +import com.alibaba.dubbo.remoting.exchange.ExchangeServer; +import com.alibaba.dubbo.remoting.exchange.Exchangers; +import com.alibaba.dubbo.remoting.transport.dispather.FakeChannelHandlers; + +import junit.framework.Assert; + +/** + * @author kimi + */ +public class HeartbeatHandlerTest { + + private ExchangeServer server; + private ExchangeClient client; + + @After + public void after() throws Exception { + if (client != null) { + client.close(); + } + + if (server != null) { + server.close(); + } + } + + @Test + public void testServerHeartbeat() throws Exception { + URL serverURL = URL.valueOf("header://localhost:55555"); + serverURL = serverURL.addParameter(Constants.HEARTBEAT_KEY, 1000); + TestHeartbeatHandler handler = new TestHeartbeatHandler(); + server = Exchangers.bind(serverURL, handler); + System.out.println("Server bind successfully"); + + FakeChannelHandlers.setTestingChannelHandlers(); + serverURL = serverURL.removeParameter(Constants.HEARTBEAT_KEY); + client = Exchangers.connect(serverURL); + Thread.sleep(10000); + Assert.assertTrue(handler.disconnectCount > 0); + System.out.println("disconnect count " + handler.disconnectCount); + } + + @Test + public void testClientHeartbeat() throws Exception { + FakeChannelHandlers.setTestingChannelHandlers(); + URL serverURL = URL.valueOf("header://localhost:55555"); + TestHeartbeatHandler handler = new TestHeartbeatHandler(); + server = Exchangers.bind(serverURL, handler); + System.out.println("Server bind successfully"); + + FakeChannelHandlers.resetChannelHandlers(); + serverURL = serverURL.addParameter(Constants.HEARTBEAT_KEY, 1000); + client = Exchangers.connect(serverURL); + Thread.sleep(10000); + Assert.assertTrue(handler.connectCount > 0); + System.out.println("connect count " + handler.connectCount); + } + + class TestHeartbeatHandler implements ExchangeHandler { + + public int disconnectCount = 0; + public int connectCount = 0; + + public Object reply(ExchangeChannel channel, Object request) throws RemotingException { + return request; + } + + public void connected(Channel channel) throws RemotingException { + ++connectCount; + } + + public void disconnected(Channel channel) throws RemotingException { + ++disconnectCount; + } + + public void sent(Channel channel, Object message) throws RemotingException { + + } + + public void received(Channel channel, Object message) throws RemotingException { + HeartbeatHandler.log.error(this.getClass().getSimpleName() + message.toString()); + } + + public void caught(Channel channel, Throwable exception) throws RemotingException { + exception.printStackTrace(); + } + + public String telnet(Channel channel, String message) throws RemotingException { + return message; + } + } + +} diff --git a/dubbo-remoting/dubbo-remoting-netty/src/test/java/com/alibaba/dubbo/remoting/transport/dispather/FakeChannelHandlers.java b/dubbo-remoting/dubbo-remoting-netty/src/test/java/com/alibaba/dubbo/remoting/transport/dispather/FakeChannelHandlers.java new file mode 100644 index 000000000..bab013e67 --- /dev/null +++ b/dubbo-remoting/dubbo-remoting-netty/src/test/java/com/alibaba/dubbo/remoting/transport/dispather/FakeChannelHandlers.java @@ -0,0 +1,46 @@ +/* + * Copyright 1999-2011 Alibaba Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.dubbo.remoting.transport.dispather; + +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extension.ExtensionLoader; +import com.alibaba.dubbo.remoting.ChannelHandler; +import com.alibaba.dubbo.remoting.Dispather; + +/** + * @author kimi + */ +public class FakeChannelHandlers extends ChannelHandlers { + + public FakeChannelHandlers() { + super(); + } + + @Override + protected ChannelHandler wrapInternal(ChannelHandler handler, URL url) { + return ExtensionLoader.getExtensionLoader(Dispather.class) + .getAdaptiveExtension().dispath(handler, url); + } + + public static void setTestingChannelHandlers() { + ChannelHandlers.setTestingChannelHandlers(new FakeChannelHandlers()); + } + + public static void resetChannelHandlers() { + ChannelHandlers.setTestingChannelHandlers(new ChannelHandlers()); + } +} -- GitLab