blob: 33768266a3a2159d1223d541bf04a329ce54aea0 [file] [log] [blame]
/*
* 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 <a href="mailto:gang.lvg@alibaba-inc.com">kimi</a>
*/
public class HeartbeatHandlerTest {
private ExchangeServer server;
private ExchangeClient client;
@After
public void after() throws Exception {
if (client != null) {
client.close();
client = null;
}
if (server != null) {
server.close();
server = null;
}
}
@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 testHeartbeat() 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");
client = Exchangers.connect(serverURL);
Thread.sleep(10000);
System.err.println("++++++++++++++ disconnect count " + handler.disconnectCount);
System.err.println("++++++++++++++ connect count " + handler.connectCount);
Assert.assertTrue(handler.disconnectCount == 0);
Assert.assertTrue(handler.connectCount == 1);
}
@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;
}
}
}