New test class "TelLiveGFTDSDSMessageTest" with 144 test cases

A new test class "TelLiveGFTDSDSMessageTest" is
created with 144 new test cases related to SMS or MMS for Pixel
DSDS devices.

The naming rule of each test case is as below:
test_msim_[MESSAGE FUNCTION ("sms" or "mms")]_[MESSAGE DIRECTION
("mo" or "mt")]_[RAT of slot 0 (e.g., "volte")]_[RAT of slot 1
(e.g., "3g")]_[SIM FOR MESSAGE ("pSIM" or "eSIM")]_dds_slot_[
MOBILE DATA SLOT ("0" for pSIM or "1" for eSIM)]

All 144 test cases are listed below:
test_msim_sms_mo_volte_psim_dds_slot_0,
test_msim_sms_mo_volte_psim_dds_slot_1,
test_msim_sms_mt_volte_psim_dds_slot_0,
test_msim_sms_mt_volte_psim_dds_slot_1,
test_msim_sms_mo_volte_esim_dds_slot_0,
test_msim_sms_mo_volte_esim_dds_slot_1,
test_msim_sms_mt_volte_esim_dds_slot_0,
test_msim_sms_mt_volte_esim_dds_slot_1,
test_msim_sms_mo_volte_csfb_psim_dds_slot_0,
test_msim_sms_mo_volte_csfb_psim_dds_slot_1,
test_msim_sms_mt_volte_csfb_psim_dds_slot_0,
test_msim_sms_mt_volte_csfb_psim_dds_slot_1,
test_msim_sms_mo_volte_csfb_esim_dds_slot_0,
test_msim_sms_mo_volte_csfb_esim_dds_slot_1,
test_msim_sms_mt_volte_csfb_esim_dds_slot_0,
test_msim_sms_mt_volte_csfb_esim_dds_slot_1,
test_msim_sms_mo_csfb_volte_psim_dds_slot_0,
test_msim_sms_mo_csfb_volte_psim_dds_slot_1,
test_msim_sms_mt_csfb_volte_psim_dds_slot_0,
test_msim_sms_mt_csfb_volte_psim_dds_slot_1,
test_msim_sms_mo_csfb_volte_esim_dds_slot_0,
test_msim_sms_mo_csfb_volte_esim_dds_slot_1,
test_msim_sms_mt_csfb_volte_esim_dds_slot_0,
test_msim_sms_mt_csfb_volte_esim_dds_slot_1,
test_msim_sms_mo_volte_3g_psim_dds_slot_0,
test_msim_sms_mo_volte_3g_psim_dds_slot_1,
test_msim_sms_mt_volte_3g_psim_dds_slot_0,
test_msim_sms_mt_volte_3g_psim_dds_slot_1,
test_msim_sms_mo_volte_3g_esim_dds_slot_0,
test_msim_sms_mo_volte_3g_esim_dds_slot_1,
test_msim_sms_mt_volte_3g_esim_dds_slot_0,
test_msim_sms_mt_volte_3g_esim_dds_slot_1,
test_msim_sms_mo_3g_volte_psim_dds_slot_0,
test_msim_sms_mo_3g_volte_psim_dds_slot_1,
test_msim_sms_mt_3g_volte_psim_dds_slot_0,
test_msim_sms_mt_3g_volte_psim_dds_slot_1,
test_msim_sms_mo_3g_volte_esim_dds_slot_0,
test_msim_sms_mo_3g_volte_esim_dds_slot_1,
test_msim_sms_mt_3g_volte_esim_dds_slot_0,
test_msim_sms_mt_3g_volte_esim_dds_slot_1,
test_msim_sms_mo_csfb_psim_dds_slot_0,
test_msim_sms_mo_csfb_psim_dds_slot_1,
test_msim_sms_mt_csfb_psim_dds_slot_0,
test_msim_sms_mt_csfb_psim_dds_slot_1,
test_msim_sms_mo_csfb_esim_dds_slot_0,
test_msim_sms_mo_csfb_esim_dds_slot_1,
test_msim_sms_mt_csfb_esim_dds_slot_0,
test_msim_sms_mt_csfb_esim_dds_slot_1,
test_msim_sms_mo_csfb_3g_psim_dds_slot_0,
test_msim_sms_mo_csfb_3g_psim_dds_slot_1,
test_msim_sms_mt_csfb_3g_psim_dds_slot_0,
test_msim_sms_mt_csfb_3g_psim_dds_slot_1,
test_msim_sms_mo_csfb_3g_esim_dds_slot_0,
test_msim_sms_mo_csfb_3g_esim_dds_slot_1,
test_msim_sms_mt_csfb_3g_esim_dds_slot_0,
test_msim_sms_mt_csfb_3g_esim_dds_slot_1,
test_msim_sms_mo_3g_csfb_psim_dds_slot_0,
test_msim_sms_mo_3g_csfb_psim_dds_slot_1,
test_msim_sms_mt_3g_csfb_psim_dds_slot_0,
test_msim_sms_mt_3g_csfb_psim_dds_slot_1,
test_msim_sms_mo_3g_csfb_esim_dds_slot_0,
test_msim_sms_mo_3g_csfb_esim_dds_slot_1,
test_msim_sms_mt_3g_csfb_esim_dds_slot_0,
test_msim_sms_mt_3g_csfb_esim_dds_slot_1,
test_msim_sms_mo_3g_psim_dds_slot_0,
test_msim_sms_mo_3g_psim_dds_slot_1,
test_msim_sms_mt_3g_psim_dds_slot_0,
test_msim_sms_mt_3g_psim_dds_slot_1,
test_msim_sms_mo_3g_esim_dds_slot_0,
test_msim_sms_mo_3g_esim_dds_slot_1,
test_msim_sms_mt_3g_esim_dds_slot_0,
test_msim_sms_mt_3g_esim_dds_slot_1,
test_msim_mms_mo_volte_psim_dds_slot_0,
test_msim_mms_mo_volte_psim_dds_slot_1,
test_msim_mms_mt_volte_psim_dds_slot_0,
test_msim_mms_mt_volte_psim_dds_slot_1,
test_msim_mms_mo_volte_esim_dds_slot_0,
test_msim_mms_mo_volte_esim_dds_slot_1,
test_msim_mms_mt_volte_esim_dds_slot_0,
test_msim_mms_mt_volte_esim_dds_slot_1,
test_msim_mms_mo_volte_csfb_psim_dds_slot_0,
test_msim_mms_mo_volte_csfb_psim_dds_slot_1,
test_msim_mms_mt_volte_csfb_psim_dds_slot_0,
test_msim_mms_mt_volte_csfb_psim_dds_slot_1,
test_msim_mms_mo_volte_csfb_esim_dds_slot_0,
test_msim_mms_mo_volte_csfb_esim_dds_slot_1,
test_msim_mms_mt_volte_csfb_esim_dds_slot_0,
test_msim_mms_mt_volte_csfb_esim_dds_slot_1,
test_msim_mms_mo_csfb_volte_psim_dds_slot_0,
test_msim_mms_mo_csfb_volte_psim_dds_slot_1,
test_msim_mms_mt_csfb_volte_psim_dds_slot_0,
test_msim_mms_mt_csfb_volte_psim_dds_slot_1,
test_msim_mms_mo_csfb_volte_esim_dds_slot_0,
test_msim_mms_mo_csfb_volte_esim_dds_slot_1,
test_msim_mms_mt_csfb_volte_esim_dds_slot_0,
test_msim_mms_mt_csfb_volte_esim_dds_slot_1,
test_msim_mms_mo_volte_3g_psim_dds_slot_0,
test_msim_mms_mo_volte_3g_psim_dds_slot_1,
test_msim_mms_mt_volte_3g_psim_dds_slot_0,
test_msim_mms_mt_volte_3g_psim_dds_slot_1,
test_msim_mms_mo_volte_3g_esim_dds_slot_0,
test_msim_mms_mo_volte_3g_esim_dds_slot_1,
test_msim_mms_mt_volte_3g_esim_dds_slot_0,
test_msim_mms_mt_volte_3g_esim_dds_slot_1,
test_msim_mms_mo_3g_volte_psim_dds_slot_0,
test_msim_mms_mo_3g_volte_psim_dds_slot_1,
test_msim_mms_mt_3g_volte_psim_dds_slot_0,
test_msim_mms_mt_3g_volte_psim_dds_slot_1,
test_msim_mms_mo_3g_volte_esim_dds_slot_0,
test_msim_mms_mo_3g_volte_esim_dds_slot_1,
test_msim_mms_mt_3g_volte_esim_dds_slot_0,
test_msim_mms_mt_3g_volte_esim_dds_slot_1,
test_msim_mms_mo_csfb_psim_dds_slot_0,
test_msim_mms_mo_csfb_psim_dds_slot_1,
test_msim_mms_mt_csfb_psim_dds_slot_0,
test_msim_mms_mt_csfb_psim_dds_slot_1,
test_msim_mms_mo_csfb_esim_dds_slot_0,
test_msim_mms_mo_csfb_esim_dds_slot_1,
test_msim_mms_mt_csfb_esim_dds_slot_0,
test_msim_mms_mt_csfb_esim_dds_slot_1,
test_msim_mms_mo_csfb_3g_psim_dds_slot_0,
test_msim_mms_mo_csfb_3g_psim_dds_slot_1,
test_msim_mms_mt_csfb_3g_psim_dds_slot_0,
test_msim_mms_mt_csfb_3g_psim_dds_slot_1,
test_msim_mms_mo_csfb_3g_esim_dds_slot_0,
test_msim_mms_mo_csfb_3g_esim_dds_slot_1,
test_msim_mms_mt_csfb_3g_esim_dds_slot_0,
test_msim_mms_mt_csfb_3g_esim_dds_slot_1,
test_msim_mms_mo_3g_csfb_psim_dds_slot_0,
test_msim_mms_mo_3g_csfb_psim_dds_slot_1,
test_msim_mms_mt_3g_csfb_psim_dds_slot_0,
test_msim_mms_mt_3g_csfb_psim_dds_slot_1,
test_msim_mms_mo_3g_csfb_esim_dds_slot_0,
test_msim_mms_mo_3g_csfb_esim_dds_slot_1,
test_msim_mms_mt_3g_csfb_esim_dds_slot_0,
test_msim_mms_mt_3g_csfb_esim_dds_slot_1,
test_msim_mms_mo_3g_psim_dds_slot_0,
test_msim_mms_mo_3g_psim_dds_slot_1,
test_msim_mms_mt_3g_psim_dds_slot_0,
test_msim_mms_mt_3g_psim_dds_slot_1,
test_msim_mms_mo_3g_esim_dds_slot_0,
test_msim_mms_mo_3g_esim_dds_slot_1,
test_msim_mms_mt_3g_esim_dds_slot_0,
test_msim_mms_mt_3g_esim_dds_slot_1

Bug: None
Test: Yes, locally
Change-Id: I9137860b6ab38f31ddbebd91322d7d024c39d63d
diff --git a/acts/tests/google/tel/live/TelLiveGFTDSDSMessageTest.py b/acts/tests/google/tel/live/TelLiveGFTDSDSMessageTest.py
new file mode 100644
index 0000000..3064132
--- /dev/null
+++ b/acts/tests/google/tel/live/TelLiveGFTDSDSMessageTest.py
@@ -0,0 +1,1291 @@
+#!/usr/bin/env python3
+#
+#   Copyright 2020 - Google
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+
+import time
+
+from acts import asserts
+from acts import signals
+from acts.test_decorators import test_tracker_info
+from acts.test_utils.tel.loggers.protos.telephony_metric_pb2 import \
+    TelephonyVoiceTestResult
+from acts.test_utils.tel.loggers.telephony_metric_logger import \
+    TelephonyMetricLogger
+from acts.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
+from acts.test_utils.tel.tel_defines import MAX_WAIT_TIME_SMS_RECEIVE
+from acts.test_utils.tel.tel_defines import WAIT_TIME_ANDROID_STATE_SETTLING
+from acts.test_utils.tel.tel_defines import INVALID_SUB_ID
+from acts.test_utils.tel.tel_subscription_utils import get_subid_from_slot_index
+from acts.test_utils.tel.tel_subscription_utils import \
+    get_outgoing_message_sub_id
+from acts.test_utils.tel.tel_subscription_utils import get_default_data_sub_id
+from acts.test_utils.tel.tel_subscription_utils import set_subid_for_message
+from acts.test_utils.tel.tel_subscription_utils import set_subid_for_data
+from acts.test_utils.tel.tel_subscription_utils import set_dds_on_slot_0
+from acts.test_utils.tel.tel_subscription_utils import set_dds_on_slot_1
+from acts.test_utils.tel.tel_subscription_utils import \
+    get_subid_on_same_network_of_host_ad
+from acts.test_utils.tel.tel_test_utils import multithread_func
+from acts.test_utils.tel.tel_test_utils import \
+    sms_send_receive_verify_for_subscription
+from acts.test_utils.tel.tel_test_utils import mms_send_receive_verify
+from acts.test_utils.tel.tel_test_utils import verify_http_connection
+from acts.test_utils.tel.tel_test_utils import log_messaging_screen_shot
+from acts.test_utils.tel.tel_test_utils import ensure_phones_idle
+from acts.test_utils.tel.tel_voice_utils import \
+    phone_setup_csfb_for_subscription
+from acts.test_utils.tel.tel_voice_utils import \
+    phone_setup_voice_3g_for_subscription
+from acts.test_utils.tel.tel_voice_utils import \
+    phone_setup_voice_general_for_subscription
+from acts.test_utils.tel.tel_voice_utils import \
+    phone_setup_volte_for_subscription
+from acts.utils import rand_ascii_str
+
+CallResult = TelephonyVoiceTestResult.CallResult.Value
+
+class TelLiveGFTDSDSMessageTest(TelephonyBaseTest):
+    def __init__(self, controllers):
+        TelephonyBaseTest.__init__(self, controllers)
+        self.message_lengths = (50, 160, 180)
+        self.tel_logger = TelephonyMetricLogger.for_test_case()
+
+    def setup_class(self):
+        TelephonyBaseTest.setup_class(self)
+
+    def teardown_test(self):
+        ensure_phones_idle(self.log, self.android_devices)
+
+    def _msim_message_test(
+        self,
+        ad_mo,
+        ad_mt,
+        mo_sub_id,
+        mt_sub_id, msg="SMS",
+        max_wait_time=MAX_WAIT_TIME_SMS_RECEIVE,
+        expected_result=True):
+        """Make MO/MT SMS/MMS at specific slot.
+
+        Args:
+            ad_mo: Android object of the device sending SMS/MMS
+            ad_mt: Android object of the device receiving SMS/MMS
+            mo_sub_id: Sub ID of MO device
+            mt_sub_id: Sub ID of MT device
+            max_wait_time: Max wait time before SMS/MMS is received.
+            expected_result: True for successful sending/receiving and False on
+                             the contrary
+
+        Returns:
+            True if the result matches expected_result and False on the
+            contrary.
+        """
+
+        if msg == "SMS":
+            for length in self.message_lengths:
+                message_array = [rand_ascii_str(length)]
+                if not sms_send_receive_verify_for_subscription(
+                    self.log,
+                    ad_mo,
+                    ad_mt,
+                    mo_sub_id,
+                    mt_sub_id,
+                    message_array,
+                    max_wait_time):
+                    ad_mo.log.warning(
+                        "%s of length %s test failed", msg, length)
+                    return False
+                else:
+                    ad_mo.log.info(
+                        "%s of length %s test succeeded", msg, length)
+            self.log.info("%s test of length %s characters succeeded.",
+                msg, self.message_lengths)
+
+        elif msg == "MMS":
+            for length in self.message_lengths:
+                message_array = [("Test Message", rand_ascii_str(length), None)]
+
+                if not mms_send_receive_verify(
+                    self.log,
+                    ad_mo,
+                    ad_mt,
+                    message_array,
+                    max_wait_time,
+                    expected_result):
+                    self.log.warning("%s of body length %s test failed",
+                        msg, length)
+                    return False
+                else:
+                    self.log.info(
+                        "%s of body length %s test succeeded", msg, length)
+            self.log.info("%s test of body lengths %s succeeded",
+                          msg, self.message_lengths)
+        return True
+
+    def _test_msim_message(
+            self,
+            mo_slot,
+            mt_slot,
+            dds_slot,
+            msg="SMS",
+            mo_rat=["", ""],
+            mt_rat=["", ""],
+            direction="mo",
+            expected_result=True):
+        """Make MO/MT SMS/MMS at specific slot in specific RAT with DDS at
+        specific slot.
+
+        Test step:
+        1. Get sub IDs of specific slots of both MO and MT devices.
+        2. Switch DDS to specific slot.
+        3. Check HTTP connection after DDS switch.
+        4. Set up phones in desired RAT.
+        5. Send SMS/MMS.
+
+        Args:
+            mo_slot: Slot sending MO SMS (0 or 1)
+            mt_slot: Slot receiving MT SMS (0 or 1)
+            dds_slot: Preferred data slot
+            mo_rat: RAT for both slots of MO device
+            mt_rat: RAT for both slots of MT device
+            direction: "mo" or "mt"
+            expected_result: True of False
+
+        Returns:
+            TestFailure if failed.
+        """
+        ads = self.android_devices
+
+        if direction == "mo":
+            ad_mo = ads[0]
+            ad_mt = ads[1]
+        else:
+            ad_mo = ads[1]
+            ad_mt = ads[0]
+
+        if mo_slot is not None:
+            mo_sub_id = get_subid_from_slot_index(self.log, ad_mo, mo_slot)
+            if mo_sub_id == INVALID_SUB_ID:
+                ad_mo.log.warning("Failed to get sub ID at slot %s.", mo_slot)
+                return False
+            mo_other_sub_id = get_subid_from_slot_index(
+                self.log, ad_mo, 1-mo_slot)
+            set_subid_for_message(ad_mo, mo_sub_id)
+        else:
+            _, mo_sub_id, _ = get_subid_on_same_network_of_host_ad(
+                ads, type="sms")
+            if mo_sub_id == INVALID_SUB_ID:
+                ad_mo.log.warning("Failed to get sub ID at slot %s.", mo_slot)
+                return False
+            mo_slot = "auto"
+            set_subid_for_message(ad_mo, mo_sub_id)
+            if msg == "MMS":
+                set_subid_for_data(ad_mo, mo_sub_id)
+                ad_mo.droid.telephonyToggleDataConnection(True)
+        ad_mo.log.info("Sub ID for outgoing %s at slot %s: %s", msg, mo_slot,
+            get_outgoing_message_sub_id(ad_mo))
+
+        if mt_slot is not None:
+            mt_sub_id = get_subid_from_slot_index(self.log, ad_mt, mt_slot)
+            if mt_sub_id == INVALID_SUB_ID:
+                ad_mt.log.warning("Failed to get sub ID at slot %s.", mt_slot)
+                return False
+            mt_other_sub_id = get_subid_from_slot_index(
+                self.log, ad_mt, 1-mt_slot)
+            set_subid_for_message(ad_mt, mt_sub_id)
+        else:
+            _, mt_sub_id, _ = get_subid_on_same_network_of_host_ad(
+                ads, type="sms")
+            if mt_sub_id == INVALID_SUB_ID:
+                ad_mt.log.warning("Failed to get sub ID at slot %s.", mt_slot)
+                return False
+            mt_slot = "auto"
+            set_subid_for_message(ad_mt, mt_sub_id)
+            if msg == "MMS":
+                set_subid_for_data(ad_mt, mt_sub_id)
+                ad_mt.droid.telephonyToggleDataConnection(True)
+        ad_mt.log.info("Sub ID for incoming %s at slot %s: %s", msg, mt_slot,
+            get_outgoing_message_sub_id(ad_mt))
+
+        self.log.info("Step 1: Switch DDS.")
+        if dds_slot:
+            if not set_dds_on_slot_1(ads[0]):
+                self.log.warning(
+                    "Failed to set DDS at eSIM on %s", ads[0].serial)
+                return False
+        else:
+            if not set_dds_on_slot_0(ads[0]):
+                self.log.warning(
+                    "Failed to set DDS at pSIM on %s", ads[0].serial)
+                return False
+
+        self.log.info("Step 2: Check HTTP connection after DDS switch.")
+        if not verify_http_connection(self.log,
+           ads[0],
+           url="https://www.google.com",
+           retry=5,
+           retry_interval=15,
+           expected_state=True):
+
+            self.log.error("Failed to verify http connection.")
+            return False
+        else:
+            self.log.info("Verify http connection successfully.")
+
+        if mo_rat[0] == "volte":
+            mo_slot0_phone_setup_func = phone_setup_volte_for_subscription
+        elif mo_rat[0] == "csfb":
+            mo_slot0_phone_setup_func = phone_setup_csfb_for_subscription
+        elif mo_rat[0] == "3g":
+            mo_slot0_phone_setup_func = phone_setup_voice_3g_for_subscription
+        elif not mo_rat[0] or mo_rat[0] == "general":
+            mo_slot0_phone_setup_func = \
+                phone_setup_voice_general_for_subscription
+
+        if mo_rat[1] == "volte":
+            mo_slot1_phone_setup_func = phone_setup_volte_for_subscription
+        elif mo_rat[1] == "csfb":
+            mo_slot1_phone_setup_func = phone_setup_csfb_for_subscription
+        elif mo_rat[1] == "3g":
+            mo_slot1_phone_setup_func = phone_setup_voice_3g_for_subscription
+        elif not mo_rat[1] or mo_rat[1] == "general":
+            mo_slot1_phone_setup_func = \
+                phone_setup_voice_general_for_subscription
+
+        if mt_rat[0] == "volte":
+            mt_slot0_phone_setup_func = phone_setup_volte_for_subscription
+        elif mt_rat[0] == "csfb":
+            mt_slot0_phone_setup_func = phone_setup_csfb_for_subscription
+        elif mt_rat[0] == "3g":
+            mt_slot0_phone_setup_func = phone_setup_voice_3g_for_subscription
+        elif not mt_rat[0] or mt_rat[0] == "general":
+            mt_slot0_phone_setup_func = \
+                phone_setup_voice_general_for_subscription
+
+        if mt_rat[1] == "volte":
+            mt_slot1_phone_setup_func = phone_setup_volte_for_subscription
+        elif mt_rat[1] == "csfb":
+            mt_slot1_phone_setup_func = phone_setup_csfb_for_subscription
+        elif mt_rat[1] == "3g":
+            mt_slot1_phone_setup_func = phone_setup_voice_3g_for_subscription
+        elif not mt_rat[1] or mt_rat[1] == "general":
+            mt_slot1_phone_setup_func = \
+                phone_setup_voice_general_for_subscription
+
+        if mo_slot == 1:
+            mo_phone_setup_func = mo_slot1_phone_setup_func
+            if mo_rat[0] == "volte":
+                phone_setup_volte_for_subscription(
+                    self.log, ad_mo, mo_other_sub_id)
+            elif mo_rat[0] == "csfb":
+                phone_setup_csfb_for_subscription(
+                    self.log, ad_mo, mo_other_sub_id)
+            elif mo_rat[0] == "3g":
+                phone_setup_voice_3g_for_subscription(
+                    self.log, ad_mo, mo_other_sub_id)
+            elif not mo_rat[0] or mo_rat[0] == "general":
+                phone_setup_voice_general_for_subscription(
+                    self.log, ad_mo, mo_other_sub_id)
+        elif mo_slot == 0:
+            mo_phone_setup_func = mo_slot0_phone_setup_func
+            if mo_rat[1] == "volte":
+                phone_setup_volte_for_subscription(
+                    self.log, ad_mo, mo_other_sub_id)
+            elif mo_rat[1] == "csfb":
+                phone_setup_csfb_for_subscription(
+                    self.log, ad_mo, mo_other_sub_id)
+            elif mo_rat[1] == "3g":
+                phone_setup_voice_3g_for_subscription(
+                    self.log, ad_mo, mo_other_sub_id)
+            elif not mo_rat[1] or mo_rat[1] == "general":
+                phone_setup_voice_general_for_subscription(
+                    self.log, ad_mo, mo_other_sub_id)
+        else:
+            mo_phone_setup_func = phone_setup_voice_general_for_subscription
+
+        if mt_slot == 1:
+            mt_phone_setup_func = mt_slot1_phone_setup_func
+            if mt_rat[0] == "volte":
+                phone_setup_volte_for_subscription(
+                    self.log, ad_mt, mt_other_sub_id)
+            elif mt_rat[0] == "csfb":
+                phone_setup_csfb_for_subscription(
+                    self.log, ad_mt, mt_other_sub_id)
+            elif mt_rat[0] == "3g":
+                phone_setup_voice_3g_for_subscription(
+                    self.log, ad_mt, mt_other_sub_id)
+            elif not mt_rat[0] or mt_rat[0] == "general":
+                phone_setup_voice_general_for_subscription(
+                    self.log, ad_mt, mt_other_sub_id)
+        elif mt_slot == 0:
+            mt_phone_setup_func = mt_slot0_phone_setup_func
+            if mt_rat[1] == "volte":
+                phone_setup_volte_for_subscription(
+                    self.log, ad_mt, mt_other_sub_id)
+            elif mt_rat[1] == "csfb":
+                phone_setup_csfb_for_subscription(
+                    self.log, ad_mt, mt_other_sub_id)
+            elif mt_rat[1] == "3g":
+                phone_setup_voice_3g_for_subscription(
+                    self.log, ad_mt, mt_other_sub_id)
+            elif not mt_rat[1] or mt_rat[1] == "general":
+                phone_setup_voice_general_for_subscription(
+                    self.log, ad_mt, mt_other_sub_id)
+        else:
+            mt_phone_setup_func = phone_setup_voice_general_for_subscription
+
+        self.log.info("Step 3: Set up phones in desired RAT.")
+        tasks = [(mo_phone_setup_func, (self.log, ad_mo, mo_sub_id)),
+                 (mt_phone_setup_func, (self.log, ad_mt, mt_sub_id))]
+        if not multithread_func(self.log, tasks):
+            self.log.error("Phone Failed to Set Up Properly.")
+            return False
+
+        time.sleep(WAIT_TIME_ANDROID_STATE_SETTLING)
+        self.log.info("Step 4: Send %s.", msg)
+
+        if msg == "MMS":
+            for ad, current_data_sub_id, current_msg_sub_id in [
+                [ ads[0],
+                  get_default_data_sub_id(ads[0]),
+                  get_outgoing_message_sub_id(ads[0]) ],
+                [ ads[1],
+                  get_default_data_sub_id(ads[1]),
+                  get_outgoing_message_sub_id(ads[1]) ]]:
+                if current_data_sub_id != current_msg_sub_id:
+                    ad.log.warning(
+                        "Current data sub ID (%s) does not match message"
+                        " sub ID (%s). MMS should NOT be sent.",
+                        current_data_sub_id,
+                        current_msg_sub_id)
+                    expected_result = False
+
+        result = self._msim_message_test(ad_mo, ad_mt, mo_sub_id, mt_sub_id,
+            msg=msg, expected_result=expected_result)
+
+        if not result:
+            log_messaging_screen_shot(ad_mo, test_name="%s_tx" % msg)
+            log_messaging_screen_shot(ad_mt, test_name="%s_rx" % msg)
+
+        return result
+
+    @test_tracker_info(uuid="4ae61fdf-2078-4e50-ae03-cb2e9299ce8d")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_volte_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["volte", "volte"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="0e8801f8-7203-45ba-aff3-cb667fd538e1")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_volte_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["volte", "volte"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="d54c2b4e-2e32-49f0-9536-879eb6f6577e")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_volte_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["volte", "volte"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="feed9119-df31-46f7-afd8-addf4052422a")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_volte_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["volte", "volte"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="1da9965c-c863-4e6e-9374-a082fa16d6fd")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_volte_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["volte", "volte"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="64aec600-851f-4bde-b66c-130c69d1d5b6")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_volte_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["volte", "volte"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="9ce40c2c-3a59-4612-a0cc-4fcba887856c")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_volte_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["volte", "volte"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="4e46081d-733d-47d9-be4d-9e492de38bcd")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_volte_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["volte", "volte"], msg="SMS", direction="mt")
+
+
+
+    @test_tracker_info(uuid="5ede96ed-78b5-4cfb-94a3-44c34d610bef")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_volte_csfb_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["volte", "csfb"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="ae681d36-e450-4453-88a8-e9abf4bdf723")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_volte_csfb_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["volte", "csfb"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="6490abf9-7fc9-4168-ba20-7da0cb18d96e")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_volte_csfb_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["volte", "csfb"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="71590c9e-add0-4cbb-a530-07f58d26d954")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_volte_csfb_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["volte", "csfb"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="1b033914-8a26-48e0-829a-c85b5a93ce42")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_volte_csfb_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["volte", "csfb"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="15ebac40-5dc3-47ee-a787-ae6f9d71aff6")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_volte_csfb_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["volte", "csfb"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="b38390d2-b5ab-414b-9c61-2324395a56a6")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_volte_csfb_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["volte", "csfb"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="1c4a3a34-800a-4117-8c32-b6ec7d58a5cb")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_volte_csfb_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["volte", "csfb"], msg="SMS", direction="mt")
+
+
+
+
+    @test_tracker_info(uuid="c7645032-8006-448e-ae3e-86c9223482cf")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_csfb_volte_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["csfb", "volte"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="a4455da1-6314-4d2e-a6eb-c7e063a5fd10")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_csfb_volte_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["csfb", "volte"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="60828bcc-0111-4d97-ac01-b43ff9c33b11")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_csfb_volte_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["csfb", "volte"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="d0f04ab9-c1fe-41b1-8ffc-7bf7cbb408ea")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_csfb_volte_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["csfb", "volte"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="97ad2e6f-8b71-49d4-870c-2f4438351880")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_csfb_volte_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["csfb", "volte"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="8353bce2-a800-440c-9822-a922343d0ff5")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_csfb_volte_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["csfb", "volte"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="7659d23d-8cf4-4ace-8e53-b26fc2fca38c")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_csfb_volte_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["csfb", "volte"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="91577f12-4a0e-4743-82bc-1b7581a6940d")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_csfb_volte_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["csfb", "volte"], msg="SMS", direction="mt")
+
+
+
+
+    @test_tracker_info(uuid="a5f2c1b0-5ae7-4187-ad63-4782dc47f62b")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_volte_3g_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["volte", "3g"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="0c983462-5372-4aae-a484-53da4d2b9553")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_volte_3g_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["volte", "3g"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="8266aaac-9d67-42c3-9260-d80c377b1ef9")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_volte_3g_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["volte", "3g"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="d6ae749b-5e69-489e-8fda-fcb38aaa6cb0")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_volte_3g_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["volte", "3g"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="f4985e53-d530-491c-94cd-51ba22a34eff")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_volte_3g_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["volte", "3g"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="b4fc2379-6937-404a-a659-249c1ccf9dd0")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_volte_3g_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["volte", "3g"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="e1027a25-b19f-4fb7-bfb9-79919e380c25")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_volte_3g_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["volte", "3g"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="7cf99f83-0542-42c8-8e72-1653e381aa6c")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_volte_3g_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["volte", "3g"], msg="SMS", direction="mt")
+
+
+
+
+    @test_tracker_info(uuid="c1084606-a63b-41da-a0cb-2db972b6a8ce")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_3g_volte_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["3g", "volte"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="4806716c-047a-4a33-a317-97d3cce5d2ca")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_3g_volte_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["3g", "volte"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="2877ff0b-d567-4683-baa3-20e254ed025c")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_3g_volte_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["3g", "volte"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="6bf3ea1b-e75c-4844-a311-5a18b1b7a1b8")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_3g_volte_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["3g", "volte"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="fb7bf8b2-fa44-4e05-a0ab-16e7b1907e6b")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_3g_volte_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["3g", "volte"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="d9090125-61cb-4ef5-97de-06c2ec8529bd")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_3g_volte_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["3g", "volte"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="d764c5ea-a34a-4b29-ab50-63bd63ebe5c4")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_3g_volte_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["3g", "volte"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="fe7d2f8c-eeb6-4ae9-a57d-1636d3153d2b")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_3g_volte_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["3g", "volte"], msg="SMS", direction="mt")
+
+
+
+    @test_tracker_info(uuid="b9a5cb40-4986-4811-90e7-628d1729ccb2")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_csfb_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["csfb", "csfb"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="220665c1-4c63-4450-b8bb-17fc6df24498")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_csfb_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["csfb", "csfb"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="968217a6-320f-41f0-b401-7c377309d983")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_csfb_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["csfb", "csfb"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="c6a5bf63-af40-4619-a0eb-0d1835fde36c")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_csfb_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["csfb", "csfb"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="ea9f4e72-0dea-4f5f-b5ff-4a0bad0d29a0")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_csfb_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["csfb", "csfb"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="4eb935f0-2b11-4b2d-8faa-9a022e36813a")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_csfb_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["csfb", "csfb"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="765e31fd-b412-43a8-a6a8-5d3ae66cab18")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_csfb_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["csfb", "csfb"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="bc6ada03-6a5e-4fe7-80c4-3aebc9fa426f")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_csfb_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["csfb", "csfb"], msg="SMS", direction="mt")
+
+
+
+
+    @test_tracker_info(uuid="a42994d0-bdb3-487e-98f2-665899d3edba")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_csfb_3g_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["csfb", "3g"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="d8ef0ac8-9cb1-4f32-8211-84dee563af00")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_csfb_3g_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["csfb", "3g"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="f4eb2254-5148-4cf9-b53f-56d8665de645")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_csfb_3g_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["csfb", "3g"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="fd546290-f7e7-47ff-b165-a9bb01e91c64")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_csfb_3g_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["csfb", "3g"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="d6994024-e845-48e2-9cd6-d72e97480a8a")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_csfb_3g_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["csfb", "3g"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="c816165e-49d8-4d0a-8bb5-e64ad910a55a")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_csfb_3g_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["csfb", "3g"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="647d546f-b325-4b91-be84-0bedf5a33210")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_csfb_3g_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["csfb", "3g"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="98b7e161-4953-4566-a96c-21545bf05e51")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_csfb_3g_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["csfb", "3g"], msg="SMS", direction="mt")
+
+
+
+
+    @test_tracker_info(uuid="9a3d1330-e70e-4ac0-a8bc-fec5710a8dcd")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_3g_csfb_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["3g", "csfb"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="51b4edd3-a867-409e-b367-2fd8cf0eb4a6")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_3g_csfb_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["3g", "csfb"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="dba9cb2b-84bd-47db-a5a6-826e54a1bbeb")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_3g_csfb_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["3g", "csfb"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="263494aa-f3c4-450e-b5bf-b9331d9c9dd8")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_3g_csfb_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["3g", "csfb"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="7ba231b8-edc9-4f64-ba7e-5f0360c4eed5")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_3g_csfb_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["3g", "csfb"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="ca1e9c35-07f2-4e32-8a59-61efc37f11a4")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_3g_csfb_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["3g", "csfb"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="f19252c0-8ff6-4267-adcd-f676407333e6")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_3g_csfb_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["3g", "csfb"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="34ef2001-d80d-4818-b458-1e8a9556e5cd")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_3g_csfb_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["3g", "csfb"], msg="SMS", direction="mt")
+
+
+
+
+    @test_tracker_info(uuid="947ceba7-9aeb-402c-ba36-4856bc4352eb")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_3g_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["3g", "3g"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="9f9677e1-1215-49ed-a671-22e7779659a9")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_3g_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["3g", "3g"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="f77112c8-85e8-4584-a0b7-bba11c23be7d")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_3g_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["3g", "3g"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="facc19fd-7846-488e-9cf1-755f81d0fee2")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_3g_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["3g", "3g"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="5a26f35e-c038-409e-8941-7e0b475ebda8")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_3g_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["3g", "3g"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="c303aa26-0fd0-44d7-b2fc-32782deaf5ea")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mo_3g_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["3g", "3g"], msg="SMS", direction="mo")
+
+    @test_tracker_info(uuid="45cbddd3-889d-46ab-8d7f-9dd971287155")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_3g_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["3g", "3g"], msg="SMS", direction="mt")
+
+    @test_tracker_info(uuid="7dacd6b2-9d21-4c4d-bec4-fdfe685cdce8")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_sms_mt_3g_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["3g", "3g"], msg="SMS", direction="mt")
+
+
+
+
+    @test_tracker_info(uuid="24268e9f-b047-4c67-92f9-22e0bd8b3a11")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_volte_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["volte", "volte"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="1d72b01d-5ca7-4899-ae57-ecbeff09bc39")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_volte_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["volte", "volte"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="ca2ad510-7f5e-49e4-861e-d433f86c2237")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_volte_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["volte", "volte"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="63a0480a-18dd-43e5-82e9-45e008346ea9")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_volte_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["volte", "volte"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="5e51f0d9-f1b6-4bfe-88ab-f28ebaa6ee55")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_volte_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["volte", "volte"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="fcc7e8aa-41a4-48a1-9586-d6080c77a79b")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_volte_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["volte", "volte"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="f633bf56-2d15-462b-994d-e9294d87ca23")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_volte_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["volte", "volte"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="3c336061-32cf-4e9a-bb1e-b54e3357e644")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_volte_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["volte", "volte"], msg="MMS", direction="mt")
+
+
+
+    @test_tracker_info(uuid="50ee8103-0196-4194-b982-9d07c68e57e4")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_volte_csfb_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["volte", "csfb"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="ec09405d-b12d-405c-9bfd-ba3eb20eb752")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_volte_csfb_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["volte", "csfb"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="26bea731-b653-4e9f-98d1-1b290b959bfc")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_volte_csfb_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["volte", "csfb"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="ecc010da-1798-4da3-b041-13e2b2547548")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_volte_csfb_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["volte", "csfb"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="cf4c5bd0-525a-497a-a0f8-17acd9dbeabd")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_volte_csfb_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["volte", "csfb"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="603f22db-913b-4ad3-b148-7c6d3624bc09")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_volte_csfb_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["volte", "csfb"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="561efaf1-7fe4-4196-991e-d03eee28fb4e")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_volte_csfb_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["volte", "csfb"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="6f383ef0-d99a-4a3d-b137-e24fa03306b9")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_volte_csfb_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["volte", "csfb"], msg="MMS", direction="mt")
+
+
+
+
+    @test_tracker_info(uuid="eeaa1262-c2a0-4f47-baa5-7435fa9e9315")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_csfb_volte_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["csfb", "volte"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="478f5497-cc21-4634-8b97-df70dbe286c0")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_csfb_volte_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["csfb", "volte"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="1c4af9c6-87d6-438c-aba7-70d8bb4b357e")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_csfb_volte_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["csfb", "volte"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="825daee3-db6c-404a-a454-cea98182bf5a")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_csfb_volte_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["csfb", "volte"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="50fe9f3e-eae1-4a01-8655-02340f85037a")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_csfb_volte_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["csfb", "volte"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="bae89139-f73f-4a06-bb65-a0bae385fae9")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_csfb_volte_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["csfb", "volte"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="42e897e3-4411-45a0-bf62-3ea6f59c2617")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_csfb_volte_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["csfb", "volte"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="9847b0c8-517e-42ea-9306-8a4a1cd46cd8")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_csfb_volte_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["csfb", "volte"], msg="MMS", direction="mt")
+
+
+
+    @test_tracker_info(uuid="5057f8e4-19e7-42c0-bc63-1678d8ce1504")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_volte_3g_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["volte", "3g"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="52bb44ae-0263-4415-8a61-337a8f990f8b")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_volte_3g_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["volte", "3g"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="deb00e73-b63a-4ed8-8b7f-953704b5d783")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_volte_3g_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["volte", "3g"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="e0aa9846-2c02-4ba1-aeef-08a673c497ae")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_volte_3g_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["volte", "3g"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="ef06ae23-6f52-4c3b-b228-5c95ed780cd2")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_volte_3g_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["volte", "3g"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="69a62cd6-290b-4e58-81ff-0b35ac82262c")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_volte_3g_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["volte", "3g"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="645cef41-ddf8-49b4-8a58-2da019883f32")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_volte_3g_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["volte", "3g"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="b0b8aac3-cc85-47d9-828a-8016138fe466")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_volte_3g_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["volte", "3g"], msg="MMS", direction="mt")
+
+
+
+
+    @test_tracker_info(uuid="1dcebefb-3338-4550-96fa-07b64493db1c")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_3g_volte_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["3g", "volte"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="3d06854e-5b86-46fb-9ca2-a217b026733d")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_3g_volte_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["3g", "volte"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="0c0f72bc-4076-411d-8a8d-fc6ae414a73a")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_3g_volte_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["3g", "volte"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="b63211fa-baf0-4dff-bd18-d7f80e85e551")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_3g_volte_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["3g", "volte"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="80c2fe4d-e87a-45d7-9b83-23863e75cd94")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_3g_volte_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["3g", "volte"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="84be29a1-0b29-4785-baaa-6cf84c503fa6")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_3g_volte_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["3g", "volte"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="591d2948-2257-4a46-8ccb-5c628d85fc43")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_3g_volte_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["3g", "volte"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="67e4dae5-8ca5-475f-af0e-f91b89df68ed")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_3g_volte_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["3g", "volte"], msg="MMS", direction="mt")
+
+
+
+
+    @test_tracker_info(uuid="35d33d3e-f618-4ce1-8b40-3dac0ef2731a")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_csfb_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["csfb", "csfb"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="179e49c7-7066-4285-9b5b-3ef639d8c5e4")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_csfb_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["csfb", "csfb"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="09d6954f-d760-47e5-8667-3ed317fdbfbc")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_csfb_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["csfb", "csfb"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="80f8c18f-2bd6-4310-be39-472d7a24e08a")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_csfb_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["csfb", "csfb"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="b700d261-7616-4226-95cc-59ec54cc2678")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_csfb_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["csfb", "csfb"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="5cb2cc81-bf3e-4025-b85b-2bf1a4797e41")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_csfb_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["csfb", "csfb"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="1af2ac12-4d2d-4a36-8c46-8b3013eadab2")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_csfb_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["csfb", "csfb"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="66d8108e-8dd9-42e3-b2cd-49a538beecf6")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_csfb_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["csfb", "csfb"], msg="MMS", direction="mt")
+
+
+
+
+    @test_tracker_info(uuid="a35df875-72eb-43d7-874c-a7b3f0aea2a9")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_csfb_3g_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["csfb", "3g"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="cf718bda-75d6-4906-a33e-110610b01d4d")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_csfb_3g_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["csfb", "3g"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="342cbc1a-7151-425c-9bd6-81808a5eb7e6")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_csfb_3g_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["csfb", "3g"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="01e33aa4-27a9-48fd-b9e8-313980d06b0d")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_csfb_3g_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["csfb", "3g"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="fe527335-731e-49a5-a07e-f4999c536153")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_csfb_3g_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["csfb", "3g"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="1c56f866-3b3c-45c0-9c13-face44246aca")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_csfb_3g_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["csfb", "3g"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="4affd77a-afdc-4ac9-ba8a-a3599efe1e96")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_csfb_3g_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["csfb", "3g"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="8440c05e-28d9-45c7-b32e-127f240d12f0")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_csfb_3g_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["csfb", "3g"], msg="MMS", direction="mt")
+
+
+
+    @test_tracker_info(uuid="a53ebb84-945e-4068-a78a-fd78362e8073")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_3g_csfb_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["3g", "csfb"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="23bedcbc-7c09-430d-a162-04de75244fd8")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_3g_csfb_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["3g", "csfb"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="e1e1ef53-d91b-4b10-9bd6-e065ca48ab94")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_3g_csfb_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["3g", "csfb"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="e813ae3b-b875-43f6-a055-d2119cec9786")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_3g_csfb_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["3g", "csfb"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="d5863aab-a46a-4363-8bf8-5dcfc29a9055")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_3g_csfb_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["3g", "csfb"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="79a0bd58-0de0-471e-9e53-9cc655700428")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_3g_csfb_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["3g", "csfb"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="e9a340f4-22a7-4786-bb5b-370295324d5a")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_3g_csfb_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["3g", "csfb"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="8a261b43-2532-4c47-ac0c-3a5dd0d51b69")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_3g_csfb_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["3g", "csfb"], msg="MMS", direction="mt")
+
+
+
+
+    @test_tracker_info(uuid="2efdf7da-d2ec-4580-a164-5f7b740f9ac6")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_3g_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            0, None, 0, mo_rat=["3g", "3g"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="459e9b40-ad4e-4a89-ac89-f3c8ec472d3f")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_3g_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            0, None, 1, mo_rat=["3g", "3g"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="130a0e85-1653-4ddf-81b9-dadd26dde1e3")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_3g_psim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 0, 0, mt_rat=["3g", "3g"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="e81f0b33-38b3-4a4d-9e05-fb44a689230b")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_3g_psim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 0, 1, mt_rat=["3g", "3g"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="61894370-93b5-4ab5-80c7-d50948d38471")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_3g_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            1, None, 0, mo_rat=["3g", "3g"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="8d41ee9a-fed9-4472-ada7-007e56690c67")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mo_3g_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            1, None, 1, mo_rat=["3g", "3g"], msg="MMS", direction="mo")
+
+    @test_tracker_info(uuid="6aa41641-2619-48f6-8c5f-1c06260f0e28")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_3g_esim_dds_slot_0(self):
+        return self._test_msim_message(
+            None, 1, 0, mt_rat=["3g", "3g"], msg="MMS", direction="mt")
+
+    @test_tracker_info(uuid="94d8e05d-eb99-4a71-be00-e725cbd05cae")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_msim_mms_mt_3g_esim_dds_slot_1(self):
+        return self._test_msim_message(
+            None, 1, 1, mt_rat=["3g", "3g"], msg="MMS", direction="mt")
\ No newline at end of file