esp-idf/examples/system/gcov/example_test.py
2021-07-22 15:23:27 +02:00

61 lines
2.3 KiB
Python

from __future__ import unicode_literals
from pexpect import TIMEOUT
import os
import time
from ttfw_idf import Utility
import ttfw_idf
@ttfw_idf.idf_example_test(env_tag="test_jtag_arm")
def test_examples_gcov(env, extra_data):
rel_project_path = os.path.join('examples', 'system', 'gcov')
dut = env.get_dut('gcov', rel_project_path)
idf_path = dut.app.get_sdk_path()
proj_path = os.path.join(idf_path, rel_project_path)
with ttfw_idf.OCDProcess(os.path.join(proj_path, 'openocd.log')):
with ttfw_idf.TelnetProcess(os.path.join(proj_path, 'telnet.log')) as telnet_p:
dut.start_app()
def expect_counter_output(loop, timeout=10):
dut.expect_all('blink_dummy_func: Counter = {}'.format(loop),
'some_dummy_func: Counter = {}'.format(loop * 2),
timeout=timeout)
expect_counter_output(0, timeout=20)
dut.expect('Ready to dump GCOV data...', timeout=5)
def dump_coverage(cmd):
try:
telnet_p.pexpect_proc.sendline(cmd)
telnet_p.pexpect_proc.expect_exact('Targets connected.')
telnet_p.pexpect_proc.expect_exact('gcov_example_main.c.gcda')
telnet_p.pexpect_proc.expect_exact('gcov_example_func.c.gcda')
telnet_p.pexpect_proc.expect_exact('some_funcs.c.gcda')
telnet_p.pexpect_proc.expect_exact('Targets disconnected.')
except TIMEOUT:
# Print what is happening with DUT. Limit the size if it is in loop and generating output.
Utility.console_log(dut.read(size=1000))
raise
dump_coverage('esp gcov dump')
dut.expect('GCOV data have been dumped.', timeout=5)
expect_counter_output(1)
dut.expect('Ready to dump GCOV data...', timeout=5)
dump_coverage('esp gcov dump')
dut.expect('GCOV data have been dumped.', timeout=5)
for i in range(2, 6):
expect_counter_output(i)
for _ in range(3):
time.sleep(1)
# Test instant run-time dump
dump_coverage('esp gcov')
if __name__ == '__main__':
test_examples_gcov()