/**
* $Id: MapedFileTest.java 1831 2013-05-16 01:39:51Z shijia.wxr $
*/
package com.alibaba.rocketmq.store;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class MapedFileTest {
private static final String StoreMessage = "Once, there was a chance for me!";
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Test
public void test_write_read() {
try {
MapedFile mapedFile = new MapedFile("./unit_test_store/MapedFileTest/000", 1024 * 64);
boolean result = mapedFile.appendMessage(StoreMessage.getBytes());
assertTrue(result);
System.out.println("write OK");
SelectMapedBufferResult selectMapedBufferResult = mapedFile.selectMapedBuffer(0);
byte[] data = new byte[StoreMessage.length()];
selectMapedBufferResult.getByteBuffer().get(data);
String readString = new String(data);
System.out.println("Read: " + readString);
assertTrue(readString.equals(StoreMessage));
// 禁止Buffer读写
mapedFile.shutdown(1000);
// mapedFile对象不可用
assertTrue(!mapedFile.isAvailable());
// 释放读到的Buffer
selectMapedBufferResult.release();
// 内存真正释放掉
assertTrue(mapedFile.isCleanupOver());
// 文件删除成功
assertTrue(mapedFile.destroy(1000));
}
catch (IOException e) {
e.printStackTrace();
}
}
/**
* 当前测试用例由于对mmap操作错误,会导致JVM CRASHED
*/
@Ignore
public void test_jvm_crashed() {
try {
MapedFile mapedFile = new MapedFile("./unit_test_store/MapedFileTest/10086", 1024 * 64);
boolean result = mapedFile.appendMessage(StoreMessage.getBytes());
assertTrue(result);
System.out.println("write OK");
SelectMapedBufferResult selectMapedBufferResult = mapedFile.selectMapedBuffer(0);
selectMapedBufferResult.release();
mapedFile.shutdown(1000);
byte[] data = new byte[StoreMessage.length()];
selectMapedBufferResult.getByteBuffer().get(data);
String readString = new String(data);
System.out.println(readString);
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}