- @Test(expected=IllegalArgumentException.class)
- public void testCommitWithIllegalArgumentEx() throws Throwable {
- doThrow(new IllegalArgumentException("mock")).when(mockDataTree).commit(any(DataTreeCandidateTip.class));
- try {
- cohort.commit().get();
- } catch (ExecutionException e) {
- throw e.getCause();
- }
+ @Test
+ public void testPreCommitWithReportedFailure() throws Throwable {
+ canCommitSuccess();
+
+ final Exception cause = new IllegalArgumentException("mock");
+ cohort.reportFailure(cause);
+
+ @SuppressWarnings("unchecked")
+ final FutureCallback<DataTreeCandidate> callback = mock(FutureCallback.class);
+ cohort.preCommit(callback);
+
+ verify(callback).onFailure(cause);
+ verifyNoMoreInteractions(callback);
+
+ verify(mockShardDataTree, never()).startPreCommit(cohort);
+ }
+
+ @Test
+ public void testCommitWithIllegalArgumentEx() {
+ canCommitSuccess();
+ final DataTreeCandidateTip candidate = preCommitSuccess();
+
+ final Exception cause = new IllegalArgumentException("mock");
+ doAnswer(invocation -> {
+ invocation.getArgumentAt(0, SimpleShardDataTreeCohort.class).failedCommit(cause);
+ return null;
+ }).when(mockShardDataTree).startCommit(cohort, candidate);
+
+ @SuppressWarnings("unchecked")
+ final FutureCallback<UnsignedLong> callback = mock(FutureCallback.class);
+ cohort.commit(callback);
+
+ verify(callback).onFailure(cause);
+ verifyNoMoreInteractions(callback);
+
+ verify(mockUserCohorts).abort();