blob: 15f9f1fa33829b32d023bbd5ca4ab7afbe3c8943 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.mojo.bindings;
import android.support.test.filters.SmallTest;
import org.chromium.mojo.MojoTestCase;
import org.chromium.mojo.bindings.BindingsTestUtils.CapturingErrorHandler;
import org.chromium.mojo.bindings.BindingsTestUtils.RecordingMessageReceiver;
import org.chromium.mojo.system.Core;
import org.chromium.mojo.system.Handle;
import org.chromium.mojo.system.MessagePipeHandle;
import org.chromium.mojo.system.MojoResult;
import org.chromium.mojo.system.Pair;
import org.chromium.mojo.system.ResultAnd;
import org.chromium.mojo.system.impl.CoreImpl;
import java.nio.ByteBuffer;
import java.util.ArrayList;
/**
* Testing the {@link Connector} class.
*/
public class ConnectorTest extends MojoTestCase {
private static final int DATA_LENGTH = 1024;
private MessagePipeHandle mHandle;
private Connector mConnector;
private Message mTestMessage;
private RecordingMessageReceiver mReceiver;
private CapturingErrorHandler mErrorHandler;
/**
* @see MojoTestCase#setUp()
*/
@Override
protected void setUp() throws Exception {
super.setUp();
Core core = CoreImpl.getInstance();
Pair<MessagePipeHandle, MessagePipeHandle> handles = core.createMessagePipe(
new MessagePipeHandle.CreateOptions());
mHandle = handles.first;
mConnector = new Connector(handles.second);
mReceiver = new RecordingMessageReceiver();
mConnector.setIncomingMessageReceiver(mReceiver);
mErrorHandler = new CapturingErrorHandler();
mConnector.setErrorHandler(mErrorHandler);
mConnector.start();
mTestMessage = BindingsTestUtils.newRandomMessage(DATA_LENGTH);
assertNull(mErrorHandler.getLastMojoException());
assertEquals(0, mReceiver.messages.size());
}
/**
* @see MojoTestCase#tearDown()
*/
@Override
protected void tearDown() throws Exception {
mConnector.close();
mHandle.close();
super.tearDown();
}
/**
* Test sending a message through a {@link Connector}.
*/
@SmallTest
public void testSendingMessage() {
mConnector.accept(mTestMessage);
assertNull(mErrorHandler.getLastMojoException());
ByteBuffer received = ByteBuffer.allocateDirect(DATA_LENGTH);
ResultAnd<MessagePipeHandle.ReadMessageResult> result =
mHandle.readMessage(received, 0, MessagePipeHandle.ReadFlags.NONE);
assertEquals(MojoResult.OK, result.getMojoResult());
assertEquals(DATA_LENGTH, result.getValue().getMessageSize());
assertEquals(mTestMessage.getData(), received);
}
/**
* Test receiving a message through a {@link Connector}
*/
@SmallTest
public void testReceivingMessage() {
mHandle.writeMessage(mTestMessage.getData(), new ArrayList<Handle>(),
MessagePipeHandle.WriteFlags.NONE);
runLoopUntilIdle();
assertNull(mErrorHandler.getLastMojoException());
assertEquals(1, mReceiver.messages.size());
Message received = mReceiver.messages.get(0);
assertEquals(0, received.getHandles().size());
assertEquals(mTestMessage.getData(), received.getData());
}
/**
* Test receiving an error through a {@link Connector}.
*/
@SmallTest
public void testErrors() {
mHandle.close();
runLoopUntilIdle();
assertNotNull(mErrorHandler.getLastMojoException());
assertEquals(MojoResult.FAILED_PRECONDITION,
mErrorHandler.getLastMojoException().getMojoResult());
}
}