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

Side by Side Diff: mojo/android/javatests/src/org/chromium/mojo/bindings/RouterTest.java

Issue 371603003: Adding a router class to handle messages that expect responses. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: FOllow review Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.mojo.bindings;
6
7 import android.test.suitebuilder.annotation.SmallTest;
8
9 import org.chromium.mojo.MojoTestCase;
10 import org.chromium.mojo.bindings.BindingsTestUtils.CapturingErrorHandler;
11 import org.chromium.mojo.bindings.BindingsTestUtils.RecordingMessageReceiverWith Responder;
12 import org.chromium.mojo.system.Core;
13 import org.chromium.mojo.system.Handle;
14 import org.chromium.mojo.system.MessagePipeHandle;
15 import org.chromium.mojo.system.MojoResult;
16 import org.chromium.mojo.system.Pair;
17 import org.chromium.mojo.system.impl.CoreImpl;
18
19 import java.nio.ByteBuffer;
20 import java.util.ArrayList;
21
22 /**
23 * Testing {@link Router}
24 */
25 public class RouterTest extends MojoTestCase {
26
27 private static final long RUN_LOOP_TIMEOUT_MS = 25;
28
29 private MessagePipeHandle mHandle;
30 private Router mRouter;
31 private RecordingMessageReceiverWithResponder mReceiver;
32 private CapturingErrorHandler mErrorHandler;
33
34 /**
35 * @see MojoTestCase#setUp()
36 */
37 @Override
38 protected void setUp() throws Exception {
39 super.setUp();
40 Core core = CoreImpl.getInstance();
41 Pair<MessagePipeHandle, MessagePipeHandle> handles = core.createMessageP ipe();
42 mHandle = handles.first;
43 mRouter = new RouterImpl(handles.second);
44 mReceiver = new RecordingMessageReceiverWithResponder();
45 mRouter.setIncomingMessageReceiver(mReceiver);
46 mErrorHandler = new CapturingErrorHandler();
47 mRouter.setErrorHandler(mErrorHandler);
48 mRouter.start();
49 }
50
51 /**
52 * Testing sending a message via the router that expected a response.
53 */
54 @SmallTest
55 public void testSendingToRouterWithResponse() {
56 final int requestMessageType = 0xdead;
57 final int responseMessageType = 0xbeaf;
58
59 // Sending a message expecting a response.
60 MessageHeader header = new MessageHeader(requestMessageType,
61 MessageHeader.MESSAGE_EXPECTS_RESPONSE_FLAG, 0);
62 Encoder encoder = new Encoder(CoreImpl.getInstance(), header.getSize());
63 header.encode(encoder);
64 MessageWithHeader headerMessage = new MessageWithHeader(encoder.getMessa ge());
65 mRouter.acceptWithResponder(headerMessage, mReceiver);
66 ByteBuffer receiveBuffer = ByteBuffer.allocateDirect(header.getSize());
67 MessagePipeHandle.ReadMessageResult result = mHandle.readMessage(receive Buffer, 0,
68 MessagePipeHandle.ReadFlags.NONE);
69
70 assertEquals(MojoResult.OK, result.getMojoResult());
71 MessageHeader receivedHeader = new MessageWithHeader(
72 new Message(receiveBuffer, new ArrayList<Handle>()))
73 .getHeader();
74
75 assertEquals(header.getType(), receivedHeader.getType());
76 assertEquals(header.getFlags(), receivedHeader.getFlags());
77 assertTrue(receivedHeader.getRequestId() != 0);
78
79 // Sending the response.
80 MessageHeader responseHeader = new MessageHeader(responseMessageType,
81 MessageHeader.MESSAGE_IS_RESPONSE_FLAG, receivedHeader.getReques tId());
82 encoder = new Encoder(CoreImpl.getInstance(), header.getSize());
83 responseHeader.encode(encoder);
84 Message responseMessage = encoder.getMessage();
85 mHandle.writeMessage(responseMessage.buffer, new ArrayList<Handle>(),
86 MessagePipeHandle.WriteFlags.NONE);
87 nativeRunLoop(RUN_LOOP_TIMEOUT_MS);
88
89 assertEquals(1, mReceiver.messages.size());
90 MessageWithHeader receivedResponseMessage = mReceiver.messages.get(0);
91 assertEquals(MessageHeader.MESSAGE_IS_RESPONSE_FLAG,
92 receivedResponseMessage.getHeader().getFlags());
93 assertEquals(responseMessage.buffer, receivedResponseMessage.getMessage( ).buffer);
94 }
95
96 /**
97 * Testing receiving a message via the router that expected a response.
98 */
99 @SmallTest
100 public void testReceivingViaRouterWithResponse() {
101 final int requestMessageType = 0xdead;
102 final int responseMessageType = 0xbeef;
103 final int requestId = 0xdeadbeaf;
104
105 // Sending a message expecting a response.
106 MessageHeader header = new MessageHeader(requestMessageType,
107 MessageHeader.MESSAGE_EXPECTS_RESPONSE_FLAG, requestId);
108 Encoder encoder = new Encoder(CoreImpl.getInstance(), header.getSize());
109 header.encode(encoder);
110 Message headerMessage = encoder.getMessage();
111 mHandle.writeMessage(headerMessage.buffer, new ArrayList<Handle>(),
112 MessagePipeHandle.WriteFlags.NONE);
113 nativeRunLoop(RUN_LOOP_TIMEOUT_MS);
114
115 assertEquals(1, mReceiver.messagesWithReceivers.size());
116 Pair<MessageWithHeader, MessageReceiver> receivedMessage =
117 mReceiver.messagesWithReceivers.get(0);
118 assertEquals(headerMessage.buffer, receivedMessage.first.getMessage().bu ffer);
119
120 // Sending the response.
121 MessageHeader responseHeader = new MessageHeader(responseMessageType,
122 MessageHeader.MESSAGE_EXPECTS_RESPONSE_FLAG, requestId);
123 encoder = new Encoder(CoreImpl.getInstance(), header.getSize());
124 responseHeader.encode(encoder);
125 MessageWithHeader responseHeaderMessage = new MessageWithHeader(encoder. getMessage());
126 receivedMessage.second.accept(responseHeaderMessage);
127 ByteBuffer receivedResponseMessage = ByteBuffer.allocateDirect(responseH eader.getSize());
128 MessagePipeHandle.ReadMessageResult result = mHandle.readMessage(receive dResponseMessage, 0,
129 MessagePipeHandle.ReadFlags.NONE);
130
131 assertEquals(MojoResult.OK, result.getMojoResult());
132 assertEquals(responseHeaderMessage.getMessage().buffer, receivedResponse Message);
133 }
134 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698