| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- """
- Test case for iperf example.
- This test case might have problem running on windows:
- 1. direct use of `make`
- 2. use `sudo killall iperf` to force kill iperf, didn't implement windows version
- """
- from __future__ import division, unicode_literals
- import os
- import re
- import subprocess
- import time
- import ttfw_idf
- from idf_iperf_test_util import IperfUtility
- from tiny_test_fw import TinyFW
- try:
- from typing import Any, Tuple
- except ImportError:
- # Only used for type annotations
- pass
- class IperfTestUtilityEth(IperfUtility.IperfTestUtility):
- """ iperf test implementation """
- def __init__(self, dut, config_name, pc_nic_ip, pc_iperf_log_file, test_result=None): # type: (str, str, str,str, Any) -> None
- IperfUtility.IperfTestUtility.__init__(self, dut, config_name, 'None', 'None', pc_nic_ip, pc_iperf_log_file, test_result)
- def setup(self): # type: () -> Tuple[str,int]
- """
- setup iperf test:
- 1. kill current iperf process
- 2. reboot DUT (currently iperf is not very robust, need to reboot DUT)
- """
- try:
- subprocess.check_output('sudo killall iperf 2>&1 > /dev/null', shell=True)
- except subprocess.CalledProcessError:
- pass
- self.dut.write('restart')
- self.dut.expect_any('iperf>', 'esp32>')
- self.dut.write('ethernet start')
- time.sleep(10)
- self.dut.write('ethernet info')
- dut_ip = self.dut.expect(re.compile(r'ETHIP: ([\d.]+)'))[0]
- rssi = 0
- return dut_ip, rssi
- @ttfw_idf.idf_example_test(env_tag='Example_Ethernet')
- def test_ethernet_throughput_basic(env, _): # type: (Any, Any) -> None
- """
- steps: |
- 1. test TCP tx rx and UDP tx rx throughput
- 2. compare with the pre-defined pass standard
- """
- pc_nic_ip = env.get_pc_nic_info('pc_nic', 'ipv4')['addr']
- pc_iperf_log_file = os.path.join(env.log_path, 'pc_iperf_log.md')
- # 1. get DUT
- dut = env.get_dut('iperf', 'examples/ethernet/iperf', dut_class=ttfw_idf.ESP32DUT)
- dut.start_app()
- dut.expect_any('iperf>', 'esp32>')
- # 2. preparing
- test_result = {
- 'tcp_tx': IperfUtility.TestResult('tcp', 'tx', 'ethernet'),
- 'tcp_rx': IperfUtility.TestResult('tcp', 'rx', 'ethernet'),
- 'udp_tx': IperfUtility.TestResult('udp', 'tx', 'ethernet'),
- 'udp_rx': IperfUtility.TestResult('udp', 'rx', 'ethernet'),
- }
- test_utility = IperfTestUtilityEth(dut, 'ethernet', pc_nic_ip, pc_iperf_log_file, test_result)
- # 3. run test for TCP Tx, Rx and UDP Tx, Rx
- test_utility.run_all_cases(0)
- # 4. log performance and compare with pass standard
- performance_items = []
- for throughput_type in test_result:
- ttfw_idf.log_performance('{}_throughput'.format(throughput_type),
- '{:.02f} Mbps'.format(test_result[throughput_type].get_best_throughput()))
- performance_items.append(['{}_throughput'.format(throughput_type),
- '{:.02f} Mbps'.format(test_result[throughput_type].get_best_throughput())])
- # 5. save to report
- TinyFW.JunitReport.update_performance(performance_items)
- # do check after logging, otherwise test will exit immediately if check fail, some performance can't be logged.
- for throughput_type in test_result:
- ttfw_idf.check_performance('{}_throughput'.format(throughput_type + '_eth'),
- test_result[throughput_type].get_best_throughput(), dut.TARGET)
- env.close_dut('iperf')
- if __name__ == '__main__':
- test_ethernet_throughput_basic(env_config_file='EnvConfig.yml')
|