Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(536)

Unified Diff: mojo/android/javatests/src/org/chromium/mojo/system/impl/CoreImplTest.java

Issue 2750273002: Revert of Mojo EDK: Introduce MojoQueryHandleSignalsState API (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 5120198feb90dc5f1180f5f36879a141cf14d0dd..77a9bda248f115a772654d3c236aa4f95040d4bd 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
@@ -9,6 +9,9 @@
import org.chromium.mojo.MojoTestCase;
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;
@@ -27,6 +30,7 @@
import java.util.Random;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
/**
* Testing the core API.
@@ -72,6 +76,22 @@
mHandlesToClose.add(handles.second);
}
+ /**
+ * Runnable that will close the given handle.
+ */
+ private static class CloseHandle implements Runnable {
+ private Handle mHandle;
+
+ CloseHandle(Handle handle) {
+ mHandle = handle;
+ }
+
+ @Override
+ public void run() {
+ mHandle.close();
+ }
+ }
+
private static void checkSendingMessage(MessagePipeHandle in, MessagePipeHandle out) {
Random random = new Random();
@@ -164,6 +184,46 @@
}
/**
+ * Testing {@link Core#waitMany(List, long)}.
+ */
+ @SmallTest
+ public void testWaitMany() {
+ Core core = CoreImpl.getInstance();
+ Pair<MessagePipeHandle, MessagePipeHandle> handles = core.createMessagePipe(null);
+ addHandlePairToClose(handles);
+
+ // 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(
+ new Pair<Handle, Core.HandleSignals>(handles.first, Core.HandleSignals.WRITABLE));
+ 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));
+ handlesToWaitOn.add(
+ new Pair<Handle, Core.HandleSignals>(handles.second, Core.HandleSignals.READABLE));
+ 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());
+ }
+ }
+
+ /**
* Testing that Core can be retrieved from a handle.
*/
@SmallTest
@@ -214,14 +274,53 @@
Core core = CoreImpl.getInstance();
Pair<MessagePipeHandle, MessagePipeHandle> handles = core.createMessagePipe(null);
addHandlePairToClose(handles);
+ // 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.
ResultAnd<MessagePipeHandle.ReadMessageResult> readResult =
handles.first.readMessage(null, 0, MessagePipeHandle.ReadFlags.NONE);
assertEquals(MojoResult.SHOULD_WAIT, readResult.getMojoResult());
- handles.first.close();
- handles.second.close();
+ // Closing a pipe while waiting.
+ WORKER.schedule(new CloseHandle(handles.first), 10, TimeUnit.MILLISECONDS);
+ 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);
+ waitResult = handles.second.wait(Core.HandleSignals.READABLE, 1000000L);
+ assertEquals(MojoResult.FAILED_PRECONDITION, waitResult.getMojoResult());
+
+ // Waiting on a closed pipe.
+ 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());
}
/**
@@ -441,6 +540,29 @@
Core core = CoreImpl.getInstance();
Handle handle = InvalidHandle.INSTANCE;
+ // Checking wait.
+ boolean exception = false;
+ try {
+ core.wait(handle, Core.HandleSignals.WRITABLE, 0);
+ } catch (MojoException e) {
+ assertEquals(MojoResult.INVALID_ARGUMENT, e.getMojoResult());
+ exception = true;
+ }
+ assertTrue(exception);
+
+ // Checking waitMany.
+ exception = false;
+ try {
+ 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) {
+ assertEquals(MojoResult.INVALID_ARGUMENT, e.getMojoResult());
+ exception = true;
+ }
+ assertTrue(exception);
+
// Checking sending an invalid handle.
// Until the behavior is changed on the C++ side, handle gracefully 2 different use case:
// - Receive a INVALID_ARGUMENT exception
« no previous file with comments | « mojo/android/javatests/src/org/chromium/mojo/bindings/RouterTest.java ('k') | mojo/android/system/core_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698