package org.infinispan.xsite.backupfailure.tx;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.fail;
import javax.transaction.xa.XAException;
import org.infinispan.configuration.cache.BackupFailurePolicy;
import org.infinispan.test.Exceptions;
import org.infinispan.xsite.AbstractTwoSitesTest;
import org.infinispan.xsite.backupfailure.BaseBackupFailureTest;
import org.testng.annotations.Test;
/**
* @author Mircea Markus
* @since 5.2
*/
@Test(groups = "xsite")
public abstract class BaseBackupTxFailureTest extends AbstractTwoSitesTest {
private BaseBackupFailureTest.FailureInterceptor failureInterceptor;
protected BaseBackupTxFailureTest() {
isLonBackupTransactional = true;
lonBackupFailurePolicy = BackupFailurePolicy.FAIL;
use2Pc = true;
}
@Override
protected void createSites() {
super.createSites();
failureInterceptor = new BaseBackupFailureTest.FailureInterceptor();
backup("LON").getAdvancedCache().getAsyncInterceptorChain().addInterceptor(failureInterceptor, 1);
}
@Test(groups = "unstable_xsite")
public void testPrepareFailure() {
failureInterceptor.enable();
try {
Exceptions.expectException(XAException.class, () -> cache("LON", 0).put("k", "v"));
} finally {
failureInterceptor.disable();
}
assertNull(cache("LON",0).get("k"));
assertNull(cache("LON",1).get("k"));
assertNull(backup("LON").get("k"));
assertEquals(0, txTable(cache("LON", 0)).getLocalTransactions().size());
assertEquals(0, txTable(cache("LON", 1)).getLocalTransactions().size());
assertEquals(0, txTable(backup("LON")).getLocalTransactions().size());
}
}