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()); |