Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b3a46980 authored by Priyanka Advani (xWF)'s avatar Priyanka Advani (xWF) Committed by Android (Google) Code Review
Browse files

Revert "ContextHubTestModeManager: Improve reliable message testing"

This reverts commit da6ed764.

Reason for revert: Droidmonitor created revert due to b/354791062

Change-Id: I1775c5e24cf3a2980bd001b4372f627f631cc66f
parent da6ed764
Loading
Loading
Loading
Loading
+20 −54
Original line number Diff line number Diff line
@@ -17,12 +17,10 @@
package com.android.server.location.contexthub;

import android.chre.flags.Flags;
import android.hardware.location.ContextHubTransaction;
import android.hardware.location.NanoAppMessage;
import android.util.Log;

import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.Callable;
import java.util.Random;

/**
 * A class to manage behaviors during test mode. This is used for testing.
@@ -31,31 +29,32 @@ import java.util.concurrent.Callable;
public class ContextHubTestModeManager {
    private static final String TAG = "ContextHubTestModeManager";

    private static final int DROP_MESSAGE_TO_HOST_EVENT = 0;
    private static final int DROP_MESSAGE_TO_CONTEXT_HUB_EVENT = 1;
    private static final int DUPLICATE_MESSAGE_TO_HOST_EVENT = 2;
    private static final int DUPLICATE_MESSAGE_TO_CONTEXT_HUB_EVENT = 3;
    private static final int NUMBER_OF_EVENTS = 4;
    /** Probability of duplicating a message. */
    private static final double MESSAGE_DROP_PROBABILITY = 0.05;

    /** Probability of duplicating a message. */
    private static final double MESSAGE_DUPLICATION_PROBABILITY = 0.05;

    /** The number of total messages to send when the duplication event happens. */
    private static final int NUM_MESSAGES_TO_DUPLICATE = 3;

    /** The counter to track the number of interactions with the test mode manager. */
    private final AtomicLong mCounter = new AtomicLong(0);
    /**
     * The seed for the random number generator. This is used to make the
     * test more deterministic.
     */
    private static final long SEED = 0xDEADBEEF;

    private final Random mRandom = new Random(SEED);

    /**
     * @return whether the message was handled
     * @see ContextHubServiceCallback#handleNanoappMessage
     */
    public boolean handleNanoappMessage(Runnable handleMessage, NanoAppMessage message) {
        if (!message.isReliable()) {
            return false;
        }

        long counterValue = mCounter.getAndIncrement();
        if (Flags.reliableMessageDuplicateDetectionService()
                && counterValue % NUMBER_OF_EVENTS == DUPLICATE_MESSAGE_TO_HOST_EVENT) {
            Log.i(TAG, "[TEST MODE] Duplicating message to host ("
                && message.isReliable()
                && mRandom.nextDouble() < MESSAGE_DUPLICATION_PROBABILITY) {
            Log.i(TAG, "[TEST MODE] Duplicating message ("
                    + NUM_MESSAGES_TO_DUPLICATE
                    + " sends) with message sequence number: "
                    + message.getMessageSequenceNumber());
@@ -64,14 +63,6 @@ public class ContextHubTestModeManager {
            }
            return true;
        }

        if (counterValue % NUMBER_OF_EVENTS == DROP_MESSAGE_TO_HOST_EVENT) {
            Log.i(TAG, "[TEST MODE] Dropping message to host with "
                    + "message sequence number: "
                    + message.getMessageSequenceNumber());
            return true;
        }

        return false;
    }

@@ -79,39 +70,14 @@ public class ContextHubTestModeManager {
     * @return whether the message was handled
     * @see IContextHubWrapper#sendMessageToContextHub
     */
    public boolean sendMessageToContextHub(Callable<Integer> sendMessage, NanoAppMessage message) {
        if (!message.isReliable()) {
            return false;
        }

        long counterValue = mCounter.getAndIncrement();
        if (counterValue % NUMBER_OF_EVENTS == DUPLICATE_MESSAGE_TO_CONTEXT_HUB_EVENT) {
            Log.i(TAG, "[TEST MODE] Duplicating message to the Context Hub ("
                    + NUM_MESSAGES_TO_DUPLICATE
                    + " sends) with message sequence number: "
                    + message.getMessageSequenceNumber());
            for (int i = 0; i < NUM_MESSAGES_TO_DUPLICATE; ++i) {
                try {
                    int result = sendMessage.call();
                    if (result != ContextHubTransaction.RESULT_SUCCESS) {
                        Log.e(TAG, "sendMessage returned an error: " + result);
                    }
                } catch (Exception e) {
                    Log.e(TAG, "Exception in sendMessageToContextHub: "
                            + e.getMessage());
                }
            }
            return true;
        }

    public boolean sendMessageToContextHub(NanoAppMessage message) {
        if (Flags.reliableMessageRetrySupportService()
                && counterValue % NUMBER_OF_EVENTS == DROP_MESSAGE_TO_CONTEXT_HUB_EVENT) {
            Log.i(TAG, "[TEST MODE] Dropping message to the Context Hub with "
                    + "message sequence number: "
                && message.isReliable()
                && mRandom.nextDouble() < MESSAGE_DROP_PROBABILITY) {
            Log.i(TAG, "[TEST MODE] Dropping message with message sequence number: "
                    + message.getMessageSequenceNumber());
            return true;
        }

        return false;
    }
}
+18 −27
Original line number Diff line number Diff line
@@ -53,7 +53,6 @@ import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.Callable;

/**
 * @hide
@@ -660,24 +659,15 @@ public abstract class IContextHubWrapper {

        @ContextHubTransaction.Result
        public int sendMessageToContextHub(short hostEndpointId, int contextHubId,
                NanoAppMessage message) {
                NanoAppMessage message) throws RemoteException {
            android.hardware.contexthub.IContextHub hub = getHub();
            if (hub == null) {
                return ContextHubTransaction.RESULT_FAILED_BAD_PARAMS;
            }

            Callable<Integer> sendMessage = () -> {
            try {
                var msg = ContextHubServiceUtil.createAidlContextHubMessage(
                        hostEndpointId, message);
                    hub.sendMessageToHub(contextHubId, msg);
                    return ContextHubTransaction.RESULT_SUCCESS;
                } catch (RemoteException | ServiceSpecificException e) {
                    return ContextHubTransaction.RESULT_FAILED_UNKNOWN;
                } catch (IllegalArgumentException e) {
                    return ContextHubTransaction.RESULT_FAILED_BAD_PARAMS;
                }
            };

                // Only process the message normally if not using test mode manager or if
                // the test mode manager call returned false as this indicates it did not
@@ -685,15 +675,16 @@ public abstract class IContextHubWrapper {
                boolean useTestModeManager = Flags.reliableMessageImplementation()
                        && Flags.reliableMessageTestModeBehavior()
                        && mIsTestModeEnabled.get();
            if (!useTestModeManager || !mTestModeManager.sendMessageToContextHub(
                    sendMessage, message)) {
                try {
                    return sendMessage.call();
                } catch (Exception e) {
                    return ContextHubTransaction.RESULT_FAILED_UNKNOWN;
                }
                if (!useTestModeManager || !mTestModeManager.sendMessageToContextHub(message)) {
                    hub.sendMessageToHub(contextHubId, msg);
                }

                return ContextHubTransaction.RESULT_SUCCESS;
            } catch (RemoteException | ServiceSpecificException e) {
                return ContextHubTransaction.RESULT_FAILED_UNKNOWN;
            } catch (IllegalArgumentException e) {
                return ContextHubTransaction.RESULT_FAILED_BAD_PARAMS;
            }
        }

        @ContextHubTransaction.Result