/**
* Copyright (C) 2000-2016 Atomikos <info@atomikos.com>
*
* LICENSE CONDITIONS
*
* See http://www.atomikos.com/Main/WhichLicenseApplies for details.
*/
package com.atomikos.icatch.tcc.rest;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import com.atomikos.icatch.HeurCommitException;
import com.atomikos.icatch.HeurHazardException;
import com.atomikos.icatch.HeurMixedException;
import com.atomikos.icatch.HeurRollbackException;
import com.atomikos.icatch.Participant;
import com.atomikos.icatch.RollbackException;
import com.atomikos.icatch.SysException;
public class TccParticipantTestJUnit {
private static final String URI = "bla";
private TccParticipant p;
private ParticipantAdapter mock;
@Before
public void setUp() throws Exception {
mock = Mockito.mock(ParticipantAdapter.class);
Mockito.when(mock.getUri()).thenReturn(URI);
long expires = System.currentTimeMillis() + 1000l;
Mockito.when(mock.getExpires()).thenReturn(expires);
p = new TccParticipant(mock);
}
@Test
public void testGetUri() {
assertEquals(URI, p.getURI());
}
@Test
public void testRollbackCallsHttpDelete() throws SysException, HeurCommitException, HeurMixedException, HeurHazardException, HeurRollbackException {
p.rollback();
Mockito.verify(mock).delete();
Mockito.verify(mock, Mockito.times(0)).put();
}
@Test
public void testCommitCallsHttpPut() throws SysException, HeurRollbackException, HeurHazardException, HeurMixedException, RollbackException {
p.commit(false);
Mockito.verify(mock).put();
Mockito.verify(mock, Mockito.times(0)).delete();
}
@Test
public void testPrepareReturnsNotReadOnly() throws SysException, RollbackException, HeurHazardException, HeurMixedException {
assertFalse(p.prepare()==Participant.READ_ONLY);
}
@Test
public void testPrepareCallsHttpOptions() throws SysException, RollbackException, HeurHazardException, HeurMixedException {
p.prepare();
Mockito.verify(mock).options();
}
@Test(expected=RollbackException.class)
public void testPrepareThrowsNearExpiry() throws SysException, RollbackException, HeurHazardException, HeurMixedException {
Mockito.when(mock.getExpires()).thenReturn(0l);
p.prepare();
}
@Test(expected=HeurRollbackException.class)
public void testCommitThrowsWhenAlreadyCanceled() throws SysException, HeurRollbackException, HeurHazardException, HeurMixedException, RollbackException {
Mockito.doThrow(new HeurRollbackException()).when(mock).put();
p.commit(false);
}
}