普通文本  |  624行  |  26.75 KB

#/usr/bin/env python3.4
#
#   Copyright 2016 - The Android Open Source Project
#
#   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.
"""
Power tests for cellular connectivity.
"""

import time
import json
import logging
import os
import scapy.all as scapy

import acts.controllers.iperf_server as ipf

from acts import base_test
from acts.test_decorators import test_tracker_info
from acts.controllers.anritsu_lib._anritsu_utils import AnritsuError
from acts.controllers.anritsu_lib.md8475a import MD8475A
from acts.controllers.anritsu_lib.md8475a import BtsBandwidth
from acts.controllers.anritsu_lib.md8475a import BtsPacketRate
from acts.controllers.anritsu_lib.md8475a import VirtualPhoneStatus
from acts.test_utils.tel.anritsu_utils import cb_serial_number
from acts.test_utils.tel.anritsu_utils import set_system_model_1x
from acts.test_utils.tel.anritsu_utils import set_system_model_gsm
from acts.test_utils.tel.anritsu_utils import load_system_model_from_config_files
from acts.test_utils.tel.anritsu_utils import load_system_model_from_config_files_ca
from acts.test_utils.tel.anritsu_utils import set_system_model_lte
from acts.test_utils.tel.anritsu_utils import set_system_model_lte_wcdma
from acts.test_utils.tel.anritsu_utils import set_system_model_wcdma
from acts.test_utils.tel.anritsu_utils import sms_mo_send
from acts.test_utils.tel.anritsu_utils import sms_mt_receive_verify
from acts.test_utils.tel.anritsu_utils import set_usim_parameters
from acts.test_utils.tel.anritsu_utils import set_post_sim_params
from acts.test_utils.tel.tel_defines import DIRECTION_MOBILE_ORIGINATED
from acts.test_utils.tel.tel_defines import DIRECTION_MOBILE_TERMINATED
from acts.test_utils.tel.tel_defines import NETWORK_MODE_CDMA
from acts.test_utils.tel.tel_defines import NETWORK_MODE_GSM_ONLY
from acts.test_utils.tel.tel_defines import NETWORK_MODE_GSM_UMTS
from acts.test_utils.tel.tel_defines import NETWORK_MODE_LTE_GSM_WCDMA
from acts.test_utils.tel.tel_defines import NETWORK_MODE_LTE_CDMA_EVDO
from acts.test_utils.tel.tel_defines import RAT_1XRTT
from acts.test_utils.tel.tel_defines import RAT_GSM
from acts.test_utils.tel.tel_defines import RAT_LTE
from acts.test_utils.tel.tel_defines import RAT_WCDMA
from acts.test_utils.tel.tel_defines import RAT_FAMILY_CDMA2000
from acts.test_utils.tel.tel_defines import RAT_FAMILY_GSM
from acts.test_utils.tel.tel_defines import RAT_FAMILY_LTE
from acts.test_utils.tel.tel_defines import RAT_FAMILY_UMTS
from acts.test_utils.tel.tel_defines import NETWORK_SERVICE_DATA
from acts.test_utils.tel.tel_defines import GEN_4G
from acts.test_utils.tel.tel_test_utils import ensure_network_rat
from acts.test_utils.tel.tel_test_utils import ensure_phones_idle
from acts.test_utils.tel.tel_test_utils import ensure_network_generation
from acts.test_utils.tel.tel_test_utils import toggle_airplane_mode
from acts.test_utils.tel.tel_test_utils import iperf_test_by_adb
from acts.test_utils.wifi import wifi_power_test_utils as wputils

from acts.utils import adb_shell_ping
from acts.utils import rand_ascii_str
from acts.controllers import iperf_server
from acts.utils import exe_cmd

DEFAULT_PING_DURATION = 30


SCHEDULING_DYNAMIC = 0
SCHEDULING_MIN_MCS = 1
SCHEDULING_MAX_MCS = 2

DIRECTION_UPLINK = 0
DIRECTION_DOWNLINK = 1

TM1 = 1
TM4 = 4

class PowerTelTest(base_test.BaseTestClass):

    SETTLING_TIME = 10


    def __init__(self, controllers):
        base_test.BaseTestClass.__init__(self, controllers)

        self.ad = self.android_devices[0]
        self.iperf_server = self.iperf_servers[0]
        self.port_num = self.iperf_server.port
        self.log.info("Iperf Port is %s", self.port_num)
        self.ad.sim_card = getattr(self.ad, "sim_card", None)
        self.log.info("SIM Card is %s", self.ad.sim_card)
        self.md8475a_ip_address = self.user_params[
            "anritsu_md8475a_ip_address"]
        self.wlan_option = self.user_params.get("anritsu_wlan_option", False)

        # Load power level values
        self.big_step = self.user_params.get("big_step", 10)
        self.small_step_range = self.user_params.get("small_step_range", [])
        self.small_step = self.user_params.get("small_step", 3)

        # Load power levels
        self.uplink_power_levels = self.get_power_levels(
            small_step_range = self.user_params.get("uplink_small_step_range", []),
            big_step_range = self.user_params.get("uplink_big_step_range", [])
        )

        self.downlink_power_levels = self.get_power_levels(
            small_step_range = self.user_params.get("downlink_small_step_range", []),
            big_step_range = self.user_params.get("downlink_big_step_range", [])
        )

        # Setup sampling durations
        self.mon_offset = self.user_params.get("monsoon_offset", 15)
        self.mon_duration = self.user_params.get("monsoon_sampling_time", 10) 
        self.iperf_offset = self.user_params.get("iperf_offset", 5)
        self.iperf_duration = self.mon_duration + self.iperf_offset + self.mon_offset 

        # Setup monsoon
        self.mon_freq = 5000
        self.mon_data_path = os.path.join(self.log_path, 'Monsoon')
        self.mon = self.monsoons[0]
        self.mon.set_max_current(8.0)
        self.mon.set_voltage(4.2)
        self.mon.attach_device(self.ad)
        self.mon_info = wputils.create_monsoon_info(self)

        # Fetch IP address of the host machine
        self.ip = scapy.get_if_addr(self.user_params.get("interface", "eno1"))
        self.log.info("Dest IP is %s", self.ip)

    def setup_class(self):
        try:
            self.anritsu = MD8475A(self.md8475a_ip_address, self.log,
                                   self.wlan_option)
        except AnritsuError:
            self.log.error("Error in connecting to Anritsu Simulator")
            return False
        return True

    def setup_test(self):
        ensure_phones_idle(self.log, self.android_devices)
        wputils.dut_rockbottom(self.ad)
        return True

    def teardown_test(self):
        self.log.info("Stopping Simulation")
        self.anritsu.stop_simulation()
        toggle_airplane_mode(self.log, self.ad, True)
        return True

    def teardown_class(self):
        self.anritsu.disconnect()
        return True        
    
    def get_power_levels(self, small_step_range, big_step_range):
        
        power_levels = []
        if len(big_step_range) != 0:
            if len(big_step_range) != 2:
                self.log.error("big_step_range should contain an array with a min and max value for that part of the sweeping range.")
            else:
                if big_step_range[0] > big_step_range[1]:
                    aux = big_step_range[0]
                    big_step_range[0] = big_step_range[1]
                    big_step_range[1] = aux
                power_levels.extend(range(big_step_range[1], big_step_range[0], -self.big_step))
                power_levels.append(big_step_range[0])
        if len(small_step_range) != 0:
            if len(small_step_range) != 2:
                self.log.error("small_step_range should contain an array with a min and max value for that part of the sweeping range.")
            else:
                if small_step_range[0] > small_step_range[1]:
                    aux = small_step_range[0]
                    small_step_range[0] = small_step_range[1]
                    small_step_range[1] = aux
                power_levels.extend(range(small_step_range[1], small_step_range[0], -self.small_step))
                power_levels.append(small_step_range[0])
        print(str(power_levels))
        return power_levels

    def start_sitmulation(self, set_simulation_func, band, scheduling, bandwidth, transmission_mode):
        
        [self.bts1] = set_simulation_func(self.anritsu, self.user_params,
                              self.ad.sim_card)

        self.bts1.band = band
    
        if bandwidth == 20:
            self.bts1.bandwidth = BtsBandwidth.LTE_BANDWIDTH_20MHz
        elif bandwidth == 15:
            self.bts1.bandwidth = BtsBandwidth.LTE_BANDWIDTH_15MHz
        elif bandwidth == 10:
            self.bts1.bandwidth = BtsBandwidth.LTE_BANDWIDTH_10MHz
        elif bandwidth == 5:
            self.bts1.bandwidth = BtsBandwidth.LTE_BANDWIDTH_5MHz
        elif bandwidth == 3:
            self.bts1.bandwidth = BtsBandwidth.LTE_BANDWIDTH_3MHz
        elif bandwidth == 1.4:
            self.bts1.bandwidth = BtsBandwidth.LTE_BANDWIDTH_1dot4MHz

        if scheduling == SCHEDULING_DYNAMIC:
            self.bts1.lte_scheduling_mode = "DYNAMIC"
        else:
            
            self.bts1.lte_scheduling_mode = "STATIC"
            self.bts1.packet_rate = BtsPacketRate.LTE_MANUAL
            self.anritsu.send_command("TBSPATTERN OFF, BTS1")
            self.bts1.lte_mcs_dl = 0
            self.bts1.nrb_dl = 5 * bandwidth
            self.bts1.nrb_ul = 5 * bandwidth
            
            if scheduling == SCHEDULING_MIN_MCS:
                self.bts1.lte_mcs_ul = 0
            else:
                self.bts1.lte_mcs_ul = 23
    
        if transmission_mode == TM1:
            self.bts1.dl_antenna = 1
            self.bts1.transmode = "TM1"
        elif transmission_mode == TM4:
            self.bts1.dl_antenna = 2
            self.bts1.transmode = "TM4"
            
        self.anritsu.start_simulation()
       
    def start_sitmulation_ca(self, set_simulation_func):
        
        [self.bts1] = set_simulation_func(self.anritsu, self.user_params,
                              self.ad.sim_card)
            
        self.anritsu.start_simulation()
    
    def measure_throughput_and_power(self, direction):
            
        # Start iperf locally
        self.log.info("Starting iperf server.")
        self.iperf_server.start()

        self.log.info("Starting iperf client on the phone.")
        iperf_args = '-i 1 -t %d' % self.iperf_duration
        if direction == DIRECTION_DOWNLINK:
            iperf_args = iperf_args + ' -R'
        iperf_args = iperf_args + ' > /dev/null' 
        
        wputils.run_iperf_client_nonblocking(
            self.ad, self.ip, iperf_args)

        # Collect power data
        self.log.info("Starting sampling with monsoon.")
        file_path, current = wputils.monsoon_data_collect_save(
            self.ad, self.mon_info, self.current_test_name, bug_report=0)

        # Collect iperf data

        # Give some time for iperf to finish
        time.sleep(self.iperf_offset)

        self.iperf_server.stop()

        throughput = 0
        try:
            iperf_result = ipf.IPerfResult(self.iperf_server.log_files[-1])
            
            if direction == DIRECTION_DOWNLINK:
                if iperf_result.avg_send_rate is not None:
                    throughput = iperf_result.avg_send_rate * 8
            elif direction == DIRECTION_UPLINK:
                if iperf_result.avg_receive_rate is not None:
                    throughput = iperf_result.avg_receive_rate * 8
        except:
            pass
            
        self.log.info("Average receive rate: %sMbps", throughput)

        return [throughput, current]
    
    def sweep(self, power_levels, direction):
        
        if direction == DIRECTION_DOWNLINK:
            self.bts1.input_level = -40

        
        results_throughput = []
        results_power = []
        
        for power in power_levels:
            
            self.log.info("------- Measuring with power level %d dBm -------", power)
            
            if direction == DIRECTION_DOWNLINK:
                self.bts1.output_level = power
            elif direction == DIRECTION_UPLINK:
                self.bts1.input_level = power
            
            self.log.info("Current Power Level is %s dBm", power)

            
            throughput, current = self.measure_throughput_and_power(direction)
            results_throughput.append(throughput)
            results_power.append(current)


        return [results_throughput, results_power]

    def set_to_rockbottom_and_attach(self):
        
        self.bts1.input_power = -10
        self.bts1.output_power = -30
        
        # Set device to rockbottom
        self.ad.droid.goToSleepNow()
        
        # Turn of airplane mode and wait until the phone attaches
        toggle_airplane_mode(self.log, self.ad, False)
        time.sleep(2)
        self.anritsu.wait_for_registration_state()
        time.sleep(self.SETTLING_TIME)
        self.log.info("UE attached to the callbox.")

    def save_results(self, results_throughput, results_power, power_levels, file_name = ""):

        if file_name == "":
            file_name = self.current_test_name
        
        self.logpath = os.path.join(logging.log_path, self.current_test_name + ".csv")
        with open(self.logpath, "a") as tput_file:
            tput_file.write("# rf_power, current, throughput")
            tput_file.write("\n")
            for i in range(0, len(results_power)):
                tput_file.write(str(power_levels[i]) + ", " + str(results_power[i]) + ", " + str(results_throughput[i]))
                tput_file.write("\n")

    def do_test(self, direction, band, scheduling, bandwidth, transmission_mode, ca_band2 = 0):
        
        if direction == DIRECTION_DOWNLINK:
            power_levels = self.downlink_power_levels
        elif direction == DIRECTION_UPLINK:
            power_levels = self.uplink_power_levels
        
        if ca_band2 == 0:
            self.start_sitmulation(load_system_model_from_config_files, band, scheduling, bandwidth, transmission_mode)
        else:
            self.start_sitmulation_ca(load_system_model_from_config_files_ca, band, ca_band2, scheduling, bandwidth)
            
        self.set_to_rockbottom_and_attach()
        results_throughput, results_power = self.sweep(power_levels, direction)
        self.save_results(results_throughput, results_power, power_levels)

    def do_test_ca(self, direction):
        
        if direction == DIRECTION_DOWNLINK:
            power_levels = self.downlink_power_levels
        elif direction == DIRECTION_UPLINK:
            power_levels = self.uplink_power_levels
        
        self.start_sitmulation_ca(load_system_model_from_config_files_ca)
            
        self.set_to_rockbottom_and_attach()
        results_throughput, results_power = self.sweep(power_levels, direction)
        self.save_results(results_throughput, results_power, power_levels)



    """ Tests Begin """
	
    def test_downlink_tm1_band4_14MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 4, scheduling = SCHEDULING_DYNAMIC, bandwidth = 1.4, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band4_14MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MIN_MCS, bandwidth = 1.4, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band4_14MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MAX_MCS, bandwidth = 1.4, transmission_mode = TM1, ca_band2 = 0)

    def test_downlink_tm4_band4_14MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 4, scheduling = SCHEDULING_DYNAMIC, bandwidth = 1.4, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band4_14MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MIN_MCS, bandwidth = 1.4, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band4_14MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MAX_MCS, bandwidth = 1.4, transmission_mode = TM4, ca_band2 = 0)

    def test_downlink_tm1_band4_3MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 4, scheduling = SCHEDULING_DYNAMIC, bandwidth = 3, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band4_3MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MIN_MCS, bandwidth = 3, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band4_3MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MAX_MCS, bandwidth = 3, transmission_mode = TM1, ca_band2 = 0)

    def test_downlink_tm4_band4_3MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 4, scheduling = SCHEDULING_DYNAMIC, bandwidth = 3, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band4_3MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MIN_MCS, bandwidth = 3, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band4_3MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MAX_MCS, bandwidth = 3, transmission_mode = TM4, ca_band2 = 0)

    def test_downlink_tm1_band4_5MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 4, scheduling = SCHEDULING_DYNAMIC, bandwidth = 5, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band4_5MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MIN_MCS, bandwidth = 5, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band4_5MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MAX_MCS, bandwidth = 5, transmission_mode = TM1, ca_band2 = 0)

    def test_downlink_tm4_band4_5MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 4, scheduling = SCHEDULING_DYNAMIC, bandwidth = 5, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band4_5MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MIN_MCS, bandwidth = 5, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band4_5MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MAX_MCS, bandwidth = 5, transmission_mode = TM4, ca_band2 = 0)

    def test_downlink_tm1_band4_10MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 4, scheduling = SCHEDULING_DYNAMIC, bandwidth = 10, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band4_10MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MIN_MCS, bandwidth = 10, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band4_10MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MAX_MCS, bandwidth = 10, transmission_mode = TM1, ca_band2 = 0)

    def test_downlink_tm4_band4_10MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 4, scheduling = SCHEDULING_DYNAMIC, bandwidth = 10, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band4_10MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MIN_MCS, bandwidth = 10, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band4_10MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MAX_MCS, bandwidth = 10, transmission_mode = TM4, ca_band2 = 0)

    def test_downlink_tm1_band4_20MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 4, scheduling = SCHEDULING_DYNAMIC, bandwidth = 20, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band4_20MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MIN_MCS, bandwidth = 20, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band4_20MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MAX_MCS, bandwidth = 20, transmission_mode = TM1, ca_band2 = 0)

    def test_downlink_tm4_band4_20MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 4, scheduling = SCHEDULING_DYNAMIC, bandwidth = 20, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band4_20MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MIN_MCS, bandwidth = 20, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band4_20MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 4, scheduling = SCHEDULING_MAX_MCS, bandwidth = 20, transmission_mode = TM4, ca_band2 = 0)

    def test_downlink_tm1_band7_5MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 7, scheduling = SCHEDULING_DYNAMIC, bandwidth = 5, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band7_5MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 7, scheduling = SCHEDULING_MIN_MCS, bandwidth = 5, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band7_5MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 7, scheduling = SCHEDULING_MAX_MCS, bandwidth = 5, transmission_mode = TM1, ca_band2 = 0)

    def test_downlink_tm4_band7_5MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 7, scheduling = SCHEDULING_DYNAMIC, bandwidth = 5, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band7_5MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 7, scheduling = SCHEDULING_MIN_MCS, bandwidth = 5, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band7_5MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 7, scheduling = SCHEDULING_MAX_MCS, bandwidth = 5, transmission_mode = TM4, ca_band2 = 0)

    def test_downlink_tm1_band7_10MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 7, scheduling = SCHEDULING_DYNAMIC, bandwidth = 10, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band7_10MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 7, scheduling = SCHEDULING_MIN_MCS, bandwidth = 10, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band7_10MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 7, scheduling = SCHEDULING_MAX_MCS, bandwidth = 10, transmission_mode = TM1, ca_band2 = 0)

    def test_downlink_tm4_band7_10MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 7, scheduling = SCHEDULING_DYNAMIC, bandwidth = 10, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band7_10MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 7, scheduling = SCHEDULING_MIN_MCS, bandwidth = 10, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band7_10MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 7, scheduling = SCHEDULING_MAX_MCS, bandwidth = 10, transmission_mode = TM4, ca_band2 = 0)

    def test_downlink_tm1_band7_20MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 7, scheduling = SCHEDULING_DYNAMIC, bandwidth = 20, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band7_20MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 7, scheduling = SCHEDULING_MIN_MCS, bandwidth = 20, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band7_20MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 7, scheduling = SCHEDULING_MAX_MCS, bandwidth = 20, transmission_mode = TM1, ca_band2 = 0)

    def test_downlink_tm4_band7_20MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 7, scheduling = SCHEDULING_DYNAMIC, bandwidth = 20, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band7_20MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 7, scheduling = SCHEDULING_MIN_MCS, bandwidth = 20, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band7_20MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 7, scheduling = SCHEDULING_MAX_MCS, bandwidth = 20, transmission_mode = TM4, ca_band2 = 0)

    def test_downlink_tm1_band13_5MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 13, scheduling = SCHEDULING_DYNAMIC, bandwidth = 5, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band13_5MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 13, scheduling = SCHEDULING_MIN_MCS, bandwidth = 5, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band13_5MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 13, scheduling = SCHEDULING_MAX_MCS, bandwidth = 5, transmission_mode = TM1, ca_band2 = 0)

    def test_downlink_tm4_band13_5MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 13, scheduling = SCHEDULING_DYNAMIC, bandwidth = 5, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band13_5MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 13, scheduling = SCHEDULING_MIN_MCS, bandwidth = 5, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band13_5MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 13, scheduling = SCHEDULING_MAX_MCS, bandwidth = 5, transmission_mode = TM4, ca_band2 = 0)

    def test_downlink_tm1_band13_10MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 13, scheduling = SCHEDULING_DYNAMIC, bandwidth = 10, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band13_10MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 13, scheduling = SCHEDULING_MIN_MCS, bandwidth = 10, transmission_mode = TM1, ca_band2 = 0)

    def test_uplink_tm1_band13_10MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 13, scheduling = SCHEDULING_MAX_MCS, bandwidth = 10, transmission_mode = TM1, ca_band2 = 0)

    def test_downlink_tm4_band13_10MHz_dynamic(self):

        self.do_test(direction = DIRECTION_DOWNLINK, band = 13, scheduling = SCHEDULING_DYNAMIC, bandwidth = 10, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band13_10MHz_min_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 13, scheduling = SCHEDULING_MIN_MCS, bandwidth = 10, transmission_mode = TM4, ca_band2 = 0)

    def test_uplink_tm4_band13_10MHz_max_mcs(self):

        self.do_test(direction = DIRECTION_UPLINK, band = 13, scheduling = SCHEDULING_MAX_MCS, bandwidth = 10, transmission_mode = TM4, ca_band2 = 0)

    def test_downlink_ca_20MHz(self):
        self.do_test_ca(DIRECTION_DOWNLINK)

    def test_uplink_ca_20MHz(self):
        self.do_test_ca(DIRECTION_UPLINK)

    """ Tests End """