|
16 | 16 | from avocado.core import exceptions |
17 | 17 | from avocado.utils import archive |
18 | 18 | from avocado.utils import cpu as cpu_utils |
19 | | -from avocado.utils import crypto |
| 19 | +from avocado.utils import crypto, path |
20 | 20 | from avocado.utils import process as a_process |
21 | 21 | from six.moves import xrange |
22 | 22 |
|
|
43 | 43 | from virttest._wrappers import lazy_import |
44 | 44 | from virttest.test_setup.aexpect import KillTailThreads |
45 | 45 | from virttest.test_setup.core import SetupManager |
46 | | -from virttest.test_setup.gcov import ResetQemuGCov |
| 46 | +from virttest.test_setup.gcov import ( |
| 47 | + ResetGCov, |
| 48 | + collect_gcovr_coverage, |
| 49 | + collect_lcov_coverage, |
| 50 | +) |
47 | 51 | from virttest.test_setup.kernel import KSMSetup, ReloadKVMModules |
48 | 52 | from virttest.test_setup.libvirt_setup import LibvirtdDebugLogConfig |
49 | 53 | from virttest.test_setup.memory import HugePagesSetup, TransparentHugePagesSetup |
@@ -1000,7 +1004,7 @@ def preprocess(test, params, env): |
1000 | 1004 | # and last running during pre/postprocess. That way vms will be actually |
1001 | 1005 | # off to ensure data is written to disk. |
1002 | 1006 | _setup_manager.register(ProcessVMOff) |
1003 | | - _setup_manager.register(ResetQemuGCov) |
| 1007 | + _setup_manager.register(ResetGCov) |
1004 | 1008 | _setup_manager.register(VerifyHostDMesg) |
1005 | 1009 | _setup_manager.register(SwitchSMTOff) |
1006 | 1010 | _setup_manager.register(CheckRunningAsRoot) |
@@ -1319,32 +1323,84 @@ def postprocess(test, params, env): |
1319 | 1323 |
|
1320 | 1324 | # Collect code coverage report for qemu if enabled |
1321 | 1325 | if params.get("gcov_qemu", "no") == "yes": |
1322 | | - qemu_builddir = os.path.join(test.bindir, "build", "qemu") |
1323 | | - if os.path.isdir(qemu_builddir) and utils_package.package_install("gcovr"): |
1324 | | - gcov_qemu_dir = utils_misc.get_path(test.debugdir, "gcov_qemu") |
1325 | | - os.makedirs(gcov_qemu_dir) |
1326 | | - os.chdir(qemu_builddir) |
1327 | | - collect_cmd_opts = params.get("gcov_qemu_collect_cmd_opts", "--html") |
1328 | | - online_count = ( |
1329 | | - cpu_utils.online_count() |
1330 | | - if hasattr(cpu_utils, "online_count") |
1331 | | - else cpu_utils.online_cpus_count() |
1332 | | - ) |
1333 | | - collect_cmd = "gcovr -j %s -o %s -s %s ." % ( |
1334 | | - online_count, |
1335 | | - os.path.join(gcov_qemu_dir, "gcov.html"), |
1336 | | - collect_cmd_opts, |
1337 | | - ) |
1338 | | - a_process.system(collect_cmd, shell=True) |
1339 | | - if params.get("gcov_qemu_compress", "no") == "yes": |
1340 | | - os.chdir(test.debugdir) |
1341 | | - archive.compress("gcov_qemu.tar.gz", gcov_qemu_dir) |
1342 | | - shutil.rmtree(gcov_qemu_dir, ignore_errors=True) |
| 1326 | + qemu_builddir = params.get( |
| 1327 | + "gcov_qemu_builddir", os.path.join(test.bindir, "build", "qemu") |
| 1328 | + ) |
| 1329 | + gcov_format = params.get("gcov_qemu_format", "html") |
| 1330 | + test_name = params.get("shortname", getattr(test, "name", "unknown_test")) |
| 1331 | + if hasattr(test_name, "uid"): |
| 1332 | + test_name = str(test_name.uid) |
| 1333 | + |
| 1334 | + if gcov_format == "lcov": |
| 1335 | + try: |
| 1336 | + path.find_command("lcov") |
| 1337 | + except path.CmdNotFoundError: |
| 1338 | + LOG.warning("lcov package not installed, cannot collect QEMU coverage") |
| 1339 | + else: |
| 1340 | + gcov_qemu_dir = utils_misc.get_path(test.debugdir, "gcov_qemu") |
| 1341 | + collect_lcov_coverage(qemu_builddir, gcov_qemu_dir, test_name, "qemu") |
| 1342 | + |
| 1343 | + if params.get("gcov_qemu_compress", "no") == "yes": |
| 1344 | + os.chdir(test.debugdir) |
| 1345 | + archive.compress("gcov_qemu.tar.gz", gcov_qemu_dir) |
| 1346 | + shutil.rmtree(gcov_qemu_dir, ignore_errors=True) |
1343 | 1347 | else: |
1344 | | - LOG.warning( |
1345 | | - "Check either qemu build directory availablilty" |
1346 | | - " or install gcovr package for qemu coverage report" |
1347 | | - ) |
| 1348 | + if utils_package.package_install("gcovr"): |
| 1349 | + gcov_qemu_dir = utils_misc.get_path(test.debugdir, "gcov_qemu") |
| 1350 | + collect_cmd_opts = params.get("gcov_qemu_collect_cmd_opts", "--html") |
| 1351 | + collect_gcovr_coverage( |
| 1352 | + qemu_builddir, gcov_qemu_dir, "qemu", collect_cmd_opts |
| 1353 | + ) |
| 1354 | + |
| 1355 | + if params.get("gcov_qemu_compress", "no") == "yes": |
| 1356 | + os.chdir(test.debugdir) |
| 1357 | + archive.compress("gcov_qemu.tar.gz", gcov_qemu_dir) |
| 1358 | + shutil.rmtree(gcov_qemu_dir, ignore_errors=True) |
| 1359 | + else: |
| 1360 | + LOG.warning("gcovr package not installed, cannot collect QEMU coverage") |
| 1361 | + |
| 1362 | + # Collect code coverage report for libvirt if enabled |
| 1363 | + if params.get("gcov_libvirt", "no") == "yes": |
| 1364 | + libvirt_builddir = params.get("gcov_libvirt_builddir", "/var/tmp/libvirt") |
| 1365 | + gcov_format = params.get("gcov_libvirt_format", "html") |
| 1366 | + test_name = params.get("shortname", getattr(test, "name", "unknown_test")) |
| 1367 | + if hasattr(test_name, "uid"): |
| 1368 | + test_name = str(test_name.uid) |
| 1369 | + |
| 1370 | + if gcov_format == "lcov": |
| 1371 | + try: |
| 1372 | + path.find_command("lcov") |
| 1373 | + except path.CmdNotFoundError: |
| 1374 | + LOG.warning( |
| 1375 | + "lcov package not installed, cannot collect libvirt coverage" |
| 1376 | + ) |
| 1377 | + else: |
| 1378 | + gcov_libvirt_dir = utils_misc.get_path(test.debugdir, "gcov_libvirt") |
| 1379 | + collect_lcov_coverage( |
| 1380 | + libvirt_builddir, gcov_libvirt_dir, test_name, "libvirt" |
| 1381 | + ) |
| 1382 | + |
| 1383 | + if params.get("gcov_libvirt_compress", "no") == "yes": |
| 1384 | + os.chdir(test.debugdir) |
| 1385 | + archive.compress("gcov_libvirt.tar.gz", gcov_libvirt_dir) |
| 1386 | + shutil.rmtree(gcov_libvirt_dir, ignore_errors=True) |
| 1387 | + else: |
| 1388 | + if utils_package.package_install("gcovr"): |
| 1389 | + gcov_libvirt_dir = utils_misc.get_path(test.debugdir, "gcov_libvirt") |
| 1390 | + collect_cmd_opts = params.get("gcov_libvirt_collect_cmd_opts", "--html") |
| 1391 | + collect_gcovr_coverage( |
| 1392 | + libvirt_builddir, gcov_libvirt_dir, "libvirt", collect_cmd_opts |
| 1393 | + ) |
| 1394 | + |
| 1395 | + if params.get("gcov_libvirt_compress", "no") == "yes": |
| 1396 | + os.chdir(test.debugdir) |
| 1397 | + archive.compress("gcov_libvirt.tar.gz", gcov_libvirt_dir) |
| 1398 | + shutil.rmtree(gcov_libvirt_dir, ignore_errors=True) |
| 1399 | + else: |
| 1400 | + LOG.warning( |
| 1401 | + "gcovr package not installed, cannot collect libvirt coverage" |
| 1402 | + ) |
| 1403 | + |
1348 | 1404 | # Postprocess all VMs and images |
1349 | 1405 | try: |
1350 | 1406 | process( |
|
0 commit comments