/**
* Copyright 2016, Xiaomi.
* All rights reserved.
* Author: xiajun@xiaomi.com
*/
package com.xiaomi.infra.galaxy.lcs.log.core.transaction;
import org.junit.Before;
import org.junit.Test;
public class TransactionTest {
private class TestTransaction extends Transaction<String> {
@Override
protected void doInitTransaction() {
}
@Override
protected void doStartTransaction() {
}
@Override
protected String doTake() {
return null;
}
@Override
protected void doCommitTransaction() {
}
@Override
protected void doRollbackTransaction() {
}
@Override
protected void doCloseTransaction() {
}
}
private static TestTransaction transaction;
@Before
public void setUp() throws Exception {
transaction = new TestTransaction();
}
@Test
public void testTransaction() throws Exception {
transaction.initTransaction();
transaction.closeTransaction();
}
@Test
public void testTransaction1() throws Exception {
// commit && commit
transaction.initTransaction();
transaction.startTransaction();
transaction.take();
transaction.commitTransaction();
transaction.startTransaction();
transaction.take();
transaction.commitTransaction();
transaction.closeTransaction();
}
@Test
public void testTransaction2() throws Exception {
// rollback && rollback
transaction.initTransaction();
transaction.startTransaction();
transaction.take();
transaction.rollbackTransaction();
transaction.startTransaction();
transaction.take();
transaction.rollbackTransaction();
transaction.closeTransaction();
}
@Test
public void testTransaction3() throws Exception {
// commit && rollback
transaction.initTransaction();
transaction.startTransaction();
transaction.take();
transaction.commitTransaction();
transaction.startTransaction();
transaction.take();
transaction.rollbackTransaction();
transaction.closeTransaction();
}
@Test
public void testTransaction4() throws Exception {
// rollback && commit
transaction.initTransaction();
transaction.startTransaction();
transaction.take();
transaction.rollbackTransaction();
transaction.startTransaction();
transaction.take();
transaction.commitTransaction();
transaction.closeTransaction();
}
@Test (expected = RuntimeException.class)
public void testTransactionWithoutInitAndStart() throws Exception {
transaction.startTransaction();
}
@Test (expected = RuntimeException.class)
public void testTransactionWithoutInitAndClose() throws Exception {
transaction.closeTransaction();
}
@Test (expected = RuntimeException.class)
public void testTransactionWithoutStartAndTake() throws Exception {
transaction.initTransaction();
transaction.take();
}
@Test (expected = RuntimeException.class)
public void testTransactionWithoutStartAndCommit() throws Exception {
transaction.initTransaction();
transaction.commitTransaction();
}
@Test (expected = RuntimeException.class)
public void testTransactionWithoutStartAndRollback() throws Exception {
transaction.initTransaction();
transaction.rollbackTransaction();
}
@Test (expected = RuntimeException.class)
public void testTransactionWithoutTakeAndCommit() throws Exception {
transaction.initTransaction();
transaction.startTransaction();
transaction.commitTransaction();
}
@Test (expected = RuntimeException.class)
public void testTransactionWithoutTakeAndRollback() throws Exception {
transaction.initTransaction();
transaction.startTransaction();
transaction.rollbackTransaction();
}
@Test (expected = RuntimeException.class)
public void testTransactionWithoutTakeAndClose() throws Exception {
transaction.initTransaction();
transaction.startTransaction();
transaction.closeTransaction();
}
@Test (expected = RuntimeException.class)
public void testTransactionWithoutCommit() throws Exception {
transaction.initTransaction();
transaction.startTransaction();
transaction.take();
transaction.startTransaction();
}
@Test (expected = RuntimeException.class)
public void testTransactionWithoutCommitAndClose() throws Exception {
transaction.initTransaction();
transaction.startTransaction();
transaction.take();
transaction.closeTransaction();
}
}