| Index: mojo/android/javatests/src/org/chromium/mojo/system/impl/CoreImplTest.java
|
| diff --git a/mojo/android/javatests/src/org/chromium/mojo/system/impl/CoreImplTest.java b/mojo/android/javatests/src/org/chromium/mojo/system/impl/CoreImplTest.java
|
| index 9c4718c7a4ab383d7e938ed9a388cd5cb192078b..b35e1198b4bce313fc43144b7e160e06628dcfc8 100644
|
| --- a/mojo/android/javatests/src/org/chromium/mojo/system/impl/CoreImplTest.java
|
| +++ b/mojo/android/javatests/src/org/chromium/mojo/system/impl/CoreImplTest.java
|
| @@ -11,7 +11,10 @@ import org.chromium.mojo.system.AsyncWaiter;
|
| import org.chromium.mojo.system.AsyncWaiter.Callback;
|
| import org.chromium.mojo.system.AsyncWaiter.Cancellable;
|
| import org.chromium.mojo.system.Core;
|
| +import org.chromium.mojo.system.Core.HandleSignals;
|
| +import org.chromium.mojo.system.Core.HandleSignalsState;
|
| import org.chromium.mojo.system.Core.WaitManyResult;
|
| +import org.chromium.mojo.system.Core.WaitResult;
|
| import org.chromium.mojo.system.DataPipe;
|
| import org.chromium.mojo.system.Handle;
|
| import org.chromium.mojo.system.InvalidHandle;
|
| @@ -35,12 +38,14 @@ import java.util.concurrent.TimeUnit;
|
| * Testing the core API.
|
| */
|
| public class CoreImplTest extends MojoTestCase {
|
| -
|
| private static final long RUN_LOOP_TIMEOUT_MS = 5;
|
|
|
| private static final ScheduledExecutorService WORKER =
|
| Executors.newSingleThreadScheduledExecutor();
|
|
|
| + private static final HandleSignals ALL_SIGNALS =
|
| + HandleSignals.none().setPeerClosed(true).setReadable(true).setWritable(true);
|
| +
|
| private List<Handle> mHandlesToClose = new ArrayList<Handle>();
|
|
|
| /**
|
| @@ -101,8 +106,8 @@ public class CoreImplTest extends MojoTestCase {
|
|
|
| // Try to read into a small buffer.
|
| ByteBuffer receiveBuffer = ByteBuffer.allocateDirect(bytes.length / 2);
|
| - MessagePipeHandle.ReadMessageResult result = out.readMessage(
|
| - receiveBuffer, 0, MessagePipeHandle.ReadFlags.NONE);
|
| + MessagePipeHandle.ReadMessageResult result =
|
| + out.readMessage(receiveBuffer, 0, MessagePipeHandle.ReadFlags.NONE);
|
| assertEquals(MojoResult.RESOURCE_EXHAUSTED, result.getMojoResult());
|
| assertEquals(bytes.length, result.getMessageSize());
|
| assertEquals(0, result.getHandlesCount());
|
| @@ -118,7 +123,6 @@ public class CoreImplTest extends MojoTestCase {
|
| byte[] receivedBytes = new byte[result.getMessageSize()];
|
| receiveBuffer.get(receivedBytes);
|
| assertTrue(Arrays.equals(bytes, receivedBytes));
|
| -
|
| }
|
|
|
| private static void checkSendingData(DataPipe.ProducerHandle in, DataPipe.ConsumerHandle out) {
|
| @@ -136,6 +140,16 @@ public class CoreImplTest extends MojoTestCase {
|
| result = out.readData(null, DataPipe.ReadFlags.none().query(true));
|
| assertEquals(bytes.length, result);
|
|
|
| + // Peek data into a buffer.
|
| + ByteBuffer peekBuffer = ByteBuffer.allocateDirect(bytes.length);
|
| + result = out.readData(peekBuffer, DataPipe.ReadFlags.none().peek(true));
|
| + assertEquals(bytes.length, result);
|
| + assertEquals(0, peekBuffer.position());
|
| + assertEquals(bytes.length, peekBuffer.limit());
|
| + byte[] peekBytes = new byte[bytes.length];
|
| + peekBuffer.get(peekBytes);
|
| + assertTrue(Arrays.equals(bytes, peekBytes));
|
| +
|
| // Read into a buffer.
|
| ByteBuffer receiveBuffer = ByteBuffer.allocateDirect(bytes.length);
|
| result = out.readData(receiveBuffer, DataPipe.ReadFlags.NONE);
|
| @@ -177,8 +191,10 @@ public class CoreImplTest extends MojoTestCase {
|
| Pair<MessagePipeHandle, MessagePipeHandle> handles = core.createMessagePipe(null);
|
| addHandlePairToClose(handles);
|
|
|
| - List<Pair<Handle, Core.HandleSignals>> handlesToWaitOn = new ArrayList<
|
| - Pair<Handle, Core.HandleSignals>>();
|
| + // Test waiting on handles of a newly created message pipe - each should be writable, but
|
| + // not readable.
|
| + List<Pair<Handle, Core.HandleSignals>> handlesToWaitOn =
|
| + new ArrayList<Pair<Handle, Core.HandleSignals>>();
|
| handlesToWaitOn.add(
|
| new Pair<Handle, Core.HandleSignals>(handles.second, Core.HandleSignals.READABLE));
|
| handlesToWaitOn.add(
|
| @@ -186,7 +202,12 @@ public class CoreImplTest extends MojoTestCase {
|
| WaitManyResult result = core.waitMany(handlesToWaitOn, 0);
|
| assertEquals(MojoResult.OK, result.getMojoResult());
|
| assertEquals(1, result.getHandleIndex());
|
| + for (HandleSignalsState state : result.getSignalStates()) {
|
| + assertEquals(HandleSignals.WRITABLE, state.getSatisfiedSignals());
|
| + assertEquals(ALL_SIGNALS, state.getSatisfiableSignals());
|
| + }
|
|
|
| + // Same test, but swap the handles around.
|
| handlesToWaitOn.clear();
|
| handlesToWaitOn.add(
|
| new Pair<Handle, Core.HandleSignals>(handles.first, Core.HandleSignals.WRITABLE));
|
| @@ -195,6 +216,10 @@ public class CoreImplTest extends MojoTestCase {
|
| result = core.waitMany(handlesToWaitOn, 0);
|
| assertEquals(MojoResult.OK, result.getMojoResult());
|
| assertEquals(0, result.getHandleIndex());
|
| + for (HandleSignalsState state : result.getSignalStates()) {
|
| + assertEquals(HandleSignals.WRITABLE, state.getSatisfiedSignals());
|
| + assertEquals(ALL_SIGNALS, state.getSatisfiableSignals());
|
| + }
|
| }
|
|
|
| /**
|
| @@ -248,37 +273,53 @@ public class CoreImplTest extends MojoTestCase {
|
| Core core = CoreImpl.getInstance();
|
| Pair<MessagePipeHandle, MessagePipeHandle> handles = core.createMessagePipe(null);
|
| addHandlePairToClose(handles);
|
| - // Testing wait.
|
| - assertEquals(MojoResult.OK,
|
| - handles.first.wait(Core.HandleSignals.none().setReadable(true).setWritable(true),
|
| - 0));
|
| - assertEquals(MojoResult.OK, handles.first.wait(Core.HandleSignals.WRITABLE, 0));
|
| - assertEquals(MojoResult.DEADLINE_EXCEEDED,
|
| - handles.first.wait(Core.HandleSignals.READABLE, 0));
|
| + // Test waiting on handles of a newly created message pipe.
|
| + WaitResult waitResult = handles.first.wait(
|
| + Core.HandleSignals.none().setReadable(true).setWritable(true), 0);
|
| + assertEquals(MojoResult.OK, waitResult.getMojoResult());
|
| + assertEquals(
|
| + HandleSignals.WRITABLE, waitResult.getHandleSignalsState().getSatisfiedSignals());
|
| + assertEquals(ALL_SIGNALS, waitResult.getHandleSignalsState().getSatisfiableSignals());
|
| +
|
| + waitResult = handles.first.wait(Core.HandleSignals.WRITABLE, 0);
|
| + assertEquals(MojoResult.OK, waitResult.getMojoResult());
|
| + assertEquals(
|
| + HandleSignals.WRITABLE, waitResult.getHandleSignalsState().getSatisfiedSignals());
|
| + assertEquals(ALL_SIGNALS, waitResult.getHandleSignalsState().getSatisfiableSignals());
|
| +
|
| + waitResult = handles.first.wait(Core.HandleSignals.READABLE, 0);
|
| + assertEquals(MojoResult.DEADLINE_EXCEEDED, waitResult.getMojoResult());
|
| + assertEquals(
|
| + HandleSignals.WRITABLE, waitResult.getHandleSignalsState().getSatisfiedSignals());
|
| + assertEquals(ALL_SIGNALS, waitResult.getHandleSignalsState().getSatisfiableSignals());
|
|
|
| // Testing read on an empty pipe.
|
| - MessagePipeHandle.ReadMessageResult result = handles.first.readMessage(null, 0,
|
| - MessagePipeHandle.ReadFlags.NONE);
|
| - assertEquals(MojoResult.SHOULD_WAIT, result.getMojoResult());
|
| + MessagePipeHandle.ReadMessageResult readResult =
|
| + handles.first.readMessage(null, 0, MessagePipeHandle.ReadFlags.NONE);
|
| + assertEquals(MojoResult.SHOULD_WAIT, readResult.getMojoResult());
|
|
|
| // Closing a pipe while waiting.
|
| WORKER.schedule(new CloseHandle(handles.first), 10, TimeUnit.MILLISECONDS);
|
| - assertEquals(MojoResult.CANCELLED,
|
| - handles.first.wait(Core.HandleSignals.READABLE, 1000000L));
|
| + waitResult = handles.first.wait(Core.HandleSignals.READABLE, 1000000L);
|
| + assertEquals(MojoResult.CANCELLED, waitResult.getMojoResult());
|
| + assertEquals(
|
| + HandleSignals.none(), waitResult.getHandleSignalsState().getSatisfiedSignals());
|
| + assertEquals(
|
| + HandleSignals.none(), waitResult.getHandleSignalsState().getSatisfiableSignals());
|
|
|
| handles = core.createMessagePipe(null);
|
| addHandlePairToClose(handles);
|
|
|
| // Closing the other pipe while waiting.
|
| WORKER.schedule(new CloseHandle(handles.first), 10, TimeUnit.MILLISECONDS);
|
| - assertEquals(MojoResult.FAILED_PRECONDITION,
|
| - handles.second.wait(Core.HandleSignals.READABLE, 1000000L));
|
| + waitResult = handles.second.wait(Core.HandleSignals.READABLE, 1000000L);
|
| + assertEquals(MojoResult.FAILED_PRECONDITION, waitResult.getMojoResult());
|
|
|
| // Waiting on a closed pipe.
|
| - assertEquals(MojoResult.FAILED_PRECONDITION,
|
| - handles.second.wait(Core.HandleSignals.READABLE, 0));
|
| - assertEquals(MojoResult.FAILED_PRECONDITION,
|
| - handles.second.wait(Core.HandleSignals.WRITABLE, 0));
|
| + waitResult = handles.second.wait(Core.HandleSignals.READABLE, 0);
|
| + assertEquals(MojoResult.FAILED_PRECONDITION, waitResult.getMojoResult());
|
| + waitResult = handles.second.wait(Core.HandleSignals.WRITABLE, 0);
|
| + assertEquals(MojoResult.FAILED_PRECONDITION, waitResult.getMojoResult());
|
| }
|
|
|
| /**
|
| @@ -312,8 +353,8 @@ public class CoreImplTest extends MojoTestCase {
|
| handles.first.writeMessage(buffer, null, MessagePipeHandle.WriteFlags.NONE);
|
|
|
| ByteBuffer receiveBuffer = ByteBuffer.allocateDirect(1);
|
| - MessagePipeHandle.ReadMessageResult result = handles.second
|
| - .readMessage(receiveBuffer, 0, MessagePipeHandle.ReadFlags.NONE);
|
| + MessagePipeHandle.ReadMessageResult result =
|
| + handles.second.readMessage(receiveBuffer, 0, MessagePipeHandle.ReadFlags.NONE);
|
| assertEquals(MojoResult.RESOURCE_EXHAUSTED, result.getMojoResult());
|
| assertEquals(bytes.length, result.getMessageSize());
|
| assertEquals(0, result.getHandlesCount());
|
| @@ -330,15 +371,13 @@ public class CoreImplTest extends MojoTestCase {
|
| addHandlePairToClose(handles);
|
| addHandlePairToClose(handlesToShare);
|
|
|
| - handles.first.writeMessage(null,
|
| - Collections.<Handle> singletonList(handlesToShare.second),
|
| + handles.first.writeMessage(null, Collections.<Handle>singletonList(handlesToShare.second),
|
| MessagePipeHandle.WriteFlags.NONE);
|
| assertFalse(handlesToShare.second.isValid());
|
| MessagePipeHandle.ReadMessageResult readMessageResult =
|
| handles.second.readMessage(null, 1, MessagePipeHandle.ReadFlags.NONE);
|
| assertEquals(1, readMessageResult.getHandlesCount());
|
| - MessagePipeHandle newHandle = readMessageResult.getHandles().get(0)
|
| - .toMessagePipeHandle();
|
| + MessagePipeHandle newHandle = readMessageResult.getHandles().get(0).toMessagePipeHandle();
|
| addHandleToClose(newHandle);
|
| assertTrue(newHandle.isValid());
|
| checkSendingMessage(handlesToShare.first, newHandle);
|
| @@ -347,8 +386,8 @@ public class CoreImplTest extends MojoTestCase {
|
|
|
| private static void createAndCloseDataPipe(DataPipe.CreateOptions options) {
|
| Core core = CoreImpl.getInstance();
|
| - Pair<DataPipe.ProducerHandle, DataPipe.ConsumerHandle> handles = core.createDataPipe(
|
| - options);
|
| + Pair<DataPipe.ProducerHandle, DataPipe.ConsumerHandle> handles =
|
| + core.createDataPipe(options);
|
| handles.first.close();
|
| handles.second.close();
|
| }
|
| @@ -398,15 +437,14 @@ public class CoreImplTest extends MojoTestCase {
|
| // Writing a random 8 bytes message.
|
| byte[] bytes = new byte[8];
|
| random.nextBytes(bytes);
|
| - ByteBuffer buffer = handles.first.beginWriteData(bytes.length,
|
| - DataPipe.WriteFlags.NONE);
|
| + ByteBuffer buffer = handles.first.beginWriteData(bytes.length, DataPipe.WriteFlags.NONE);
|
| assertTrue(buffer.capacity() >= bytes.length);
|
| buffer.put(bytes);
|
| handles.first.endWriteData(bytes.length);
|
|
|
| // Read into a buffer.
|
| - ByteBuffer receiveBuffer = handles.second.beginReadData(bytes.length,
|
| - DataPipe.ReadFlags.NONE);
|
| + ByteBuffer receiveBuffer =
|
| + handles.second.beginReadData(bytes.length, DataPipe.ReadFlags.NONE);
|
| assertEquals(0, receiveBuffer.position());
|
| assertEquals(bytes.length, receiveBuffer.limit());
|
| byte[] receivedBytes = new byte[bytes.length];
|
| @@ -446,8 +484,8 @@ public class CoreImplTest extends MojoTestCase {
|
| assertEquals(bytes.length - nbBytesToDiscard, receiveBuffer.limit());
|
| byte[] receivedBytes = new byte[bytes.length - nbBytesToDiscard];
|
| receiveBuffer.get(receivedBytes);
|
| - assertTrue(Arrays.equals(Arrays.copyOfRange(bytes, nbBytesToDiscard, bytes.length),
|
| - receivedBytes));
|
| + assertTrue(Arrays.equals(
|
| + Arrays.copyOfRange(bytes, nbBytesToDiscard, bytes.length), receivedBytes));
|
| }
|
|
|
| /**
|
| @@ -513,8 +551,8 @@ public class CoreImplTest extends MojoTestCase {
|
| // Checking waitMany.
|
| exception = false;
|
| try {
|
| - List<Pair<Handle, Core.HandleSignals>> handles = new ArrayList<
|
| - Pair<Handle, Core.HandleSignals>>();
|
| + List<Pair<Handle, Core.HandleSignals>> handles =
|
| + new ArrayList<Pair<Handle, Core.HandleSignals>>();
|
| handles.add(Pair.create(handle, Core.HandleSignals.WRITABLE));
|
| core.waitMany(handles, 0);
|
| } catch (MojoException e) {
|
| @@ -530,7 +568,7 @@ public class CoreImplTest extends MojoTestCase {
|
| Pair<MessagePipeHandle, MessagePipeHandle> handles = core.createMessagePipe(null);
|
| addHandlePairToClose(handles);
|
| try {
|
| - handles.first.writeMessage(null, Collections.<Handle> singletonList(handle),
|
| + handles.first.writeMessage(null, Collections.<Handle>singletonList(handle),
|
| MessagePipeHandle.WriteFlags.NONE);
|
| MessagePipeHandle.ReadMessageResult readMessageResult =
|
| handles.second.readMessage(null, 1, MessagePipeHandle.ReadFlags.NONE);
|
| @@ -574,7 +612,6 @@ public class CoreImplTest extends MojoTestCase {
|
| public MojoException getException() {
|
| return mException;
|
| }
|
| -
|
| }
|
|
|
| /**
|
| @@ -596,8 +633,8 @@ public class CoreImplTest extends MojoTestCase {
|
| assertEquals(Integer.MIN_VALUE, asyncWaiterResult.getResult());
|
| assertEquals(null, asyncWaiterResult.getException());
|
|
|
| - handles.second.writeMessage(ByteBuffer.allocateDirect(1), null,
|
| - MessagePipeHandle.WriteFlags.NONE);
|
| + handles.second.writeMessage(
|
| + ByteBuffer.allocateDirect(1), null, MessagePipeHandle.WriteFlags.NONE);
|
| runLoopUntilIdle();
|
| assertNull(asyncWaiterResult.getException());
|
| assertEquals(MojoResult.OK, asyncWaiterResult.getResult());
|
| @@ -679,8 +716,8 @@ public class CoreImplTest extends MojoTestCase {
|
| assertEquals(Integer.MIN_VALUE, asyncWaiterResult.getResult());
|
| assertEquals(null, asyncWaiterResult.getException());
|
|
|
| - core.getDefaultAsyncWaiter().asyncWait(handles.first, Core.HandleSignals.READABLE,
|
| - RUN_LOOP_TIMEOUT_MS, asyncWaiterResult);
|
| + core.getDefaultAsyncWaiter().asyncWait(
|
| + handles.first, Core.HandleSignals.READABLE, RUN_LOOP_TIMEOUT_MS, asyncWaiterResult);
|
| assertEquals(Integer.MIN_VALUE, asyncWaiterResult.getResult());
|
| assertEquals(null, asyncWaiterResult.getException());
|
|
|
| @@ -718,8 +755,8 @@ public class CoreImplTest extends MojoTestCase {
|
| assertEquals(Integer.MIN_VALUE, asyncWaiterResult.getResult());
|
| assertEquals(null, asyncWaiterResult.getException());
|
|
|
| - handles.second.writeMessage(ByteBuffer.allocateDirect(1), null,
|
| - MessagePipeHandle.WriteFlags.NONE);
|
| + handles.second.writeMessage(
|
| + ByteBuffer.allocateDirect(1), null, MessagePipeHandle.WriteFlags.NONE);
|
| runLoopUntilIdle();
|
| assertEquals(Integer.MIN_VALUE, asyncWaiterResult.getResult());
|
| assertEquals(null, asyncWaiterResult.getException());
|
|
|