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.components.devtools_bridge;
7 import junit.framework.Assert;
9 import java.nio.ByteBuffer;
10 import java.util.concurrent.LinkedBlockingQueue;
13 * Mock of AbstractDataChannel tests. Also base class for DataPipe channels.
15 public class DataChannelMock extends AbstractDataChannel {
16 private final SignalingThreadMock mSignalingThread;
17 private Observer mObserver;
18 private boolean mOpen = false;
19 private final LinkedBlockingQueue<ByteBuffer> mQueue = new LinkedBlockingQueue<ByteBuffer>();
21 // |signalingThread| will be disposed in the |dispose| method. If successor needs
22 // to control it's lifetime it must override |disposeSignalingThread| and not to invoke super's
24 protected DataChannelMock(SignalingThreadMock signalingThread) {
25 mSignalingThread = signalingThread;
28 public DataChannelMock() {
29 this(new SignalingThreadMock());
33 onStateChange(AbstractDataChannel.State.OPEN);
38 onStateChange(AbstractDataChannel.State.CLOSED);
41 private void onStateChange(final State state) {
42 mSignalingThread.invoke(new Runnable() {
45 mObserver.onStateChange(state);
50 // Sends onMessage to the observer.
51 public void notifyMessage(ByteBuffer data) {
52 final byte[] bytes = toByteArray(data);
53 mSignalingThread.invoke(new Runnable() {
56 notifyMessageOnSignalingThread(ByteBuffer.wrap(bytes));
61 protected void notifyMessageOnSignalingThread(ByteBuffer buffer) {
62 mObserver.onMessage(buffer);
65 // Blocks until message received. Removes it from the queue and returns.
66 public ByteBuffer receive() {
69 } catch (InterruptedException e) {
70 throw new RuntimeException(e);
75 public void registerObserver(final Observer observer) {
76 mSignalingThread.invoke(new Runnable() {
79 Assert.assertNull(mObserver);
81 Assert.assertNotNull(mObserver);
87 public void unregisterObserver() {
88 mSignalingThread.invoke(new Runnable() {
91 Assert.assertNotNull(mObserver);
97 private byte[] toByteArray(ByteBuffer data) {
98 final byte[] result = new byte[data.remaining()];
104 public void send(ByteBuffer message, MessageType type) {
105 final byte[] data = toByteArray(message);
106 assert data.length > 0;
107 mSignalingThread.post(new Runnable() {
110 sendOnSignalingThread(ByteBuffer.wrap(data));
111 android.util.Log.d("DataChannelMock", "Packet sent.");
116 protected void sendOnSignalingThread(ByteBuffer message) {
117 boolean success = mQueue.offer(message);
122 public void dispose() {
123 mSignalingThread.invoke(new Runnable() {
126 Assert.assertNull(mObserver);
129 disposeSignalingThread();
132 protected void disposeSignalingThread() {
133 mSignalingThread.dispose();