package com.leansoft.luxun.producer;
import static org.junit.Assert.*;
import java.io.IOException;
import java.util.Properties;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.leansoft.luxun.common.exception.MessageSizeTooLargeException;
import com.leansoft.luxun.message.Message;
import com.leansoft.luxun.message.MessageList;
import com.leansoft.luxun.message.generated.CompressionCodec;
import com.leansoft.luxun.producer.SyncProducer;
import com.leansoft.luxun.producer.SyncProducerConfig;
import com.leansoft.luxun.server.LuxunServer;
import com.leansoft.luxun.server.ServerConfig;
import com.leansoft.luxun.utils.TestUtils;
public class MessageSizeLimitTest {
private LuxunServer server;
private int port;
@Before
public void setup() throws IOException {
port = TestUtils.choosePort();
Properties props = TestUtils.createBrokerConfig(0, port);
ServerConfig config = new ServerConfig(props);
server = TestUtils.createServer(config);
}
@After
public void tearDown() throws IOException {
server.close();
}
@Test
public void testSingleMessageSizeTooLarge() {
Properties props = new Properties();
props.put("host", "127.0.0.1");
props.put("port", String.valueOf(port));
props.put("connect.timeout.ms", "300");
props.put("reconnect.interval", "500");
props.put("max.message.size", "100");
SyncProducer producer = new SyncProducer(new SyncProducerConfig(props));
byte[] bytes = new byte[101];
try {
MessageList messageList = new MessageList();
messageList.add(new Message(bytes));
producer.send("test", messageList);
fail("should throw MessageSizeTooLargeException");
} catch (MessageSizeTooLargeException e) {
// expected
}
producer.close();
}
@Test
public void testCompressedMessageSizeTooLarge() {
Properties props = new Properties();
props.put("host", "127.0.0.1");
props.put("port", String.valueOf(port));
props.put("connect.timeout.ms", "300");
props.put("reconnect.interval", "500");
props.put("max.message.size", "100");
SyncProducer producer = new SyncProducer(new SyncProducerConfig(props));
MessageList messageList = new MessageList(CompressionCodec.GZIP);
for(int i = 0; i < 19; i++) {
byte[] bytes = new byte[20];
for(int j = 0; j < 20; j++) {
bytes[i] = (byte)i;
}
messageList.add(new Message(bytes));
}
/** After compression, the compressed message has size 106 **/
try {
producer.send("test", messageList);
fail("should throw MessageSizeTooLargeException");
} catch (MessageSizeTooLargeException e) {
// expected
}
producer.close();
}
}