/**
* File Created at 2011-11-25
* $Id$
*
* Copyright 2008 Alibaba.com Croporation Limited.
* All rights reserved.
*
* This software is the confidential and proprietary information of
* Alibaba Company. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with Alibaba.com.
*/
package com.alibaba.dubbo.rpc.protocol.thrift;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.extension.ExtensionLoader;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Protocol;
import com.alibaba.dubbo.rpc.gen.dubbo.$__DemoStub;
import com.alibaba.dubbo.rpc.gen.dubbo.Demo;
import com.alibaba.dubbo.rpc.protocol.thrift.ext.MultiServiceProcessor;
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TServerTransport;
import org.apache.thrift.transport.TTransportFactory;
import org.junit.After;
import org.junit.Before;
/**
* @author gang.lvg 2011-11-25 13:05
*/
public abstract class AbstractTest {
static final int PORT = 30660;
protected TServer server;
protected Protocol protocol;
protected Invoker<?> invoker;
protected void init() throws Exception {
TServerTransport serverTransport = new TServerSocket( PORT );
TBinaryProtocol.Factory bFactory = new TBinaryProtocol.Factory();
server = new TThreadPoolServer(
new TThreadPoolServer.Args( serverTransport )
.inputProtocolFactory( bFactory )
.outputProtocolFactory( bFactory )
.inputTransportFactory( getTransportFactory() )
.outputTransportFactory( getTransportFactory() )
.processor( getProcessor() ) );
Thread startTread = new Thread() {
@Override
public void run() {
server.serve();
}
};
startTread.setName( "thrift-server" );
startTread.start();
while( !server.isServing() ) {
Thread.sleep( 100 );
}
protocol = ExtensionLoader.getExtensionLoader(Protocol.class)
.getExtension( ThriftProtocol.NAME );
invoker = protocol.refer( getInterface(), getUrl() );
}
protected void destroy() throws Exception {
if ( server != null ) {
server.stop();
server = null;
}
if ( protocol != null ) {
protocol.destroy();
protocol = null;
}
if ( invoker != null ) {
invoker.destroy();
invoker = null;
}
}
protected TTransportFactory getTransportFactory() {
return new FramedTransportFactory();
}
protected $__DemoStub.Iface getServiceImpl() {
return new DubboDemoImpl();
}
protected TProcessor getProcessor() {
MultiServiceProcessor result = new MultiServiceProcessor();
result.addProcessor(
com.alibaba.dubbo.rpc.gen.dubbo.Demo.class,
new $__DemoStub.Processor( getServiceImpl() ) );
return result;
}
protected Class<?> getInterface() {
return Demo.class;
}
protected URL getUrl() {
return URL.valueOf(
"thrift://127.0.0.1:" + PORT + "/" + getInterface().getName() );
}
@After
public void tearDown() throws Exception{
destroy();
}
@Before
public void setUp() throws Exception {
init();
}
}