Commit 38a06f63 authored by Zhiqiang Zhang's avatar Zhiqiang Zhang Committed by Commit Bot

Unit test for CafMessageHandler

Most of the tests are migrated from CastMessageHandlerTest. Some
new tests are added as CafMessageHandler has more methods than
CastMessageHandler:

* testHandleClientConnectMessage*
* testHandleClientDisconnectMessage*
* testHandleClientLeaveSessionMessage*
* testSendReceiverActionToClient
* testBuildSessionMessage*

Bug: 711860
Change-Id: I821bb91f0c685809c143b60cc4700c47ffec16b6
Reviewed-on: https://chromium-review.googlesource.com/c/1343292
Commit-Queue: Zhiqiang Zhang <zqzhang@chromium.org>
Reviewed-by: default avatarThomas Guilbert <tguilbert@chromium.org>
Cr-Commit-Position: refs/heads/master@{#609805}
parent 8c45c21a
......@@ -70,8 +70,6 @@ public class CafMessageHandler {
private ArrayMap<String, Queue<Integer>> mStopRequests;
private Queue<RequestRecord> mVolumeRequests;
// The reference to CastSession, only valid after calling {@link onSessionCreated}, and will be
// reset to null when calling {@link onApplicationStopped}.
private final CastSessionController mSessionController;
private final CafMediaRouteProvider mRouteProvider;
private Handler mHandler;
......@@ -216,7 +214,7 @@ public class CafMessageHandler {
if (clientId == null || !mSessionController.isConnected()) return false;
String sessionId = jsonMessage.getString("message");
if (!mSessionController.getSession().getSessionId().equals(sessionId)) return false;
if (!mSessionController.getSessionId().equals(sessionId)) return false;
ClientRecord currentClient = mRouteProvider.getClientIdToRecords().get(clientId);
if (currentClient == null) return false;
......@@ -225,8 +223,8 @@ public class CafMessageHandler {
// The web sender SDK doesn't actually recognize "leave_session" response, but this is to
// acknowledge the "leave_session" request.
mRouteProvider.sendMessageToClient(clientId,
buildSimpleSessionMessage("leave_session", sequenceNumber, clientId, null));
mRouteProvider.sendMessageToClient(
clientId, buildSimpleSessionMessage("leave_session", sequenceNumber, clientId));
List<ClientRecord> leavingClients = new ArrayList<>();
......@@ -253,14 +251,13 @@ public class CafMessageHandler {
}
/** Builds a simple message for session-related events. */
private String buildSimpleSessionMessage(
String type, int sequenceNumber, String clientId, String message) throws JSONException {
private String buildSimpleSessionMessage(String type, int sequenceNumber, String clientId)
throws JSONException {
JSONObject jsonMessage = new JSONObject();
jsonMessage.put("type", type);
jsonMessage.put("sequenceNumber", sequenceNumber);
jsonMessage.put("timeoutMillis", TIMEOUT_IMMEDIATE);
jsonMessage.put("clientId", clientId);
jsonMessage.put("message", message);
return jsonMessage.toString();
}
......@@ -414,7 +411,7 @@ public class CafMessageHandler {
JSONObject jsonAppMessageWrapper = jsonMessage.getJSONObject("message");
if (!mSessionController.getSession().getSessionId().equals(
if (!mSessionController.getSessionId().equals(
jsonAppMessageWrapper.getString("sessionId"))) {
return false;
}
......@@ -522,7 +519,7 @@ public class CafMessageHandler {
void onAppMessage(String message, String namespace, RequestRecord request) {
try {
JSONObject jsonMessage = new JSONObject();
jsonMessage.put("sessionId", mSessionController.getSession().getSessionId());
jsonMessage.put("sessionId", mSessionController.getSessionId());
jsonMessage.put("namespaceName", namespace);
jsonMessage.put("message", message);
if (request != null) {
......@@ -544,13 +541,13 @@ public class CafMessageHandler {
Queue<Integer> sequenceNumbersForClient = mStopRequests.get(clientId);
if (sequenceNumbersForClient == null) {
sendEnclosedMessageToClient(clientId, "remove_session",
mSessionController.getSession().getSessionId(), VOID_SEQUENCE_NUMBER);
mSessionController.getSessionId(), VOID_SEQUENCE_NUMBER);
continue;
}
for (int sequenceNumber : sequenceNumbersForClient) {
sendEnclosedMessageToClient(clientId, "remove_session",
mSessionController.getSession().getSessionId(), sequenceNumber);
mSessionController.getSessionId(), sequenceNumber);
}
mStopRequests.remove(clientId);
}
......@@ -688,7 +685,7 @@ public class CafMessageHandler {
}
JSONObject jsonMessage = new JSONObject();
jsonMessage.put("sessionId", mSessionController.getSession().getSessionId());
jsonMessage.put("sessionId", mSessionController.getSessionId());
jsonMessage.put("statusText", mSessionController.getSession().getApplicationStatus());
jsonMessage.put("receiver", jsonReceiver);
jsonMessage.put("namespaces", jsonNamespaces);
......@@ -714,12 +711,12 @@ public class CafMessageHandler {
* Modifies the received MediaStatus message to match the format expected by the client.
*/
private void sanitizeMediaStatusMessage(JSONObject object) throws JSONException {
object.put("sessionId", mSessionController.getSession().getSessionId());
object.put("sessionId", mSessionController.getSessionId());
JSONArray mediaStatus = object.getJSONArray("status");
for (int i = 0; i < mediaStatus.length(); ++i) {
JSONObject status = mediaStatus.getJSONObject(i);
status.put("sessionId", mSessionController.getSession().getSessionId());
status.put("sessionId", mSessionController.getSessionId());
if (!status.has("supportedMediaCommands")) continue;
JSONArray commands = new JSONArray();
......@@ -776,7 +773,7 @@ public class CafMessageHandler {
return result;
}
private boolean sendStringCastMessage(
boolean sendStringCastMessage(
String message, String namespace, String clientId, int sequenceNumber) {
if (!mSessionController.isConnected()) return false;
......@@ -795,7 +792,7 @@ public class CafMessageHandler {
* @param clientId The client id the message is sent from.
* @param sequenceNumber The sequence number of the message.
*/
private void onSendAppMessageResult(Status result, String clientId, int sequenceNumber) {
void onSendAppMessageResult(Status result, String clientId, int sequenceNumber) {
if (!result.isSuccess()) {
// TODO(avayvod): should actually report back to the page.
// See https://crbug.com/550445.
......
......@@ -2366,12 +2366,12 @@ chrome_junit_test_java_sources = [
"junit/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterSinkObservationTest.java",
"junit/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterTestBase.java",
"junit/src/org/chromium/chrome/browser/media/router/DiscoveryCallbackTest.java",
"junit/src/org/chromium/chrome/browser/media/router/JSONTestUtils.java",
"junit/src/org/chromium/chrome/browser/media/router/TestUtils.java",
"junit/src/org/chromium/chrome/browser/media/router/cast/CastMediaRouteProviderTest.java",
"junit/src/org/chromium/chrome/browser/media/router/cast/CastMediaSourceTest.java",
"junit/src/org/chromium/chrome/browser/media/router/cast/CastMessageHandlerTest.java",
"junit/src/org/chromium/chrome/browser/media/router/cast/ChromeCastSessionManagerTest.java",
"junit/src/org/chromium/chrome/browser/media/router/cast/JSONTestUtils.java",
"junit/src/org/chromium/chrome/browser/media/router/caf/MediaRouterTestHelper.java",
"junit/src/org/chromium/chrome/browser/media/router/caf/ShadowMediaRouter.java",
"junit/src/org/chromium/chrome/browser/media/router/caf/ShadowCastContext.java",
......@@ -2380,6 +2380,7 @@ chrome_junit_test_java_sources = [
"junit/src/org/chromium/chrome/browser/media/router/caf/CastSessionControllerTest.java",
"junit/src/org/chromium/chrome/browser/media/router/caf/CafBaseMediaRouteProviderTest.java",
"junit/src/org/chromium/chrome/browser/media/router/caf/CafMediaRouteProviderTest.java",
"junit/src/org/chromium/chrome/browser/media/router/caf/CafMessageHandlerTest.java",
"junit/src/org/chromium/chrome/browser/media/ui/MediaImageManagerTest.java",
"junit/src/org/chromium/chrome/browser/media/ui/MediaNotificationActionsUpdatedTest.java",
"junit/src/org/chromium/chrome/browser/media/ui/MediaNotificationButtonComputationTest.java",
......
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.media.router.cast;
package org.chromium.chrome.browser.media.router;
import org.json.JSONArray;
import org.json.JSONException;
......@@ -13,7 +13,6 @@ import java.util.Iterator;
/**
* Utilities for comparing JSON objects and strings.
* TODO(zqzhang): Move the class to somewhere more generic.
*/
public class JSONTestUtils {
private static final String TAG = "MediaRouter";
......@@ -36,6 +35,7 @@ public class JSONTestUtils {
return true;
}
/** Returns whether two JSON arrays are equal. */
public static boolean isJSONArrayEqual(JSONArray expected, JSONArray actual) {
try {
if (expected.length() != actual.length()) return false;
......@@ -48,6 +48,7 @@ public class JSONTestUtils {
return true;
}
/** Returns whether two JSON objects are equal. */
public static boolean isJSONObjectEqual(Object expected, Object actual) {
if (expected == null && actual == null) return true;
if (expected == null || actual == null) return false;
......@@ -74,7 +75,8 @@ public class JSONTestUtils {
}
}
static class JSONObjectLike implements ArgumentMatcher<JSONObject> {
/** Matcher to determine whether a JSON object is equal to the expected one. */
public static class JSONObjectLike implements ArgumentMatcher<JSONObject> {
private final JSONObject mExpected;
public JSONObjectLike(JSONObject expected) {
......@@ -92,7 +94,8 @@ public class JSONTestUtils {
}
}
static class JSONStringLike implements ArgumentMatcher<String> {
/** Matcher to determine whether a JSON string is equal to the expected one. */
public static class JSONStringLike implements ArgumentMatcher<String> {
private JSONObject mExpected;
public JSONStringLike(JSONObject expected) {
......
......@@ -36,9 +36,9 @@ import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.Feature;
import org.chromium.chrome.browser.media.router.CastSessionUtil;
import org.chromium.chrome.browser.media.router.ClientRecord;
import org.chromium.chrome.browser.media.router.JSONTestUtils.JSONObjectLike;
import org.chromium.chrome.browser.media.router.JSONTestUtils.JSONStringLike;
import org.chromium.chrome.browser.media.router.cast.CastMessageHandler.RequestRecord;
import org.chromium.chrome.browser.media.router.cast.JSONTestUtils.JSONObjectLike;
import org.chromium.chrome.browser.media.router.cast.JSONTestUtils.JSONStringLike;
import java.util.ArrayDeque;
import java.util.HashMap;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment