/** * Copyright (C) 2000-2016 Atomikos <info@atomikos.com> * * LICENSE CONDITIONS * * See http://www.atomikos.com/Main/WhichLicenseApplies for details. */ package com.atomikos.icatch.imp; 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.event.EventListener; import com.atomikos.icatch.event.transaction.TransactionAbortedEvent; import com.atomikos.icatch.event.transaction.TransactionCommittedEvent; import com.atomikos.icatch.event.transaction.TransactionCreatedEvent; import com.atomikos.icatch.event.transaction.TransactionHeuristicEvent; import com.atomikos.icatch.event.transaction.TransactionReadOnlyEvent; import com.atomikos.publish.EventPublisher; public class TransactionEventTestJUnit { private static final String ID = "id"; private CoordinatorImp coordinator; private EventListener eventListenerMock; private CoordinatorImp createCoordinator() { return new CoordinatorImp ( ID , null , false , 1000 , false , true ); } @Before public void setUp() throws Exception { eventListenerMock = Mockito.mock(EventListener.class); } @Test public void testTansactionCreatedEvent() throws Exception { EventPublisher.registerEventListener(eventListenerMock); coordinator = createCoordinator(); Mockito.verify(eventListenerMock, Mockito.times(1)).eventOccurred(Mockito.any(TransactionCreatedEvent.class)); coordinator.rollback(); } @Test public void testTransactionCommittedEvent() throws Exception { coordinator = createCoordinator(); EventPublisher.registerEventListener(eventListenerMock); coordinator.commit(true); Mockito.verify(eventListenerMock, Mockito.times(1)).eventOccurred(Mockito.any(TransactionCommittedEvent.class)); } @Test public void testTransactionAbortedEvent() throws Exception { coordinator = createCoordinator(); EventPublisher.registerEventListener(eventListenerMock); coordinator.rollback(); Mockito.verify(eventListenerMock, Mockito.times(1)).eventOccurred(Mockito.any(TransactionAbortedEvent.class)); } @Test public void testTransactionReadOnlyEvent() throws Exception { coordinator = createCoordinator(); EventPublisher.registerEventListener(eventListenerMock); coordinator.addParticipant(new ReadOnlyParticipant()); coordinator.addParticipant(new ReadOnlyParticipant()); coordinator.prepare(); Mockito.verify(eventListenerMock, Mockito.times(1)).eventOccurred(Mockito.any(TransactionReadOnlyEvent.class)); } @Test public void testHeuristicTransactionEventWithHeurMixed() throws Exception { coordinator = createCoordinator(); EventPublisher.registerEventListener(eventListenerMock); coordinator.addParticipant(createHeuristicCommitParticipant(new HeurMixedException())); coordinator.addParticipant(createHeuristicCommitParticipant(new HeurMixedException())); coordinator.prepare(); coordinator.commit(false); Mockito.verify(eventListenerMock, Mockito.times(1)).eventOccurred(Mockito.any(TransactionHeuristicEvent.class)); } @Test public void testHeuristicTransactionEventWithHeurHazard() throws Exception { coordinator = createCoordinator(); EventPublisher.registerEventListener(eventListenerMock); coordinator.addParticipant(createHeuristicCommitParticipant(new HeurHazardException())); coordinator.addParticipant(createHeuristicCommitParticipant(new HeurHazardException())); coordinator.prepare(); coordinator.commit(false); Mockito.verify(eventListenerMock, Mockito.times(1)).eventOccurred(Mockito.any(TransactionHeuristicEvent.class)); } @Test public void testHeuristicTransactionEventWithHeurAborted() throws Exception { coordinator = createCoordinator(); EventPublisher.registerEventListener(eventListenerMock); coordinator.addParticipant(createHeuristicCommitParticipant(new HeurRollbackException())); coordinator.addParticipant(createHeuristicCommitParticipant(new HeurRollbackException())); coordinator.prepare(); coordinator.commit(false); Mockito.verify(eventListenerMock, Mockito.times(1)).eventOccurred(Mockito.any(TransactionHeuristicEvent.class)); } @Test public void testHeuristicTransactionEventWithHeurCommitted() throws Exception { coordinator = createCoordinator(); EventPublisher.registerEventListener(eventListenerMock); coordinator.addParticipant(createHeuristicRollbackParticipant(new HeurCommitException())); coordinator.addParticipant(createHeuristicRollbackParticipant(new HeurCommitException())); coordinator.prepare(); coordinator.rollback(); Mockito.verify(eventListenerMock, Mockito.times(1)).eventOccurred(Mockito.any(TransactionHeuristicEvent.class)); } private Participant createHeuristicCommitParticipant( Exception heurException) throws Exception { Participant ret = Mockito.mock(Participant.class); Mockito.doThrow(heurException).when(ret).commit(false); return ret; } private Participant createHeuristicRollbackParticipant( Exception heurException) throws Exception { Participant ret = Mockito.mock(Participant.class); Mockito.doThrow(heurException).when(ret).rollback(); return ret; } }