import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import com.google.common.util.concurrent.FutureCallback;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.opendaylight.mdsal.dom.api.DOMDataBroker;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
import org.opendaylight.mdsal.dom.api.DOMTransactionChainClosedException;
-import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
import org.opendaylight.yangtools.concepts.Registration;
+import org.opendaylight.yangtools.yang.common.Empty;
@RunWith(MockitoJUnitRunner.StrictStubs.class)
public class TxChainTest {
@Mock
private DOMDataBroker broker;
@Mock
- private DOMTransactionChainListener listener;
+ private FutureCallback<Empty> listener;
@Mock
private DOMDataTreeReadTransaction readOnlyTx;
@Mock
when(writeOnlyTx1.addListener(any())).thenReturn(registration1);
when(writeOnlyTx2.addListener(any())).thenReturn(registration2);
when(writeOnlyTx3.addListener(any())).thenReturn(registration3);
- chain = new TxChain(broker, listener);
+ chain = new TxChain(broker);
+ chain.addCallback(listener);
}
@Test
@Test
public void testCloseAfterFinished() {
chain.close();
- verify(listener).onTransactionChainSuccessful(chain);
+ verify(listener).onSuccess(Empty.value());
assertThrows(DOMTransactionChainClosedException.class, chain::newReadOnlyTransaction);
}
final TransactionCommitFailedException cause = new TransactionCommitFailedException("fail");
captor.getValue().onTransactionFailed(writeOnlyTx1, cause);
verify(registration1).close();
- verify(listener).onTransactionChainFailed(chain, writeOnlyTx1, cause);
+ verify(listener).onFailure(cause);
}
@Test
writeTx.commit();
captor.getValue().onTransactionSuccessful(writeOnlyTx1);
verify(registration1).close();
- verify(listener).onTransactionChainSuccessful(chain);
+ verify(listener).onSuccess(Empty.value());
}
@Test
public void testMultiplePendingTransactions() {
//create 1st tx
final AbstractWriteTx writeTx1 = chain.newWriteOnlyTransaction();
- final ArgumentCaptor<TxListener> captor1 = ArgumentCaptor.forClass(TxListener.class);
+ final var captor1 = ArgumentCaptor.forClass(TxListener.class);
verify(writeOnlyTx1).addListener(captor1.capture());
//submit 1st tx
writeTx1.commit();
//create 2nd tx
final AbstractWriteTx writeTx2 = chain.newWriteOnlyTransaction();
- final ArgumentCaptor<TxListener> captor2 = ArgumentCaptor.forClass(TxListener.class);
+ final var captor2 = ArgumentCaptor.forClass(TxListener.class);
verify(writeTx2).addListener(captor2.capture());
//submit 2nd tx
writeTx2.commit();
//create 3rd tx
final AbstractWriteTx writeTx3 = chain.newWriteOnlyTransaction();
- final ArgumentCaptor<TxListener> captor3 = ArgumentCaptor.forClass(TxListener.class);
+ final var captor3 = ArgumentCaptor.forClass(TxListener.class);
verify(writeTx3).addListener(captor3.capture());
//cancel 3rd tx
writeTx3.cancel();
verify(registration1).close();
verify(registration2).close();
verify(registration3).close();
- verify(listener).onTransactionChainSuccessful(chain);
+ verify(listener).onSuccess(Empty.value());
}
@Test
public void testMultiplePendingTransactionsFail() {
//create 1st tx
final AbstractWriteTx writeTx1 = chain.newWriteOnlyTransaction();
- final ArgumentCaptor<TxListener> captor1 = ArgumentCaptor.forClass(TxListener.class);
+ final var captor1 = ArgumentCaptor.forClass(TxListener.class);
verify(writeOnlyTx1).addListener(captor1.capture());
//submit 1st tx
writeTx1.commit();
//create 2nd tx
final AbstractWriteTx writeTx2 = chain.newWriteOnlyTransaction();
- final ArgumentCaptor<TxListener> captor2 = ArgumentCaptor.forClass(TxListener.class);
+ final var captor2 = ArgumentCaptor.forClass(TxListener.class);
verify(writeTx2).addListener(captor2.capture());
//submit 2nd tx
writeTx2.commit();
//create 3rd tx
final AbstractWriteTx writeTx3 = chain.newWriteOnlyTransaction();
- final ArgumentCaptor<TxListener> captor3 = ArgumentCaptor.forClass(TxListener.class);
+ final var captor3 = ArgumentCaptor.forClass(TxListener.class);
verify(writeTx3).addListener(captor3.capture());
chain.close();
verify(registration1).close();
verify(registration2).close();
verify(registration3).close();
- verify(listener).onTransactionChainFailed(chain, writeOnlyTx1, cause1);
+ verify(listener).onFailure(cause1);
// 1 transaction failed, onTransactionChainSuccessful must not be called
- verify(listener, never()).onTransactionChainSuccessful(chain);
+ verify(listener, never()).onSuccess(any());
}
}