/**
* File Created at 2011-12-09
* $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.Constants;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.dubbo.rpc.RpcInvocation;
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.protocol.TBinaryProtocol;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TServerTransport;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.lang.reflect.Field;
import java.util.Map;
/**
* @author <a href="mailto:gang.lvg@alibaba-inc.com">kimi</a>
*/
public class ServiceMethodNotFoundTest extends AbstractTest {
private URL url;
protected void init() throws Exception {
TServerTransport serverTransport = new TServerSocket( PORT );
DubboDemoImpl impl = new DubboDemoImpl();
$__DemoStub.Processor processor = new $__DemoStub.Processor( impl );
// for test
Field field = processor.getClass().getSuperclass().getDeclaredField( "processMap" );
field.setAccessible( true );
Object obj = field.get( processor );
if ( obj instanceof Map ) {
( ( Map ) obj ).remove( "echoString" );
}
// ~
TBinaryProtocol.Factory bFactory = new TBinaryProtocol.Factory();
MultiServiceProcessor wrapper = new MultiServiceProcessor();
wrapper.addProcessor( Demo.class, processor );
server = new TThreadPoolServer(
new TThreadPoolServer.Args( serverTransport )
.inputProtocolFactory( bFactory )
.outputProtocolFactory( bFactory )
.inputTransportFactory( getTransportFactory() )
.outputTransportFactory( getTransportFactory() )
.processor( wrapper ) );
Thread startTread = new Thread() {
@Override
public void run() {
server.serve();
}
};
startTread.start();
while ( !server.isServing() ) {
Thread.sleep( 100 );
}
}
@Before
public void setUp() throws Exception {
init();
protocol = new ThriftProtocol();
url = URL.valueOf( ThriftProtocol.NAME + "://127.0.0.1:" + PORT + "/" + Demo.class.getName() );
}
@After
public void tearDown() throws Exception {
destroy();
if ( protocol != null ) {
protocol.destroy();
protocol = null;
}
if ( invoker != null ) {
invoker.destroy();
invoker = null;
}
}
@Test
public void testServiceMethodNotFound() throws Exception {
// FIXME
/*url = url.addParameter( "echoString." + Constants.TIMEOUT_KEY, Integer.MAX_VALUE );
invoker = protocol.refer( Demo.class, url );
org.junit.Assert.assertNotNull( invoker );
RpcInvocation invocation = new RpcInvocation();
invocation.setMethodName( "echoString" );
invocation.setParameterTypes( new Class<?>[]{ String.class } );
String arg = "Hello, World!";
invocation.setArguments( new Object[] { arg } );
invocation.setAttachment(Constants.INTERFACE_KEY, DemoImpl.class.getName());
Result result = invoker.invoke( invocation );
Assert.assertNull( result.getResult() );
Assert.assertTrue( result.getException() instanceof RpcException );*/
}
}