package org.springside.examples.showcase.unit.queue;
import static org.junit.Assert.*;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import org.junit.Test;
import org.springside.examples.showcase.queue.QueueConsumer;
import org.springside.examples.showcase.queue.QueuesHolder;
@SuppressWarnings("unchecked")
public class QueueTest {
@Test
public void backup() throws IOException, ClassNotFoundException, InterruptedException {
String queueName = "testBackup";
String filePath = System.getProperty("java.io.tmpdir") + File.separator + "queue" + File.separator + queueName;
BlockingQueue queue = QueuesHolder.getQueue(queueName);
Date date1 = new Date();
Date date2 = new Date();
queue.offer(date1);
queue.offer(date2);
MockConsumerTask task = new MockConsumerTask();
task.setQueueName(queueName);
task.start();
task.stop();
//判断存在持久化文件
File file = new File(filePath);
assertEquals(true, file.exists());
ObjectInputStream oos = new ObjectInputStream(new FileInputStream(file));
List list = new ArrayList();
while (true) {
try {
Object obj = oos.readObject();
list.add(obj);
} catch (EOFException e) {
break;
}
}
oos.close();
file.delete();
assertEquals(2, list.size());
assertEquals(date1, list.get(0));
}
@Test
public void restore() throws IOException, ClassNotFoundException, InterruptedException {
String queueName = "testRestore";
String filePath = System.getProperty("java.io.tmpdir") + File.separator + "queue" + File.separator + queueName;
BlockingQueue queue = QueuesHolder.getQueue(queueName);
Date date1 = new Date();
Date date2 = new Date();
queue.offer(date1);
queue.offer(date2);
MockConsumerTask task = new MockConsumerTask();
task.setQueueName(queueName);
task.start();
task.stop();
//判断存在持久化文件
File file = new File(filePath);
assertEquals(true, file.exists());
BlockingQueue newQueue = QueuesHolder.getQueue(queueName);
task.start();
List list = new ArrayList();
newQueue.drainTo(list);
assertEquals(2, list.size());
assertEquals(date1, list.get(0));
//判断存在持久化文件
file = new File(filePath);
assertEquals(false, file.exists());
}
static class MockConsumerTask extends QueueConsumer {
@Override
public void run() {
}
}
}