/** * This is separated from execution so that we can detect and handle the case where the * subprocedure is invalid and inactionable due to bad info (like DISABLED snapshot type being * sent here) * @param opName * @param data * @return subprocedure */ public Subprocedure createSubprocedure(String opName, byte[] data) { return builder.buildSubprocedure(opName, data); }
private void verifyCohortSuccessful(List<String> cohortNames, SubprocedureFactory subprocFactory, Iterable<Subprocedure> cohortTasks, VerificationMode prepare, VerificationMode commit, VerificationMode cleanup, VerificationMode finish, boolean opHasError) throws Exception { // make sure we build the correct number of cohort members Mockito.verify(subprocFactory, Mockito.times(cohortNames.size())).buildSubprocedure( Mockito.eq(opName), (byte[]) Mockito.argThat(new ArrayEquals(data))); // verify that we ran each of the operations cleanly int j = 0; for (Subprocedure op : cohortTasks) { LOG.debug("Checking mock:" + (j++)); waitAndVerifySubproc(op, prepare, commit, cleanup, finish, opHasError); } }
/** * Setup a procedure member that returns the spied-upon {@link Subprocedure}. */ private void buildCohortMemberPair() throws IOException { dispatcher = new ForeignExceptionDispatcher(); String name = "node"; ThreadPoolExecutor pool = ProcedureMember.defaultPool(name, 1, POOL_KEEP_ALIVE); member = new ProcedureMember(mockMemberComms, pool, mockBuilder); when(mockMemberComms.getMemberName()).thenReturn("membername"); // needed for generating exception Subprocedure subproc = new EmptySubprocedure(member, dispatcher); spySub = spy(subproc); when(mockBuilder.buildSubprocedure(op, data)).thenReturn(spySub); addCommitAnswer(); }
/** * Test the normal sub procedure execution case. */ @Test public void testSimpleRun() throws Exception { member = buildCohortMember(); EmptySubprocedure subproc = new EmptySubprocedure(member, mockListener); EmptySubprocedure spy = spy(subproc); when(mockBuilder.buildSubprocedure(op, data)).thenReturn(spy); // when we get a prepare, then start the commit phase addCommitAnswer(); // run the operation // build a new operation Subprocedure subproc1 = member.createSubprocedure(op, data); member.submitSubprocedure(subproc1); // and wait for it to finish subproc.waitForLocallyCompleted(); // make sure everything ran in order InOrder order = inOrder(mockMemberComms, spy); order.verify(spy).acquireBarrier(); order.verify(mockMemberComms).sendMemberAcquired(eq(spy)); order.verify(spy).insideBarrier(); order.verify(mockMemberComms).sendMemberCompleted(eq(spy), eq(data)); order.verify(mockMemberComms, never()).sendMemberAborted(eq(spy), any()); }
Subprocedure commit = new EmptySubprocedure(member, dispatcher); Subprocedure spy = spy(commit); when(mockBuilder.buildSubprocedure(op, data)).thenReturn(spy);
public void testNoTaskToBeRunFromRequest() throws Exception { ThreadPoolExecutor pool = mock(ThreadPoolExecutor.class); when(mockBuilder.buildSubprocedure(op, data)).thenReturn(null) .thenThrow(new IllegalStateException("Wrong state!"), new IllegalArgumentException("can't understand the args")); member = new ProcedureMember(mockMemberComms, pool, mockBuilder);
Mockito.when(subprocFactory.buildSubprocedure(Mockito.eq(opName), (byte[]) Mockito.argThat(new ArrayEquals(data)))).thenAnswer( new Answer<Subprocedure>() {
subprocFactory.buildSubprocedure(Mockito.eq(opName), (byte[]) Mockito.argThat(new ArrayEquals(data)))).thenAnswer( new Answer<Subprocedure>() {
/** * This is separated from execution so that we can detect and handle the case where the * subprocedure is invalid and inactionable due to bad info (like DISABLED snapshot type being * sent here) * @param opName * @param data * @return subprocedure */ public Subprocedure createSubprocedure(String opName, byte[] data) { return builder.buildSubprocedure(opName, data); }
/** * This is separated from execution so that we can detect and handle the case where the * subprocedure is invalid and inactionable due to bad info (like DISABLED snapshot type being * sent here) * @param opName * @param data * @return subprocedure */ public Subprocedure createSubprocedure(String opName, byte[] data) { return builder.buildSubprocedure(opName, data); }
private void verifyCohortSuccessful(List<String> cohortNames, SubprocedureFactory subprocFactory, Iterable<Subprocedure> cohortTasks, VerificationMode prepare, VerificationMode commit, VerificationMode cleanup, VerificationMode finish, boolean opHasError) throws Exception { // make sure we build the correct number of cohort members Mockito.verify(subprocFactory, Mockito.times(cohortNames.size())).buildSubprocedure( Mockito.eq(opName), (byte[]) Mockito.argThat(new ArrayEquals(data))); // verify that we ran each of the operations cleanly int j = 0; for (Subprocedure op : cohortTasks) { LOG.debug("Checking mock:" + (j++)); waitAndVerifySubproc(op, prepare, commit, cleanup, finish, opHasError); } }
/** * Setup a procedure member that returns the spied-upon {@link Subprocedure}. */ private void buildCohortMemberPair() throws IOException { dispatcher = new ForeignExceptionDispatcher(); String name = "node"; ThreadPoolExecutor pool = ProcedureMember.defaultPool(name, 1, POOL_KEEP_ALIVE); member = new ProcedureMember(mockMemberComms, pool, mockBuilder); when(mockMemberComms.getMemberName()).thenReturn("membername"); // needed for generating exception Subprocedure subproc = new EmptySubprocedure(member, dispatcher); spySub = spy(subproc); when(mockBuilder.buildSubprocedure(op, data)).thenReturn(spySub); addCommitAnswer(); }
/** * Test the normal sub procedure execution case. */ @Test public void testSimpleRun() throws Exception { member = buildCohortMember(); EmptySubprocedure subproc = new EmptySubprocedure(member, mockListener); EmptySubprocedure spy = spy(subproc); when(mockBuilder.buildSubprocedure(op, data)).thenReturn(spy); // when we get a prepare, then start the commit phase addCommitAnswer(); // run the operation // build a new operation Subprocedure subproc1 = member.createSubprocedure(op, data); member.submitSubprocedure(subproc1); // and wait for it to finish subproc.waitForLocallyCompleted(); // make sure everything ran in order InOrder order = inOrder(mockMemberComms, spy); order.verify(spy).acquireBarrier(); order.verify(mockMemberComms).sendMemberAcquired(eq(spy)); order.verify(spy).insideBarrier(); order.verify(mockMemberComms).sendMemberCompleted(eq(spy), eq(data)); order.verify(mockMemberComms, never()).sendMemberAborted(eq(spy), any()); }
Subprocedure commit = new EmptySubprocedure(member, dispatcher); Subprocedure spy = spy(commit); when(mockBuilder.buildSubprocedure(op, data)).thenReturn(spy);
public void testNoTaskToBeRunFromRequest() throws Exception { ThreadPoolExecutor pool = mock(ThreadPoolExecutor.class); when(mockBuilder.buildSubprocedure(op, data)).thenReturn(null) .thenThrow(new IllegalStateException("Wrong state!"), new IllegalArgumentException("can't understand the args")); member = new ProcedureMember(mockMemberComms, pool, mockBuilder);
Mockito.when(subprocFactory.buildSubprocedure(Mockito.eq(opName), (byte[]) Mockito.argThat(new ArrayEquals(data)))).thenAnswer( new Answer<Subprocedure>() {
subprocFactory.buildSubprocedure(Mockito.eq(opName), (byte[]) Mockito.argThat(new ArrayEquals(data)))).thenAnswer( new Answer<Subprocedure>() {