package jp.terasoluna.fw.collector;
import static org.junit.Assert.*;
import java.util.NoSuchElementException;
import jp.terasoluna.fw.collector.concurrent.ArrayBlockingQueueEx;
import jp.terasoluna.fw.collector.exception.CollectorExceptionHandlerStatus;
import jp.terasoluna.fw.collector.validate.ValidateErrorStatus;
import jp.terasoluna.fw.collector.vo.CollectorStatus;
import jp.terasoluna.fw.collector.vo.DataValueObject;
import jp.terasoluna.fw.exception.SystemException;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.test.util.ReflectionTestUtils;
public class AbstractCollector002Test {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
AbstractCollector.setVerbose(true);
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
AbstractCollector.setVerbose(false);
}
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
/**
*
*/
@Test
public void testExecute001() {
AbstractCollectorStubHasNext1<AbstractCollectorTestBean> col = new AbstractCollectorStubHasNext1<AbstractCollectorTestBean>();
// テスト
try {
col.execute();
} catch (SystemException e) {
assertNotNull(e);
assertEquals(SystemException.class, e.getClass());
return;
} finally {
col.close();
}
fail();
return;
}
/**
*
*/
@Test
public void testHasNext001() {
AbstractCollectorStubHasNext2<AbstractCollectorTestBean> col = new AbstractCollectorStubHasNext2<AbstractCollectorTestBean>();
// テスト
boolean result = col.hasNext();
col.close();
assertFalse(result);
}
/**
*
*/
@Test
public void testHasNext002() {
AbstractCollectorStubHasNext3<AbstractCollectorTestBean> col = new AbstractCollectorStubHasNext3<AbstractCollectorTestBean>();
// テスト
boolean result = col.hasNext();
col.close();
assertFalse(result);
}
/**
*
*/
@Test
public void testHasNext003() {
AbstractCollectorStubHasNext3<AbstractCollectorTestBean> col = new AbstractCollectorStubHasNext3<AbstractCollectorTestBean>();
// テスト
boolean result = col.hasNext();
col.close();
assertFalse(result);
}
/**
*
*/
@Test
public void testHasNext004() {
AbstractCollectorStubHasNext4<AbstractCollectorTestBean> col = new AbstractCollectorStubHasNext4<AbstractCollectorTestBean>();
// テスト
boolean result = col.hasNext();
col.close();
assertFalse(result);
}
/**
*
*/
@Test
public void testNext001() {
AbstractCollectorStubNext1<AbstractCollectorTestBean> col = new AbstractCollectorStubNext1<AbstractCollectorTestBean>();
AbstractCollectorTestBean result = null;
try {
result = col.next();
fail();
} catch (NoSuchElementException e) {
assertNotNull(e);
assertNull(result);
} finally {
col.close();
}
}
/**
*
*/
@Test
public void testNext002() {
AbstractCollectorStubNext2<AbstractCollectorTestBean> col = new AbstractCollectorStubNext2<AbstractCollectorTestBean>();
try {
col.next();
} catch (Exception e) {
assertNotNull(e);
assertEquals(SystemException.class, e.getClass());
assertEquals(Exception.class, e.getCause().getClass());
assertEquals(null, e.getCause().getMessage());
return;
} finally {
col.close();
}
fail();
}
/**
*
*/
@Test
public void testNext003() {
AbstractCollectorStubNext3<AbstractCollectorTestBean> col = new AbstractCollectorStubNext3<AbstractCollectorTestBean>();
try {
col.next();
} catch (Exception e) {
assertNotNull(e);
assertEquals(SystemException.class, e.getClass());
assertEquals(Exception.class, e.getCause().getClass());
assertEquals("hoge", e.getCause().getMessage());
return;
} finally {
col.close();
}
fail();
}
/**
*
*/
@Test
public void testNext004() {
AbstractCollectorStubNext4<AbstractCollectorTestBean> col = new AbstractCollectorStubNext4<AbstractCollectorTestBean>();
col.exceptionHandler = new CollectorExceptionHandlerStub1();
AbstractCollectorTestBean result = null;
try {
result = col.next();
fail();
} catch (NoSuchElementException e) {
assertNotNull(e);
assertNull(result);
} finally {
col.close();
}
}
/**
*
*/
@Test
public void testGetNext() {
AbstractCollectorStubGetNext1<AbstractCollectorTestBean> col = new AbstractCollectorStubGetNext1<AbstractCollectorTestBean>();
col.exceptionHandler = new CollectorExceptionHandlerStub1();
AbstractCollectorTestBean result = null;
try {
result = col.getNext();
fail();
} catch (Throwable throwable) {
// NOP
} finally {
col.close();
}
assertNull(result);
}
// @Test
// public void testGetPrevious() {
// fail("まだ実装されていません");
// }
//
// @Test
// public void testGetCurrent() {
// fail("まだ実装されていません");
// }
//
// @Test
// public void testClose() {
// fail("まだ実装されていません");
// }
//
// @Test
// public void testRemove() {
// fail("まだ実装されていません");
// }
//
// @Test
// public void testIterator() {
// fail("まだ実装されていません");
// }
//
// @Test
// public void testSetQueueSize() {
// // fail("まだ実装されていません");
// }
//
// @Test
// public void testGetSleepWait() {
// // fail("まだ実装されていません");
// }
//
// @Test
// public void testSetSleepWait() {
// // fail("まだ実装されていません");
// }
//
// @Test
// public void testCloseQuietly() {
// // fail("まだ実装されていません");
// }
/**
* hasNext()のテスト
* スキップ処理において、ValidateErrorStatusがSKIPの場合の動作確認
*/
@Test
public void testHasNext005() throws InterruptedException{
AbstractCollectorStubHasNext5<AbstractCollectorTestBean> col = new AbstractCollectorStubHasNext5<AbstractCollectorTestBean>(2);
DataValueObject vo1 = new DataValueObject("hoge");
DataValueObject skip = new DataValueObject(ValidateErrorStatus.SKIP);
col.addQueue(skip);
col.addQueue(vo1);
// テスト
boolean result = col.hasNext();
col.close();
assertTrue(result);
}
/**
* hasNext()のテスト
* スキップ処理において、ValidateErrorStatusがENDの場合の動作確認
*/
@Test
public void testHasNext006() throws InterruptedException{
AbstractCollectorStubHasNext5<AbstractCollectorTestBean> col = new AbstractCollectorStubHasNext5<AbstractCollectorTestBean>(2);
DataValueObject vo1 = new DataValueObject(new Object());
DataValueObject end = new DataValueObject(ValidateErrorStatus.END);
col.addQueue(end);
col.addQueue(vo1);
// テスト
boolean result = col.hasNext();
col.close();
assertFalse(result);
}
/**
* hasNext()のテスト
* スキップ処理において、例外が発生し、例外ハンドラの処理結果がSKIPとなった場合の動作確認
*/
@Test
public void testHasNext007() throws Exception {
AbstractCollectorStubHasNext5<AbstractCollectorTestBean> col = new AbstractCollectorStubHasNext5<AbstractCollectorTestBean>(
2, CollectorExceptionHandlerStatus.SKIP);
DataValueObject vo1 = new DataValueObject(new Object());
DataValueObject skip = new DataValueObject(new Exception("hasNext()テスト:例外ハンドラの処理結果SKIP"));
col.addQueue(skip);
col.addQueue(vo1);
// テスト
boolean result = col.hasNext();
col.close();
assertTrue(result);
}
/**
* hasNext()のテスト
* スキップ処理において、例外が発生し、例外ハンドラの処理結果がENDとなった場合の動作確認
*/
@Test
public void testHasNext008() throws Exception {
AbstractCollectorStubHasNext5<AbstractCollectorTestBean> col = new AbstractCollectorStubHasNext5<AbstractCollectorTestBean>(
2, CollectorExceptionHandlerStatus.END);
DataValueObject vo1 = new DataValueObject(new Object());
DataValueObject end = new DataValueObject(new Exception("hasNext()テスト:例外ハンドラの処理結果END"));
col.addQueue(end);
col.addQueue(vo1);
// テスト
boolean result = col.hasNext();
col.close();
assertFalse(result);
}
/**
* handleException()のテスト
* 判定済みでないDataValueObjectが渡された場合、exceptionHandler#handleExceptionの結果を返すことを確認
*/
@Test
public void testHandleException001() throws Exception {
AbstractCollectorStubHasNext5<AbstractCollectorTestBean> col = new AbstractCollectorStubHasNext5<AbstractCollectorTestBean>(
2, CollectorExceptionHandlerStatus.END);
DataValueObject end = new DataValueObject(new Exception("hasNext()テスト:例外ハンドラの処理結果END"));
// テスト
assertEquals(CollectorExceptionHandlerStatus.END, col.handleException(end));
assertEquals(CollectorExceptionHandlerStatus.END, end.getExceptionHandlerStatus());
col.close();
}
/**
* handleException()のテスト
* exceptionHandlerStatus に判定済みの結果が格納されている場合は、改めて判定は行わず判定済みの結果を返すことを確認。
* 本テストコードでは、handleExeption の結果が CollectorExceptionHandlerStatus.END となっていても
* 判定済みの結果 CollectorExceptionHandlerStatus.SKIP が返却されることを確認している。
*/
@Test
public void testHandleException002() throws Exception {
AbstractCollectorStubHasNext5<AbstractCollectorTestBean> col = new AbstractCollectorStubHasNext5<AbstractCollectorTestBean>(
2, CollectorExceptionHandlerStatus.END);
DataValueObject skip = new DataValueObject(new Exception("hasNext()テスト:例外ハンドラの処理結果SKIP"));
skip.setExceptionHandlerStatus(CollectorExceptionHandlerStatus.SKIP);
// テスト
assertEquals(skip.getExceptionHandlerStatus(), col.handleException(skip));
col.close();
}
/**
* handleException()のテスト
* exceptionHandler == nullのCollectorである場合、nullを返すことを確認
*/
@Test
public void testHandleException003() throws Exception {
AbstractCollectorStubHasNext5<AbstractCollectorTestBean> col = new AbstractCollectorStubHasNext5<AbstractCollectorTestBean>(2);
DataValueObject skip = new DataValueObject("hoge");
// テスト
assertNull(col.handleException(skip));
col.close();
}
/**
* setFinish()のテスト
* NotificationBlockingQueueのインスタンスである場合、
* キューに対しキューイングの終了を通知する処理を実行することを確認する
*/
@Test
public void testSetFinish001() throws Exception {
// AbstractCollectorStubSetFinish1ではArrayBlockingQueueを使用する
AbstractCollectorStubSetFinish1<AbstractCollectorTestBean> col = new AbstractCollectorStubSetFinish1<AbstractCollectorTestBean>();
// キューを作成する。キューはexecuteメソッド内でのみcreateされる。
col.execute();
// AbstractCollectorの終了フラグfinishを確認
boolean finish = (Boolean) ReflectionTestUtils.getField(col, "finish");
assertFalse(finish);
// テスト実施
col.setFinish();
// 終了フラグがキューに入っていることを確認
assertEquals(CollectorStatus.END, col.getQueue().peek().getCollectorStatus());
// finishQueueingFlagを確認。
// finishQueueingが実行されていればフラグはtrueになっているはず。
ArrayBlockingQueueEx<DataValueObject> arrayBlockingQueueEx = (ArrayBlockingQueueEx<DataValueObject>) col.getQueue();
boolean finishQueueingFlag = (Boolean) ReflectionTestUtils.getField(arrayBlockingQueueEx, "finishQueueingFlag");
assertTrue(finishQueueingFlag);
// AbstractCollectorの終了フラグfinishを確認
finish = (Boolean) ReflectionTestUtils.getField(col, "finish");
assertTrue(finish);
}
/**
* setFinish()のテスト
* NotificationBlockingQueueのインスタンスでない場合、
* キューに対しキューイングの終了を通知する処理を実行せず終了することを確認する
*/
@Test
public void testSetFinish002() throws Exception {
// AbstractCollectorStubSetFinish2ではArrayBlockingQueueを使用する
AbstractCollectorStubSetFinish2<AbstractCollectorTestBean> col = new AbstractCollectorStubSetFinish2<AbstractCollectorTestBean>();
// キューを作成する。キューはexecuteメソッド内でのみcreateされる。
col.execute();
// AbstractCollectorの終了フラグfinishを確認
boolean finish = (Boolean) ReflectionTestUtils.getField(col, "finish");
assertFalse(finish);
// テスト実施
col.setFinish();
// 終了フラグがキューに入っていることを確認
assertEquals(CollectorStatus.END, col.getQueue().peek().getCollectorStatus());
// AbstractCollectorの終了フラグfinishを確認
finish = (Boolean) ReflectionTestUtils.getField(col, "finish");
assertTrue(finish);
}
}