@Test public void testSequentialGroup() throws Exception { // final ModelNode result = new ModelNode(); final BlockingOperationListener listener = new BlockingOperationListener(CLIENTS); final List<TestUpdateWrapper> wrappers = createTestClients(CLIENTS); for (final TestUpdateWrapper update : wrappers) { // Execute a single operation final TransactionalProtocolClient client = update.getClient(); client.execute(listener, update); // Wait for the operation to reach the prepared state final TransactionalProtocolClient.PreparedOperation<TestUpdateWrapper> prepared = listener.retrievePreparedOperation(); assert !prepared.isFailed(); assert !prepared.isDone(); // Check that the controller is locked in the prepared state final MockController controller = update.getController(); assert controller.lock.isLocked(); // Commit prepared.commit(); // Block until we have the result final ModelNode finalResult = prepared.getFinalResult().get().getResponseNode(); assert prepared.isDone(); assert !controller.lock.isLocked(); final int id = prepared.getOperation().getId(); result.get("" + id).set(finalResult); // onto to the next operation } for (int i = 0; i < CLIENTS; i++) { assert result.hasDefined("" + i); assert result.get("" + i).hasDefined(ModelDescriptionConstants.OUTCOME); } }
@Test public void testClosePrepared() throws Exception { final BlockingOperationListener listener = new BlockingOperationListener(); final TestOperationHandler handler = new TestOperationHandler() { @Override public void execute( ModelNode operation, OperationMessageHandler handler, OperationAttachments attachments) throws Exception { // } }; final TestUpdateWrapper wrapper = createTestClient(0, handler); final Future<OperationResponse> futureResult = wrapper.execute(listener); listener.retrievePreparedOperation(); futureConnection.get().close(); try { futureResult.get(); Assert.fail(); } catch (CancellationException expected) { // } }
@Test public void testConcurrentGroup() throws Exception { // final BlockingOperationListener listener = new BlockingOperationListener(CLIENTS); final List<TestUpdateWrapper> wrappers = createTestClients(CLIENTS); // First execute all operations for (final TestUpdateWrapper update : wrappers) { final TransactionalProtocolClient client = update.getClient(); client.execute(listener, update); } // Now wait for all operations to be prepared final List<TransactionalProtocolClient.PreparedOperation<TestUpdateWrapper>> preparedOps = new ArrayList<TransactionalProtocolClient.PreparedOperation<TestUpdateWrapper>>(); for (int i = 0; i < CLIENTS; i++) { // Wait for 10 prepared results final TransactionalProtocolClient.PreparedOperation<TestUpdateWrapper> prepared = listener.retrievePreparedOperation(); assert !prepared.isFailed(); assert !prepared.isDone(); // Check that the controller is locked in the prepared state final MockController controller = prepared.getOperation().getController(); assert controller.lock.isLocked(); // Commit all prepared.commit(); preparedOps.add(prepared); } final ModelNode result = new ModelNode(); // Now we just need to get the final results for (final TransactionalProtocolClient.PreparedOperation<TestUpdateWrapper> prepared : preparedOps) { // Block until we have the result final ModelNode finalResult = prepared.getFinalResult().get().getResponseNode(); final MockController controller = prepared.getOperation().getController(); assert prepared.isDone(); assert !controller.lock.isLocked(); final int id = prepared.getOperation().getId(); result.get("" + id).set(finalResult); } for (int i = 0; i < CLIENTS; i++) { assert result.hasDefined("" + i); assert result.get("" + i).hasDefined(ModelDescriptionConstants.OUTCOME); } }
@Test public void testSimpleRequest() throws Exception { // final TestUpdateWrapper update = createTestClient(0); final TransactionalProtocolClient client = update.getClient(); final BlockingOperationListener listener = new BlockingOperationListener(); client.execute(listener, update); // final TransactionalProtocolClient.PreparedOperation<TestUpdateWrapper> prepared = listener.retrievePreparedOperation(); assert !prepared.isFailed(); assert !prepared.isDone(); // Commit prepared.commit(); // Block until we have the result final ModelNode result = prepared.getFinalResult().get().getResponseNode(); assert result.hasDefined(ModelDescriptionConstants.OUTCOME); assert prepared.isDone(); }