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.
5 package org.chromium.mojo.bindings;
7 import android.test.suitebuilder.annotation.SmallTest;
9 import org.chromium.mojo.MojoTestCase;
10 import org.chromium.mojo.bindings.BindingsTestUtils.RecordingMessageReceiver;
11 import org.chromium.mojo.system.Core;
12 import org.chromium.mojo.system.DataPipe;
13 import org.chromium.mojo.system.Handle;
14 import org.chromium.mojo.system.MessagePipeHandle;
15 import org.chromium.mojo.system.MojoException;
16 import org.chromium.mojo.system.MojoResult;
17 import org.chromium.mojo.system.Pair;
18 import org.chromium.mojo.system.impl.CoreImpl;
20 import java.nio.ByteBuffer;
21 import java.util.ArrayList;
22 import java.util.Arrays;
23 import java.util.List;
26 * Testing {@link MessageWithHeader}.
28 public class MessageWithHeaderTest extends MojoTestCase {
30 private static final int DATA_SIZE = 1024;
32 private ByteBuffer mData;
33 private Pair<MessagePipeHandle, MessagePipeHandle> mHandles;
34 private List<Handle> mHandlesToSend = new ArrayList<Handle>();
35 private List<Handle> mHandlesToClose = new ArrayList<Handle>();
36 private RecordingMessageReceiver mMessageReceiver;
39 * @see org.chromium.mojo.MojoTestCase#setUp()
42 protected void setUp() throws Exception {
44 Core core = CoreImpl.getInstance();
45 mData = BindingsTestUtils.newRandomMessageWithHeader(DATA_SIZE).getMessage().buffer;
46 mMessageReceiver = new RecordingMessageReceiver();
47 mHandles = core.createMessagePipe(new MessagePipeHandle.CreateOptions());
48 Pair<DataPipe.ProducerHandle, DataPipe.ConsumerHandle> datapipe = core.createDataPipe(null);
49 mHandlesToSend.addAll(Arrays.asList(datapipe.first, datapipe.second));
50 mHandlesToClose.addAll(Arrays.asList(mHandles.first, mHandles.second));
51 mHandlesToClose.addAll(mHandlesToSend);
55 * @see org.chromium.mojo.MojoTestCase#tearDown()
58 protected void tearDown() throws Exception {
59 for (Handle handle : mHandlesToClose) {
66 * Testing {@link MessageWithHeader#readAndDispatchMessage(MessagePipeHandle, MessageReceiver)}
69 public void testReadAndDispatchMessage() {
70 mHandles.first.writeMessage(mData, mHandlesToSend, MessagePipeHandle.WriteFlags.NONE);
71 assertEquals(MojoResult.OK,
72 MessageWithHeader.readAndDispatchMessage(mHandles.second, mMessageReceiver));
73 assertEquals(1, mMessageReceiver.messages.size());
74 MessageWithHeader message = mMessageReceiver.messages.get(0);
75 mHandlesToClose.addAll(message.getMessage().handles);
76 assertEquals(mData, message.getMessage().buffer);
77 assertEquals(2, message.getMessage().handles.size());
78 for (Handle handle : message.getMessage().handles) {
79 assertTrue(handle.isValid());
84 * Testing {@link MessageWithHeader#readAndDispatchMessage(MessagePipeHandle, MessageReceiver)}
85 * with no message available.
88 public void testReadAndDispatchMessageOnEmptyHandle() {
89 assertEquals(MojoResult.SHOULD_WAIT,
90 MessageWithHeader.readAndDispatchMessage(mHandles.second, mMessageReceiver));
91 assertEquals(0, mMessageReceiver.messages.size());
95 * Testing {@link MessageWithHeader#readAndDispatchMessage(MessagePipeHandle, MessageReceiver)}
99 public void testReadAndDispatchMessageOnClosedHandle() {
100 mHandles.first.close();
102 MessageWithHeader.readAndDispatchMessage(mHandles.second, mMessageReceiver);
103 fail("MojoException should have been thrown");
104 } catch (MojoException expected) {
105 assertEquals(MojoResult.FAILED_PRECONDITION, expected.getMojoResult());
107 assertEquals(0, mMessageReceiver.messages.size());