| Index: components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/SocketTunnelServerTest.java
|
| diff --git a/components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/SocketTunnelServerTest.java b/components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/SocketTunnelServerTest.java
|
| deleted file mode 100644
|
| index e6e58eb45158a2aeecf488cd1e96eea936d4651a..0000000000000000000000000000000000000000
|
| --- a/components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/SocketTunnelServerTest.java
|
| +++ /dev/null
|
| @@ -1,308 +0,0 @@
|
| -// 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.components.devtools_bridge;
|
| -
|
| -import android.net.LocalServerSocket;
|
| -import android.net.LocalSocket;
|
| -import android.test.InstrumentationTestCase;
|
| -import android.test.suitebuilder.annotation.MediumTest;
|
| -import android.test.suitebuilder.annotation.SmallTest;
|
| -
|
| -import junit.framework.Assert;
|
| -
|
| -import java.io.IOException;
|
| -import java.io.OutputStream;
|
| -import java.nio.ByteBuffer;
|
| -
|
| -/**
|
| - * Tests for {@link SocketTunnelServer}
|
| - */
|
| -public class SocketTunnelServerTest extends InstrumentationTestCase {
|
| - private static final int CONNECTION_ID = 30;
|
| - private static final String SOCKET_NAME = "ksdjhflksjhdflk";
|
| -
|
| - private DataChannelMock mDataChannelMock;
|
| - private SocketTunnelServer mServer;
|
| - private LocalServerSocket mSocket;
|
| -
|
| - @Override
|
| - public void setUp() throws Exception {
|
| - super.setUp();
|
| - mSocket = new LocalServerSocket(SOCKET_NAME);
|
| - }
|
| -
|
| - @Override
|
| - public void tearDown() throws Exception {
|
| - mSocket.close();
|
| - if (mServer != null) destroyServer();
|
| - super.tearDown();
|
| - }
|
| -
|
| - private void createServer() {
|
| - createServer(new DataChannelMock());
|
| - }
|
| -
|
| - private void createServer(DataChannelMock dataChannel) {
|
| - mDataChannelMock = dataChannel;
|
| - mServer = new SocketTunnelServer(SOCKET_NAME);
|
| - mServer.bind(mDataChannelMock);
|
| - }
|
| -
|
| - private void destroyServer() {
|
| - mServer.unbind().dispose();
|
| - mServer = null;
|
| - }
|
| -
|
| - @SmallTest
|
| - public void testOpenDataChannel() {
|
| - createServer();
|
| - mDataChannelMock.open();
|
| - }
|
| -
|
| - @SmallTest
|
| - public void testDecodeControlPacket() {
|
| - createServer();
|
| - ByteBuffer packet = buildControlPacket(CONNECTION_ID, SocketTunnelBase.SERVER_OPEN_ACK);
|
| -
|
| - PacketDecoder decoder = PacketDecoder.decode(packet);
|
| - Assert.assertTrue(decoder.isControlPacket());
|
| - Assert.assertEquals(CONNECTION_ID, decoder.connectionId());
|
| - Assert.assertEquals(SocketTunnelBase.SERVER_OPEN_ACK, decoder.opCode());
|
| - }
|
| -
|
| - @SmallTest
|
| - public void testConnectToSocket() throws IOException {
|
| - createServer();
|
| - LocalSocket socket = connectToSocket(1);
|
| - Assert.assertTrue(mServer.hasConnections());
|
| - socket.close();
|
| - }
|
| -
|
| - private LocalSocket connectToSocket(int connectionId) throws IOException {
|
| - mDataChannelMock.notifyMessage(
|
| - buildControlPacket(connectionId, SocketTunnelBase.CLIENT_OPEN));
|
| - return mSocket.accept();
|
| - }
|
| -
|
| - private void sendClose(int connectionId) {
|
| - mDataChannelMock.notifyMessage(
|
| - buildControlPacket(connectionId, SocketTunnelBase.CLIENT_CLOSE));
|
| - }
|
| -
|
| - private ByteBuffer buildControlPacket(int connectionId, byte opCode) {
|
| - ByteBuffer packet = SocketTunnelBase.buildControlPacket(connectionId, opCode);
|
| - packet.limit(packet.position());
|
| - packet.position(0);
|
| - Assert.assertTrue(packet.remaining() > 0);
|
| - return packet;
|
| - }
|
| -
|
| - private ByteBuffer buildDataPacket(int connectionId, byte[] data) {
|
| - ByteBuffer packet = SocketTunnelBase.buildDataPacket(connectionId, data, data.length);
|
| - packet.limit(packet.position());
|
| - packet.position(0);
|
| - Assert.assertTrue(packet.remaining() > 0);
|
| - return packet;
|
| - }
|
| -
|
| - @SmallTest
|
| - public void testReceiveOpenAcknowledgement() throws IOException, InterruptedException {
|
| - createServer();
|
| - LocalSocket socket = connectToSocket(CONNECTION_ID);
|
| -
|
| - receiveOpenAck(CONNECTION_ID);
|
| -
|
| - socket.close();
|
| - }
|
| -
|
| - private PacketDecoder receiveControlPacket(int connectionId) throws InterruptedException {
|
| - PacketDecoder decoder = PacketDecoder.decode(mDataChannelMock.receive());
|
| - Assert.assertTrue(decoder.isControlPacket());
|
| - Assert.assertEquals(connectionId, decoder.connectionId());
|
| - return decoder;
|
| - }
|
| -
|
| - private void receiveOpenAck(int connectionId) throws InterruptedException {
|
| - PacketDecoder decoder = receiveControlPacket(connectionId);
|
| - Assert.assertEquals(SocketTunnelBase.SERVER_OPEN_ACK, decoder.opCode());
|
| - }
|
| -
|
| - private void receiveClose(int connectionId) throws InterruptedException {
|
| - PacketDecoder decoder = receiveControlPacket(connectionId);
|
| - Assert.assertEquals(SocketTunnelBase.SERVER_CLOSE, decoder.opCode());
|
| - }
|
| -
|
| - @SmallTest
|
| - public void testClosingSocket() throws IOException, InterruptedException {
|
| - createServer();
|
| - LocalSocket socket = connectToSocket(CONNECTION_ID);
|
| - receiveOpenAck(CONNECTION_ID);
|
| -
|
| - socket.shutdownOutput();
|
| -
|
| - PacketDecoder decoder = PacketDecoder.decode(mDataChannelMock.receive());
|
| -
|
| - Assert.assertTrue(decoder.isControlPacket());
|
| - Assert.assertEquals(SocketTunnelBase.SERVER_CLOSE, decoder.opCode());
|
| - Assert.assertEquals(CONNECTION_ID, decoder.connectionId());
|
| -
|
| - socket.close();
|
| - }
|
| -
|
| - @SmallTest
|
| - public void testReadData() throws IOException, InterruptedException {
|
| - createServer();
|
| - LocalSocket socket = connectToSocket(CONNECTION_ID);
|
| - receiveOpenAck(CONNECTION_ID);
|
| -
|
| - byte[] sample = "Sample".getBytes();
|
| -
|
| - socket.getOutputStream().write(sample);
|
| - socket.getOutputStream().flush();
|
| - socket.shutdownOutput();
|
| -
|
| - ByteBuffer result = receiveData(CONNECTION_ID, sample.length);
|
| - Assert.assertEquals(ByteBuffer.wrap(sample), result);
|
| - }
|
| -
|
| - private ByteBuffer receiveData(int connectionId, int length) throws InterruptedException {
|
| - ByteBuffer result = ByteBuffer.allocate(length);
|
| -
|
| - while (true) {
|
| - PacketDecoder decoder = PacketDecoder.decode(mDataChannelMock.receive());
|
| - if (decoder.isDataPacket()) {
|
| - Assert.assertEquals(connectionId, decoder.connectionId());
|
| - result.put(decoder.data());
|
| - } else if (decoder.isControlPacket()) {
|
| - Assert.assertEquals(SocketTunnelBase.SERVER_CLOSE, decoder.opCode());
|
| - Assert.assertEquals(connectionId, decoder.connectionId());
|
| - break;
|
| - }
|
| - }
|
| - result.limit(result.position());
|
| - result.position(0);
|
| - return result;
|
| - }
|
| -
|
| - private int sum(int[] values) {
|
| - int result = 0;
|
| - for (int v : values)
|
| - result += v;
|
| - return result;
|
| - }
|
| -
|
| - private static final int[] CHUNK_SIZES =
|
| - new int[] { 0, 1, 5, 100, 1000, SocketTunnelBase.READING_BUFFER_SIZE * 2 };
|
| -
|
| - @SmallTest
|
| - public void testReadLongDataChunk() throws IOException, InterruptedException {
|
| - createServer();
|
| - LocalSocket socket = connectToSocket(CONNECTION_ID);
|
| - receiveOpenAck(CONNECTION_ID);
|
| -
|
| - byte[] buffer = new byte[CHUNK_SIZES[CHUNK_SIZES.length - 1]];
|
| - ByteBuffer sentData = ByteBuffer.allocate(sum(CHUNK_SIZES));
|
| - OutputStream stream = socket.getOutputStream();
|
| - byte next = 0;
|
| - int prevSize = 0;
|
| - for (int size : CHUNK_SIZES) {
|
| - while (prevSize < size)
|
| - buffer[prevSize++] = next++;
|
| -
|
| - stream.write(buffer, 0, size);
|
| - sentData.put(buffer, 0, size);
|
| - }
|
| -
|
| - socket.shutdownOutput();
|
| -
|
| - sentData.limit(sentData.position());
|
| - sentData.position(0);
|
| - ByteBuffer readData = receiveData(CONNECTION_ID, sentData.limit());
|
| -
|
| - Assert.assertEquals(sentData, readData);
|
| - }
|
| -
|
| - @SmallTest
|
| - public void testReuseConnectionId() throws IOException, InterruptedException {
|
| - createServer();
|
| - LocalSocket socket = connectToSocket(CONNECTION_ID);
|
| - receiveOpenAck(CONNECTION_ID);
|
| -
|
| - socket.shutdownOutput();
|
| - socket.close();
|
| - receiveClose(CONNECTION_ID);
|
| - sendClose(CONNECTION_ID);
|
| -
|
| - // Open connection with the same ID
|
| - socket = connectToSocket(CONNECTION_ID);
|
| - receiveOpenAck(CONNECTION_ID);
|
| - }
|
| -
|
| - private static final byte[] SAMPLE = "Sample".getBytes();
|
| -
|
| - @SmallTest
|
| - public void testWriteData() throws IOException, InterruptedException {
|
| - createServer();
|
| - LocalSocket socket = connectToSocket(CONNECTION_ID);
|
| - receiveOpenAck(CONNECTION_ID);
|
| -
|
| - mDataChannelMock.notifyMessage(buildDataPacket(CONNECTION_ID, SAMPLE));
|
| -
|
| - byte[] result = new byte[SAMPLE.length];
|
| - int read = 0;
|
| - while (read < SAMPLE.length) {
|
| - int count = socket.getInputStream().read(result, 0, SAMPLE.length - read);
|
| - Assert.assertTrue(count > 0);
|
| - read += count;
|
| - }
|
| -
|
| - Assert.assertEquals(ByteBuffer.wrap(SAMPLE), ByteBuffer.wrap(result));
|
| -
|
| - socket.close();
|
| - }
|
| -
|
| - private enum TestStates {
|
| - INITIAL, SENDING, CLOSING, MAY_FINISH_SENDING, SENT, DONE
|
| - }
|
| -
|
| - @MediumTest
|
| - public void testStopWhileSendingData() throws IOException {
|
| -
|
| - final TestUtils.StateBarrier<TestStates> barrier =
|
| - new TestUtils.StateBarrier<TestStates>(TestStates.INITIAL);
|
| -
|
| - createServer(new DataChannelMock() {
|
| - @Override
|
| - public void send(ByteBuffer message, AbstractDataChannel.MessageType type) {
|
| - barrier.advance(TestStates.INITIAL, TestStates.SENDING);
|
| - barrier.advance(TestStates.MAY_FINISH_SENDING, TestStates.SENT);
|
| - }
|
| - });
|
| -
|
| - LocalSocket socket = connectToSocket(CONNECTION_ID);
|
| - barrier.advance(TestStates.SENDING, TestStates.CLOSING);
|
| - socket.close();
|
| -
|
| - new Thread() {
|
| - @Override
|
| - public void run() {
|
| - sleep();
|
| - barrier.advance(TestStates.CLOSING, TestStates.MAY_FINISH_SENDING);
|
| - }
|
| - }.start();
|
| -
|
| - destroyServer();
|
| -
|
| - barrier.advance(TestStates.SENT, TestStates.DONE);
|
| - }
|
| -
|
| - private void sleep() {
|
| - try {
|
| - Thread.sleep(100);
|
| - } catch (InterruptedException e) {
|
| - throw new RuntimeException(e);
|
| - }
|
| - }
|
| -}
|
|
|