package com.leansoft.luxun.integration;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.apache.thrift.TException;
import com.leansoft.luxun.message.Message;
import com.leansoft.luxun.message.MessageList;
import com.leansoft.luxun.message.generated.CompressionCodec;
import com.leansoft.luxun.producer.ProducerConfig;
import com.leansoft.luxun.producer.StringProducer;
import com.leansoft.luxun.producer.StringProducerData;
import com.leansoft.luxun.serializer.Decoder;
import com.leansoft.luxun.serializer.StringDecoder;
import com.leansoft.luxun.server.LuxunServer;
import com.leansoft.luxun.server.ServerConfig;
import com.leansoft.luxun.utils.TestUtils;
import com.leansoft.luxun.utils.Utils;
/**
* End to end tests of the primitive apis against a local server
*
* @author bulldog
*
*/
public class PrimitiveApiTest extends ProducerConsumerTestHarness {
Properties props;
ServerConfig config;
List<ServerConfig> configs;
List<LuxunServer> servers;
@Override
public void setUp() throws Exception {
port = TestUtils.choosePort();
props = TestUtils.createBrokerConfig(0, port);
config = new ServerConfig(props);
configs = new ArrayList<ServerConfig>();
configs.add(config);
servers = new ArrayList<LuxunServer>();
servers.add(TestUtils.createServer(config));
super.setUp();
}
@Override
public void tearDown() throws Exception {
super.tearDown();
for(LuxunServer server : servers) {
server.close();
}
for(ServerConfig config : configs) {
Utils.deleteDirectory(new File(config.getLogDir()));
}
}
public void testDefaultEncoderProduceAndFetchByIndex() throws TException {
String topic = "test-topic";
Properties props = new Properties();
props.put("serializer.class", "com.leansoft.luxun.serializer.StringEncoder");
props.put("broker.list", "0:127.0.0.1:" + port);
ProducerConfig config = new ProducerConfig(props);
StringProducer stringProducer1 = new StringProducer(config);
stringProducer1.send(new StringProducerData(topic, "test-message"));
List<MessageList> listOfMessageList = consumer.consume(topic, 0, 10000);
assertTrue(listOfMessageList.size() == 1);
assertTrue(listOfMessageList.get(0).iterator().hasNext());
Message message = listOfMessageList.get(0).get(0);
Decoder<String> stringDecoder = new StringDecoder();
String fetchedStringMessage = stringDecoder.toEvent(message);
assertEquals("test-message", fetchedStringMessage);
}
public void testDefaultEncoderProduceAndFetchByFanoutId() throws TException {
String topic = "test-topic";
Properties props = new Properties();
props.put("serializer.class", "com.leansoft.luxun.serializer.StringEncoder");
props.put("broker.list", "0:127.0.0.1:" + port);
ProducerConfig config = new ProducerConfig(props);
StringProducer stringProducer1 = new StringProducer(config);
stringProducer1.send(new StringProducerData(topic, "test-message"));
List<MessageList> listOfMessageList = consumer.consume(topic, "fan0", 10000);
assertTrue(listOfMessageList.size() == 1);
assertTrue(listOfMessageList.get(0).iterator().hasNext());
Message message = listOfMessageList.get(0).get(0);
Decoder<String> stringDecoder = new StringDecoder();
String fetchedStringMessage = stringDecoder.toEvent(message);
assertEquals("test-message", fetchedStringMessage);
}
public void testEmptyMessageProduceAndFetchByIndex() throws TException {
String topic = "test-topic";
MessageList messageList = new MessageList();
producer.send(topic, messageList);
List<MessageList> listOfMessageList = consumer.consume(topic, 0, 10000);
assertTrue(listOfMessageList.size() == 1);
assertTrue(listOfMessageList.get(0).isEmpty());
assertTrue(listOfMessageList.get(0).getCompressionCodec() == CompressionCodec.NO_COMPRESSION);
}
public void testEmptyMessageProduceAndFetchByFanoutId() throws TException {
String topic = "test-topic";
MessageList messageList = new MessageList();
producer.send(topic, messageList);
List<MessageList> listOfMessageList = consumer.consume(topic, "fan001", 10000);
assertTrue(listOfMessageList.size() == 1);
assertTrue(listOfMessageList.get(0).isEmpty());
assertTrue(listOfMessageList.get(0).getCompressionCodec() == CompressionCodec.NO_COMPRESSION);
}
public void testDefaultEncoderProduceAndFetchByIndexWithCompression() throws TException {
String topic = "test-topic";
Properties props = new Properties();
props.put("serializer.class", "com.leansoft.luxun.serializer.StringEncoder");
props.put("broker.list", "0:127.0.0.1:" + port);
props.put("compression.codec", "1"); // GZIP
ProducerConfig config = new ProducerConfig(props);
StringProducer stringProducer1 = new StringProducer(config);
stringProducer1.send(new StringProducerData(topic, "test-message"));
List<MessageList> listOfMessageList = consumer.consume(topic, 0, 10000);
assertTrue(listOfMessageList.size() == 1);
assertTrue(listOfMessageList.get(0).iterator().hasNext());
Message message = listOfMessageList.get(0).get(0);
Decoder<String> stringDecoder = new StringDecoder();
String fetchedStringMessage = stringDecoder.toEvent(message);
assertEquals("test-message", fetchedStringMessage);
}
public void testDefaultEncoderProduceAndFetchByFanoutIdWithCompression() throws TException {
String topic = "test-topic";
Properties props = new Properties();
props.put("serializer.class", "com.leansoft.luxun.serializer.StringEncoder");
props.put("broker.list", "0:127.0.0.1:" + port);
props.put("compression.codec", "1"); // GZIP
ProducerConfig config = new ProducerConfig(props);
StringProducer stringProducer1 = new StringProducer(config);
stringProducer1.send(new StringProducerData(topic, "test-message"));
List<MessageList> listOfMessageList = consumer.consume(topic, "fan002", 10000);
assertTrue(listOfMessageList.size() == 1);
assertTrue(listOfMessageList.get(0).iterator().hasNext());
Message message = listOfMessageList.get(0).get(0);
Decoder<String> stringDecoder = new StringDecoder();
String fetchedStringMessage = stringDecoder.toEvent(message);
assertEquals("test-message", fetchedStringMessage);
}
public void testEmptyMessageProduceAndFetchByIndexWithCompression() throws TException {
String topic = "test-topic";
MessageList messageList = new MessageList(CompressionCodec.GZIP);
producer.send(topic, messageList);
List<MessageList> listOfMessageList = consumer.consume(topic, 0, 10000);
assertTrue(listOfMessageList.size() == 1);
assertTrue(listOfMessageList.get(0).isEmpty());
assertTrue(listOfMessageList.get(0).getCompressionCodec() == CompressionCodec.GZIP);
}
public void testEmptyMessageProduceAndFetchByFanoutIdWithCompression() throws TException {
String topic = "test-topic";
MessageList messageList = new MessageList(CompressionCodec.GZIP);
producer.send(topic, messageList);
List<MessageList> listOfMessageList = consumer.consume(topic, "fan9", 10000);
assertTrue(listOfMessageList.size() == 1);
assertTrue(listOfMessageList.get(0).isEmpty());
assertTrue(listOfMessageList.get(0).getCompressionCodec() == CompressionCodec.GZIP);
}
}