Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / mojo / android / javatests / src / org / chromium / mojo / bindings / MessageWithHeaderTest.java
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.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;
19
20 import java.nio.ByteBuffer;
21 import java.util.ArrayList;
22 import java.util.Arrays;
23 import java.util.List;
24
25 /**
26  * Testing {@link MessageWithHeader}.
27  */
28 public class MessageWithHeaderTest extends MojoTestCase {
29
30     private static final int DATA_SIZE = 1024;
31
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;
37
38     /**
39      * @see org.chromium.mojo.MojoTestCase#setUp()
40      */
41     @Override
42     protected void setUp() throws Exception {
43         super.setUp();
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);
52     }
53
54     /**
55      * @see org.chromium.mojo.MojoTestCase#tearDown()
56      */
57     @Override
58     protected void tearDown() throws Exception {
59         for (Handle handle : mHandlesToClose) {
60             handle.close();
61         }
62         super.tearDown();
63     }
64
65     /**
66      * Testing {@link MessageWithHeader#readAndDispatchMessage(MessagePipeHandle, MessageReceiver)}
67      */
68     @SmallTest
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());
80         }
81     }
82
83     /**
84      * Testing {@link MessageWithHeader#readAndDispatchMessage(MessagePipeHandle, MessageReceiver)}
85      * with no message available.
86      */
87     @SmallTest
88     public void testReadAndDispatchMessageOnEmptyHandle() {
89         assertEquals(MojoResult.SHOULD_WAIT,
90                 MessageWithHeader.readAndDispatchMessage(mHandles.second, mMessageReceiver));
91         assertEquals(0, mMessageReceiver.messages.size());
92     }
93
94     /**
95      * Testing {@link MessageWithHeader#readAndDispatchMessage(MessagePipeHandle, MessageReceiver)}
96      * on closed handle.
97      */
98     @SmallTest
99     public void testReadAndDispatchMessageOnClosedHandle() {
100         mHandles.first.close();
101         try {
102             MessageWithHeader.readAndDispatchMessage(mHandles.second, mMessageReceiver);
103             fail("MojoException should have been thrown");
104         } catch (MojoException expected) {
105             assertEquals(MojoResult.FAILED_PRECONDITION, expected.getMojoResult());
106         }
107         assertEquals(0, mMessageReceiver.messages.size());
108     }
109 }