package com.leansoft.luxun.server;
import static org.junit.Assert.*;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
import org.junit.Before;
import org.junit.Test;
import com.leansoft.luxun.consumer.SimpleConsumer;
import com.leansoft.luxun.message.Message;
import com.leansoft.luxun.message.MessageList;
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;
import com.leansoft.luxun.utils.Utils;
public class ServerShutdownTest {
int port;
@Before
public void setUp() throws IOException {
port = TestUtils.choosePort();
}
@Test
public void testCleanShutdown() throws Exception {
Properties props = TestUtils.createBrokerConfig(0, port);
ServerConfig config = new ServerConfig(props);
String host = "127.0.0.1";
String topic = "test";
MessageList sent1 = new MessageList();
sent1.add(new Message("hello".getBytes()));
sent1.add(new Message("there".getBytes()));
MessageList sent2 = new MessageList();
sent2.add(new Message("more".getBytes()));
sent2.add(new Message("messages".getBytes()));
{
SyncProducer producer = new SyncProducer(this.getProducerConfig(host, port, 100000, 10000));
SimpleConsumer consumer = new SimpleConsumer(host, port, 1000000);
LuxunServer server = new LuxunServer(config);
server.startup();
// send some messages
producer.send(topic, sent1);
Thread.sleep(200);
producer.close();
// do a clean shutdown
server.close();
File cleanShutDownFile = new File(new File(config.getLogDir()), server.CLEAN_SHUTDOWN_FILE);
assertTrue(cleanShutDownFile.exists());
}
{
SyncProducer producer = new SyncProducer(this.getProducerConfig(host, port, 100000, 10000));
SimpleConsumer consumer = new SimpleConsumer(host, port, 1000000);
LuxunServer server = new LuxunServer(config);
server.startup();
List<MessageList> listOfMessageList = consumer.consume(topic, 0, 10000);
assertTrue(listOfMessageList.size() == 1);
assertEquals(sent1, listOfMessageList.get(0));
// send some more messages
producer.send(topic, sent2);
Thread.sleep(200);
listOfMessageList = consumer.consume(topic, 0, 10000);
assertTrue(listOfMessageList.size() == 2);
assertEquals(sent1, listOfMessageList.get(0));
assertEquals(sent2, listOfMessageList.get(1));
producer.close();
server.close();
Utils.deleteDirectory(new File(server.config.getLogDir()));
}
}
private SyncProducerConfig getProducerConfig(String host, int port, int connectTimeout, int reconnectInterval) {
Properties props = new Properties();
props.put("host", host);
props.put("port", String.valueOf(port));
props.put("connect.timeout.ms", String.valueOf(connectTimeout));
props.put("reconnect.interval", String.valueOf(reconnectInterval));
return new SyncProducerConfig(props);
}
}