• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 Connector#readAndDispatchMessage}.
27  */
28 public class ReadAndDispatchMessageTest 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
setUp()42     protected void setUp() throws Exception {
43         super.setUp();
44         Core core = CoreImpl.getInstance();
45         mData = BindingsTestUtils.newRandomMessage(DATA_SIZE).getData();
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
tearDown()58     protected void tearDown() throws Exception {
59         for (Handle handle : mHandlesToClose) {
60             handle.close();
61         }
62         super.tearDown();
63     }
64 
65     /**
66      * Testing {@link Connector#readAndDispatchMessage(MessagePipeHandle, MessageReceiver)}
67      */
68     @SmallTest
testReadAndDispatchMessage()69     public void testReadAndDispatchMessage() {
70         mHandles.first.writeMessage(mData, mHandlesToSend, MessagePipeHandle.WriteFlags.NONE);
71         assertEquals(MojoResult.OK, Connector.readAndDispatchMessage(mHandles.second,
72                                                       mMessageReceiver).getMojoResult());
73         assertEquals(1, mMessageReceiver.messages.size());
74         Message message = mMessageReceiver.messages.get(0);
75         mHandlesToClose.addAll(message.getHandles());
76         assertEquals(mData, message.getData());
77         assertEquals(2, message.getHandles().size());
78         for (Handle handle : message.getHandles()) {
79             assertTrue(handle.isValid());
80         }
81     }
82 
83     /**
84      * Testing {@link Connector#readAndDispatchMessage(MessagePipeHandle, MessageReceiver)}
85      * with no message available.
86      */
87     @SmallTest
testReadAndDispatchMessageOnEmptyHandle()88     public void testReadAndDispatchMessageOnEmptyHandle() {
89         assertEquals(MojoResult.SHOULD_WAIT, Connector.readAndDispatchMessage(mHandles.second,
90                                                                mMessageReceiver).getMojoResult());
91         assertEquals(0, mMessageReceiver.messages.size());
92     }
93 
94     /**
95      * Testing {@link Connector#readAndDispatchMessage(MessagePipeHandle, MessageReceiver)}
96      * on closed handle.
97      */
98     @SmallTest
testReadAndDispatchMessageOnClosedHandle()99     public void testReadAndDispatchMessageOnClosedHandle() {
100         mHandles.first.close();
101         try {
102             Connector.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 }
110