From 61fd08e5ef8c60c8f44af72fc5e88a656e842256 Mon Sep 17 00:00:00 2001 From: Chen Yudong Date: Tue, 25 May 2021 15:02:47 +0800 Subject: [PATCH 1/3] CI: fix connection failures in asio example tests --- examples/protocols/asio/chat_server/asio_chat_server_test.py | 1 + examples/protocols/asio/chat_server/main/chat_server.cpp | 2 ++ examples/protocols/asio/tcp_echo_server/asio_tcp_server_test.py | 1 + examples/protocols/asio/tcp_echo_server/main/echo_server.cpp | 2 ++ examples/protocols/asio/udp_echo_server/asio_udp_server_test.py | 1 + .../protocols/asio/udp_echo_server/main/udp_echo_server.cpp | 2 ++ 6 files changed, 9 insertions(+) diff --git a/examples/protocols/asio/chat_server/asio_chat_server_test.py b/examples/protocols/asio/chat_server/asio_chat_server_test.py index 5e6f3e72e5..867bbd8ecc 100644 --- a/examples/protocols/asio/chat_server/asio_chat_server_test.py +++ b/examples/protocols/asio/chat_server/asio_chat_server_test.py @@ -26,6 +26,7 @@ def test_examples_protocol_asio_chat_server(env, extra_data): # 2. get the server IP address data = dut1.expect(re.compile(r" IPv4 address: ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)"), timeout=30) # 3. create tcp client and connect to server + dut1.expect('ASIO engine is up and running', timeout=1) cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM) cli.settimeout(30) cli.connect((data[0], 2222)) diff --git a/examples/protocols/asio/chat_server/main/chat_server.cpp b/examples/protocols/asio/chat_server/main/chat_server.cpp index 56a447e05f..b32e7ff617 100644 --- a/examples/protocols/asio/chat_server/main/chat_server.cpp +++ b/examples/protocols/asio/chat_server/main/chat_server.cpp @@ -226,5 +226,7 @@ extern "C" void app_main() servers.emplace_back(io_context, endpoint); } + std::cout << "ASIO engine is up and running" << std::endl; + io_context.run(); } diff --git a/examples/protocols/asio/tcp_echo_server/asio_tcp_server_test.py b/examples/protocols/asio/tcp_echo_server/asio_tcp_server_test.py index 3c19228835..603d91032d 100644 --- a/examples/protocols/asio/tcp_echo_server/asio_tcp_server_test.py +++ b/examples/protocols/asio/tcp_echo_server/asio_tcp_server_test.py @@ -27,6 +27,7 @@ def test_examples_protocol_asio_tcp_server(env, extra_data): # 2. get the server IP address data = dut1.expect(re.compile(r" IPv4 address: ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)"), timeout=30) # 3. create tcp client and connect to server + dut1.expect('ASIO engine is up and running', timeout=1) cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM) cli.settimeout(30) cli.connect((data[0], 2222)) diff --git a/examples/protocols/asio/tcp_echo_server/main/echo_server.cpp b/examples/protocols/asio/tcp_echo_server/main/echo_server.cpp index 008ec6ed79..f2d797ad4a 100644 --- a/examples/protocols/asio/tcp_echo_server/main/echo_server.cpp +++ b/examples/protocols/asio/tcp_echo_server/main/echo_server.cpp @@ -103,5 +103,7 @@ extern "C" void app_main() server s(io_context, std::atoi(CONFIG_EXAMPLE_PORT)); + std::cout << "ASIO engine is up and running" << std::endl; + io_context.run(); } \ No newline at end of file diff --git a/examples/protocols/asio/udp_echo_server/asio_udp_server_test.py b/examples/protocols/asio/udp_echo_server/asio_udp_server_test.py index d06ef66c87..de91c11e3b 100644 --- a/examples/protocols/asio/udp_echo_server/asio_udp_server_test.py +++ b/examples/protocols/asio/udp_echo_server/asio_udp_server_test.py @@ -27,6 +27,7 @@ def test_examples_protocol_asio_udp_server(env, extra_data): # 2. get the server IP address data = dut1.expect(re.compile(r" IPv4 address: ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)"), timeout=30) # 3. create tcp client and connect to server + dut1.expect('ASIO engine is up and running', timeout=1) cli = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) cli.settimeout(30) cli.connect((data[0], 2222)) diff --git a/examples/protocols/asio/udp_echo_server/main/udp_echo_server.cpp b/examples/protocols/asio/udp_echo_server/main/udp_echo_server.cpp index 06ac3fec92..7c460f57dc 100644 --- a/examples/protocols/asio/udp_echo_server/main/udp_echo_server.cpp +++ b/examples/protocols/asio/udp_echo_server/main/udp_echo_server.cpp @@ -85,5 +85,7 @@ extern "C" void app_main() server s(io_context, std::atoi(CONFIG_EXAMPLE_PORT)); + std::cout << "ASIO engine is up and running" << std::endl; + io_context.run(); } From 7be1a8d689ba6f7671f9150e1062a38f0c28c078 Mon Sep 17 00:00:00 2001 From: He Yin Ling Date: Thu, 12 Nov 2020 20:32:21 +0800 Subject: [PATCH 2/3] test: fix iperf example errors: 1. fix TypeError when running with python3 2. fix throughput chart x/y axis label error 3. make test case compatibile with iperf bin on earlier release branches --- examples/wifi/iperf/iperf_test.py | 14 +++++++------- .../idf_iperf_test_util/TestReport.py | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/wifi/iperf/iperf_test.py b/examples/wifi/iperf/iperf_test.py index 42ed9a072e..815fc0a997 100644 --- a/examples/wifi/iperf/iperf_test.py +++ b/examples/wifi/iperf/iperf_test.py @@ -182,7 +182,7 @@ class TestResult(object): @staticmethod def _convert_to_draw_format(data, label): - keys = data.keys() + keys = list(data.keys()) keys.sort() return { "x-axis": keys, @@ -216,8 +216,8 @@ class TestResult(object): LineChart.draw_line_chart(os.path.join(path, file_name), "Throughput Vs {} ({} {})".format(type_name, self.proto, self.direction), - "Throughput (Mbps)", "{} (dbm)".format(type_name), + "Throughput (Mbps)", data_list) return file_name @@ -305,7 +305,7 @@ class IperfTestUtility(object): except subprocess.CalledProcessError: pass self.dut.write("restart") - self.dut.expect("esp32>") + self.dut.expect_any("iperf>", "esp32>") self.dut.write("scan {}".format(self.ap_ssid)) for _ in range(SCAN_RETRY_COUNT): try: @@ -431,7 +431,7 @@ class IperfTestUtility(object): :return: True or False """ self.dut.write("restart") - self.dut.expect("esp32>") + self.dut.expect_any("iperf>", "esp32>") for _ in range(WAIT_AP_POWER_ON_TIMEOUT // SCAN_TIMEOUT): try: self.dut.write("scan {}".format(self.ap_ssid)) @@ -473,7 +473,7 @@ def test_wifi_throughput_with_different_configs(env, extra_data): # 2. get DUT and download dut = env.get_dut("iperf", "examples/wifi/iperf", app_config_name=config_name) dut.start_app() - dut.expect("esp32>") + dut.expect_any("iperf>", "esp32>") # 3. run test for each required att value test_result[config_name] = { @@ -528,7 +528,7 @@ def test_wifi_throughput_vs_rssi(env, extra_data): # 1. get DUT and download dut = env.get_dut("iperf", "examples/wifi/iperf", app_config_name=BEST_PERFORMANCE_CONFIG) dut.start_app() - dut.expect("esp32>") + dut.expect_any("iperf>", "esp32>") # 2. run test for each required att value for ap_info in ap_list: @@ -574,7 +574,7 @@ def test_wifi_throughput_basic(env, extra_data): # 1. get DUT dut = env.get_dut("iperf", "examples/wifi/iperf", app_config_name=BEST_PERFORMANCE_CONFIG) dut.start_app() - dut.expect("esp32>") + dut.expect_any("iperf>", "esp32>") # 2. preparing test_result = { diff --git a/tools/ci/python_packages/idf_iperf_test_util/TestReport.py b/tools/ci/python_packages/idf_iperf_test_util/TestReport.py index 5d5d792cf8..3da74dcdd3 100644 --- a/tools/ci/python_packages/idf_iperf_test_util/TestReport.py +++ b/tools/ci/python_packages/idf_iperf_test_util/TestReport.py @@ -36,7 +36,7 @@ class ThroughputForConfigsReport(object): self.sdkconfigs[config_name] = self._parse_config_file(sdkconfig_files[config_name]) if not os.path.exists(output_path): os.makedirs(output_path) - self.sort_order = self.sdkconfigs.keys() + self.sort_order = list(self.sdkconfigs.keys()) self.sort_order.sort() @staticmethod @@ -162,7 +162,7 @@ class ThroughputVsRssiReport(object): self.output_path = output_path self.raw_data_path = os.path.join(output_path, "raw_data") self.results = throughput_results - self.throughput_types = self.results.keys() + self.throughput_types = list(self.results.keys()) self.throughput_types.sort() if not os.path.exists(self.raw_data_path): os.makedirs(self.raw_data_path) From bc65641ac494f6ce2afe8d1ff7b94b80a9309617 Mon Sep 17 00:00:00 2001 From: Chen Yudong Date: Tue, 8 Jun 2021 17:11:38 +0800 Subject: [PATCH 3/3] test: fix socket issue in iperf example test --- examples/wifi/iperf/components/iperf/iperf.c | 1 + examples/wifi/iperf/iperf_test.py | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/examples/wifi/iperf/components/iperf/iperf.c b/examples/wifi/iperf/components/iperf/iperf.c index 3b8402a9b0..03687fc955 100644 --- a/examples/wifi/iperf/components/iperf/iperf.c +++ b/examples/wifi/iperf/components/iperf/iperf.c @@ -149,6 +149,7 @@ static esp_err_t IRAM_ATTR iperf_run_tcp_server(void) return ESP_FAIL; } + printf("iperf tcp server create successfully\n"); buffer = s_iperf_ctrl.buffer; want_recv = s_iperf_ctrl.buffer_len; while (!s_iperf_ctrl.finish) { diff --git a/examples/wifi/iperf/iperf_test.py b/examples/wifi/iperf/iperf_test.py index 815fc0a997..25dab010d2 100644 --- a/examples/wifi/iperf/iperf_test.py +++ b/examples/wifi/iperf/iperf_test.py @@ -358,6 +358,12 @@ class IperfTestUtility(object): with open(PC_IPERF_TEMP_LOG_FILE, "w") as f: if proto == "tcp": self.dut.write("iperf -s -i 1 -t {}".format(TEST_TIME)) + # wait until DUT TCP server created + try: + self.dut.expect("iperf tcp server create successfully", timeout=1) + except DUT.ExpectTimeout: + # compatible with old iperf example binary + pass process = subprocess.Popen(["iperf", "-c", dut_ip, "-t", str(TEST_TIME), "-f", "m"], stdout=f, stderr=f)