package com.ganji.as.thrift.protocol.finagle.client.test;
import java.net.InetSocketAddress;
import java.util.Arrays;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TMessage;
import org.apache.thrift.protocol.TMessageType;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.protocol.TProtocolFactory;
import org.apache.thrift.transport.TMemoryBuffer;
import org.apache.thrift.transport.TMemoryInputTransport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ganji.as.thrift.protocol.builder.ClientBuildingConfig;
import com.ganji.as.thrift.protocol.builder.ThriftProtocolClientBuilder;
import com.ganji.as.thrift.protocol.client.future.Future;
import com.ganji.as.thrift.protocol.client.request.ThriftClientRequest;
import com.ganji.as.thrift.protocol.cluster.load.balance.ConsistentHashLoadBalance;
import com.ganji.as.thrift.protocol.service.ThriftProtocolServe;
import com.ganji.as.thrift.protocol.service.intf.ThriftProtocolFunction;
import com.ganji.as.thrift.protocol.service.intf.ThriftProtocolService;
import com.ganji.as.thrift.protocol.client.test.AchieveResult;
import com.ganji.as.thrift.protocol.client.test.AntiSpamProcess;
import com.ganji.as.thrift.protocol.client.test.OperateResult;
import org.junit.Assert;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class ThriftProtocolServeTest extends TestCase {
/**
* Create the test case
*
* @param testName
* name of the test case
*/
public ThriftProtocolServeTest(String testName) {
super(testName);
}
/**
* @return the suite of tests being tested
*/
public static Test suite() {
return new TestSuite(ThriftProtocolServeTest.class);
}
/**
* Rigourous Test :-)
*
* @throws Throwable
*/
final private Logger LOGGER = LoggerFactory
.getLogger(ThriftProtocolServeTest.class);
final TProtocolFactory FACTORY = new TBinaryProtocol.Factory();
public void testApp1() throws Throwable {
/*
* final ThriftProtocolService<ThriftClientRequest, byte[]> serve_ =
* ThriftProtocolClientBuilder .safeBuild(ThriftProtocolClientBuilder
* .get() .codec(FACTORY) .retries(6) // .hosts(new
* InetSocketAddress("192.168.35.132", 8020)) .dest(
* "zk!bw-kvm-cy-01.dns.ganji.com:2181!/soa/services/as.postlimitservice.thrift!0"
* ) .hostConnectionLimit(2) .logger(LoggerFactory
* .getLogger("thrift-post-limit-service-client")));
*
* TMemoryBuffer __memoryTransport__ = new TMemoryBuffer(512); TProtocol
* __prot__ = FACTORY.getProtocol(__memoryTransport__);
* __prot__.writeMessageBegin(new TMessage("getPostLimit",
* TMessageType.CALL, 0)); PostLimitServiceFinagle.getPostLimit_args
* __args__ = new PostLimitServiceFinagle.getPostLimit_args();
* __args__.setStrJSONParam(
* "{\"category_script_index\":4,\"user_id\":2,\"category_id\":2,\"majorcategory_script_index\":-1,\"city_code\":-1}"
* ); __args__.setToken("test-call"); __args__.write(__prot__);
* __prot__.writeMessageEnd();
*
* byte[] __buffer__ =
* Arrays.copyOfRange(__memoryTransport__.getArray(), 0,
* __memoryTransport__.length()); final ThriftClientRequest __request__
* = new ThriftClientRequest( __buffer__, false); for (int i = 0; i <
* 1000000; i++) { Future<byte[]> future = serve_.apply(__request__);
*
* Future<OperateResult> r = future .flatMap(new
* ThriftProtocolFunction<byte[],
* com.ganji.as.thrift.protocol.client.future.Future<OperateResult>>() {
*
* public
* com.ganji.as.thrift.protocol.client.future.Future<OperateResult>
* apply( byte[] __buffer__) { // TODO Auto-generated method stub
* TMemoryInputTransport __memoryTransportReturn__ = new
* TMemoryInputTransport( __buffer__); TProtocol __protReturn__ =
* FACTORY .getProtocol(__memoryTransportReturn__); try { OperateResult
* operateResult = (new PostLimitServiceFinagle.Client(
* __protReturn__)).recv_getPostLimit();
*
* return Future.value(operateResult); } catch (Exception e) { return
* Future.exception(e); } }
*
* });
*
* try { final OperateResult result = r.get();
* Assert.assertNotNull(result); System.out.println("result=" +
* result.toString()); LOGGER.debug("result=" + result.toString()); }
* catch (final Throwable t) {
*
* } } serve_.close();
*/
}
static public void main(String[] args) {
try {
new ThriftProtocolServeTest("").testApp();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void testApp() throws Throwable {
final ThriftProtocolService<ThriftClientRequest, byte[]> serve = ThriftProtocolClientBuilder
.safeBuild(ThriftProtocolClientBuilder
.get()
.codec(FACTORY)
.retries(3)
.dest("zk!bw-kvm-cy-01.dns.ganji.com:2181!/soa/services/as.postlimitservice.thrift!0")
.hostConnectionLimit(1)
.logger(LoggerFactory
.getLogger("thrift-post-limit-service-client")));
final ThriftProtocolService<ThriftClientRequest, byte[]> serve2 = ThriftProtocolClientBuilder
.safeBuild(ThriftProtocolClientBuilder
.get()
.codec(FACTORY)
.dest("zk!bw-kvm-cy-01.dns.ganji.com:2181!/soa/services/as.whitelist.thrift!0")
.hostConnectionLimit(1)
.logger(LoggerFactory
.getLogger("socket-white-list-client")));
final ThriftProtocolService<ThriftClientRequest, byte[]> serve3 = ThriftProtocolClientBuilder
.safeBuild(ThriftProtocolClientBuilder
.get()
.codec(FACTORY)
.dest("zk!bw-kvm-cy-01.dns.ganji.com:2181!/soa/services/as.bannedwords.thrift!0")
.hostConnectionLimit(1)
.logger(LoggerFactory
.getLogger("socket-bannedwords-client")));
final ThriftProtocolService<ThriftClientRequest, byte[]> serve4 = ThriftProtocolClientBuilder
.safeBuild(ThriftProtocolClientBuilder
.get()
.codec(FACTORY)
.dest("zk!bw-kvm-cy-01.dns.ganji.com:2181!/soa/services/as.extract.thrift!0")
.hostConnectionLimit(1)
.logger(LoggerFactory
.getLogger("socket-extract-client")));
ExecutorService es = Executors.newFixedThreadPool(4);
while (true) {
Thread.currentThread().sleep(2);
es.submit(new Runnable() {
public void run() {
try {
TMemoryBuffer __memoryTransport__ = new TMemoryBuffer(
512);
TProtocol __prot__ = FACTORY
.getProtocol(__memoryTransport__);
__prot__.writeMessageBegin(new TMessage("getPostLimit",
TMessageType.CALL, 0));
PostLimitServiceFinagle.getPostLimit_args __args__ = new PostLimitServiceFinagle.getPostLimit_args();
__args__.setStrJSONParam("{\"category_script_index\":4,\"user_id\":2,\"category_id\":2,\"majorcategory_script_index\":-1,\"city_code\":-1}");
__args__.setToken("test-call");
__args__.write(__prot__);
__prot__.writeMessageEnd();
byte[] __buffer__ = Arrays.copyOfRange(
__memoryTransport__.getArray(), 0,
__memoryTransport__.length());
final ThriftClientRequest __request__ = new ThriftClientRequest(
__buffer__, false);
Future<byte[]> future = serve.apply(__request__);
Future<OperateResult> r = future
.flatMap(new ThriftProtocolFunction<byte[], com.ganji.as.thrift.protocol.client.future.Future<OperateResult>>() {
public com.ganji.as.thrift.protocol.client.future.Future<OperateResult> apply(
byte[] __buffer__) {
// TODO Auto-generated method stub
TMemoryInputTransport __memoryTransportReturn__ = new TMemoryInputTransport(
__buffer__);
TProtocol __protReturn__ = FACTORY
.getProtocol(__memoryTransportReturn__);
try {
OperateResult operateResult = (new PostLimitServiceFinagle.Client(
__protReturn__))
.recv_getPostLimit();
return Future.value(operateResult);
} catch (Exception e) {
return Future.exception(e);
}
}
});
final OperateResult result = r.get();
Assert.assertNotNull(result);
System.out.println("result=" + result.toString());
LOGGER.debug("result=" + result.toString());
} catch (Throwable t) {
t.printStackTrace();
}
}
});
es.submit(new Runnable() {
public void run() {
try {
TMemoryBuffer __memoryTransport1__ = new TMemoryBuffer(
512);
TProtocol __prot1__ = FACTORY
.getProtocol(__memoryTransport1__);
__prot1__.writeMessageBegin(new TMessage("get",
TMessageType.CALL, 0));
PostLimitServiceFinagle.getPostLimit_args __args1__ = new PostLimitServiceFinagle.getPostLimit_args();
__args1__
.setStrJSONParam("{\"whitelisttype\":\"Feed\",\"categoryindex\":-1,\"majorcategoryindex\":-1,\"username\":\"\",phone:\"\",qq:\"\",ip:\"\",userid:\"78459\",msn:\"\",cookie:\"\",companyname:\"\",companylocation:\"\",email:\"\"}");
__args1__.setToken("test-white-list-call");
__args1__.write(__prot1__);
__prot1__.writeMessageEnd();
byte[] __buffer1__ = Arrays.copyOfRange(
__memoryTransport1__.getArray(), 0,
__memoryTransport1__.length());
final ThriftClientRequest __request1__ = new ThriftClientRequest(
__buffer1__, false);
Future<byte[]> future1 = serve2.apply(__request1__);
Future<AchieveResult> r1 = future1
.flatMap(new ThriftProtocolFunction<byte[], com.ganji.as.thrift.protocol.client.future.Future<AchieveResult>>() {
public com.ganji.as.thrift.protocol.client.future.Future<AchieveResult> apply(
byte[] __buffer__) { // TODO
// Auto-generated
// method
// stub
TMemoryInputTransport __memoryTransportReturn__ = new TMemoryInputTransport(
__buffer__);
TProtocol __protReturn__ = FACTORY
.getProtocol(__memoryTransportReturn__);
try {
AchieveResult operateResult = (new AntiSpamProcess.Client(
__protReturn__)).recv_get();
return Future.value(operateResult);
} catch (Exception e) {
return Future.exception(e);
}
}
});
final AchieveResult result1 = r1.get();
Assert.assertNotNull(result1);
System.out.println("result1=" + result1.toString());
LOGGER.debug("result1=" + result1.toString());
} catch (Throwable t) {
t.printStackTrace();
}
}
});
/*
* es.submit(new Runnable() {
*
* public void run() {
*
* try {
*
* TMemoryBuffer __memoryTransport3__ = new TMemoryBuffer( 512);
* TProtocol __prot3__ = FACTORY .getProtocol(__memoryTransport3__);
* __prot3__.writeMessageBegin(new TMessage("get",
* TMessageType.CALL, 0)); PostLimitServiceFinagle.getPostLimit_args
* __args3__ = new PostLimitServiceFinagle.getPostLimit_args();
* __args3__ .setStrJSONParam(
* "{\"sourcekey\":\"webim\",\"contents\":[{\"columnkey\":\"MainSiteMessage\",\"categoryindex\":-1,\"majorcategoryindex\":-1,\"badwordlevel\":-1,\"columnvalue\":\"我的IM小大保健学\",\"citycode\":-1}]}"
* ); __args3__.setToken("test-banned-words-call");
* __args3__.write(__prot3__); __prot3__.writeMessageEnd();
*
* byte[] __buffer3__ = Arrays.copyOfRange(
* __memoryTransport3__.getArray(), 0,
* __memoryTransport3__.length()); final ThriftClientRequest
* __request3__ = new ThriftClientRequest( __buffer3__, false);
*
* Future<byte[]> future3 = serve3.apply(__request3__);
*
* Future<AchieveResult> r3 = future3 .flatMap(new
* ThriftProtocolFunction<byte[],
* com.ganji.as.thrift.protocol.client
* .future.Future<AchieveResult>>() {
*
* public
* com.ganji.as.thrift.protocol.client.future.Future<AchieveResult>
* apply( byte[] __buffer__) { // TODO Auto-generated method stub
* TMemoryInputTransport __memoryTransportReturn__ = new
* TMemoryInputTransport( __buffer__); TProtocol __protReturn__ =
* FACTORY .getProtocol(__memoryTransportReturn__); try {
* AchieveResult operateResult = (new AntiSpamProcess.Client(
* __protReturn__)).recv_get();
*
* return Future.value(operateResult); } catch (Exception e) {
* return Future.exception(e); } }
*
* });
*
* final AchieveResult result3 = r3.get();
* Assert.assertNotNull(result3); System.out.println("result1=" +
* result3.toString()); LOGGER.debug("result1=" +
* result3.toString());
*
* } catch (Throwable t) { t.printStackTrace(); }
*
* }
*
* });
*
* es.submit(new Runnable() {
*
* public void run() {
*
* try {
*
* TMemoryBuffer __memoryTransport4__ = new TMemoryBuffer( 512);
* TProtocol __prot4__ = FACTORY .getProtocol(__memoryTransport4__);
* __prot4__.writeMessageBegin(new TMessage("get",
* TMessageType.CALL, 0)); PostLimitServiceFinagle.getPostLimit_args
* __args4__ = new PostLimitServiceFinagle.getPostLimit_args();
* __args4__ .setStrJSONParam(
* "{contents: [{columnkey:\"content\",content:\"老乡说抽取13158745985调试\",type:\"qq|phone|url\",ignoreganji:\"true\"}]}"
* ); __args4__.setToken("test-call"); __args4__.write(__prot4__);
* __prot4__.writeMessageEnd();
*
* byte[] __buffer4__ = Arrays.copyOfRange(
* __memoryTransport4__.getArray(), 0,
* __memoryTransport4__.length()); final ThriftClientRequest
* __request4__ = new ThriftClientRequest( __buffer4__, false);
*
* Future<byte[]> future4 = serve4.apply(__request4__);
*
* Future<AchieveResult> r4 = future4 .flatMap(new
* ThriftProtocolFunction<byte[],
* com.ganji.as.thrift.protocol.client
* .future.Future<AchieveResult>>() {
*
* public
* com.ganji.as.thrift.protocol.client.future.Future<AchieveResult>
* apply( byte[] __buffer__) { // TODO Auto-generated method stub
* TMemoryInputTransport __memoryTransportReturn__ = new
* TMemoryInputTransport( __buffer__); TProtocol __protReturn__ =
* FACTORY .getProtocol(__memoryTransportReturn__); try {
* AchieveResult operateResult = (new AntiSpamProcess.Client(
* __protReturn__)).recv_get();
*
* return Future.value(operateResult); } catch (Exception e) {
* return Future.exception(e); } }
*
* });
*
* final AchieveResult result4 = r4.get();
* Assert.assertNotNull(result4); System.out.println("result1=" +
* result4.toString()); LOGGER.debug("result1=" +
* result4.toString());
*
* } catch (Throwable t) { t.printStackTrace(); }
*
* }
*
* });
*/
}
// System.out.println("loop complete.");
// TimeUnit.HOURS.sleep(24);
// serve.close();
}
}