/** * 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(); } }