From 61c4c57af607bf532b918d4ba6f3144a5c787e34 Mon Sep 17 00:00:00 2001 From: caojiale1 Date: Sat, 18 Feb 2023 16:12:53 +0800 Subject: [PATCH 01/14] Signed-off-by:caojiale1 --- localCoverage/__init__.py | 0 localCoverage/all_subsystem_config.json | 1238 +++++++++++++++++ localCoverage/codeCoverage/__init__.py | 0 .../codeCoverage/codeCoverage_gcov_lcov.py | 288 ++++ .../coverage_rc/lcovrc_cov_template | 175 +++ localCoverage/codeCoverage/llvm-gcov.sh | 20 + .../codeCoverage/mutilProcess_CodeCoverage.py | 405 ++++++ localCoverage/coverage_tools.py | 174 +++ localCoverage/interfaceCoverage/__init__.py | 0 .../interfaceCoverage/get_innerkits_json.py | 65 + .../interfaceCoverage_gcov_lcov.py | 461 ++++++ localCoverage/interfaceCoverage/makeReport.py | 243 ++++ .../interface_kits/coverage_summary_file.xml | 5 + .../ohos_interfaceCoverage.html | 1127 +++++++++++++++ .../results/coverage/interface_kits/test.png | Bin 0 -> 8752 bytes .../resident_service/config/ams/ams.cfg | 50 + .../resident_service/config/ams/ams.xml | 50 + .../config/ams/foundation.xml | 108 ++ .../resident_service/config/bms/bms.xml | 20 + .../resident_service/config/bms/bms_cfg | 50 + .../config/bms/foundation.xml | 142 ++ .../resident_service/config/call/call.cfg | 50 + .../resident_service/config/call/call.xml | 18 + .../config/call/foundation.xml | 150 ++ .../resident_service/config/fms/fms.cfg | 50 + .../resident_service/config/fms/fms.xml | 19 + .../config/fms/foundation.xml | 142 ++ .../config/notification/foundation.xml | 140 ++ .../config/notification/notification.xml | 30 + .../config/notification/notificatoin.cfg | 50 + .../config/power/foundation.xml | 125 ++ .../resident_service/config/power/power.cfg | 50 + .../resident_service/config/power/power.xml | 50 + .../config/state/foundation.xml | 143 ++ .../resident_service/config/state/state.cfg | 50 + .../resident_service/config/state/state.xml | 18 + .../config/wms/foundation.xml | 142 ++ .../resident_service/config/wms/wms.cfg | 50 + .../resident_service/config/wms/wms.xml | 31 + localCoverage/resident_service/init_gcov.py | 250 ++++ .../resident_service/public_method.py | 137 ++ .../resident_service/pull_service_gcda.py | 128 ++ .../resident_service/resources/gcov_flush.sh | 7 + .../resident_service/resources/sign.cpp | 34 + .../resident_service/system_part_service.json | 119 ++ localCoverage/restore_comment/__init__.py | 0 .../restore_comment/after_lcov_branch.py | 80 ++ .../build_befrore_lcov_branch.py | 164 +++ .../restore_comment/restore_source_code.py | 45 + 49 files changed, 6893 insertions(+) create mode 100644 localCoverage/__init__.py create mode 100644 localCoverage/all_subsystem_config.json create mode 100644 localCoverage/codeCoverage/__init__.py create mode 100644 localCoverage/codeCoverage/codeCoverage_gcov_lcov.py create mode 100644 localCoverage/codeCoverage/coverage_rc/lcovrc_cov_template create mode 100644 localCoverage/codeCoverage/llvm-gcov.sh create mode 100644 localCoverage/codeCoverage/mutilProcess_CodeCoverage.py create mode 100644 localCoverage/coverage_tools.py create mode 100644 localCoverage/interfaceCoverage/__init__.py create mode 100644 localCoverage/interfaceCoverage/get_innerkits_json.py create mode 100644 localCoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py create mode 100644 localCoverage/interfaceCoverage/makeReport.py create mode 100644 localCoverage/interfaceCoverage/results/coverage/interface_kits/coverage_summary_file.xml create mode 100644 localCoverage/interfaceCoverage/results/coverage/interface_kits/ohos_interfaceCoverage.html create mode 100644 localCoverage/interfaceCoverage/results/coverage/interface_kits/test.png create mode 100644 localCoverage/resident_service/config/ams/ams.cfg create mode 100644 localCoverage/resident_service/config/ams/ams.xml create mode 100644 localCoverage/resident_service/config/ams/foundation.xml create mode 100644 localCoverage/resident_service/config/bms/bms.xml create mode 100644 localCoverage/resident_service/config/bms/bms_cfg create mode 100644 localCoverage/resident_service/config/bms/foundation.xml create mode 100644 localCoverage/resident_service/config/call/call.cfg create mode 100644 localCoverage/resident_service/config/call/call.xml create mode 100644 localCoverage/resident_service/config/call/foundation.xml create mode 100644 localCoverage/resident_service/config/fms/fms.cfg create mode 100644 localCoverage/resident_service/config/fms/fms.xml create mode 100644 localCoverage/resident_service/config/fms/foundation.xml create mode 100644 localCoverage/resident_service/config/notification/foundation.xml create mode 100644 localCoverage/resident_service/config/notification/notification.xml create mode 100644 localCoverage/resident_service/config/notification/notificatoin.cfg create mode 100644 localCoverage/resident_service/config/power/foundation.xml create mode 100644 localCoverage/resident_service/config/power/power.cfg create mode 100644 localCoverage/resident_service/config/power/power.xml create mode 100644 localCoverage/resident_service/config/state/foundation.xml create mode 100644 localCoverage/resident_service/config/state/state.cfg create mode 100644 localCoverage/resident_service/config/state/state.xml create mode 100644 localCoverage/resident_service/config/wms/foundation.xml create mode 100644 localCoverage/resident_service/config/wms/wms.cfg create mode 100644 localCoverage/resident_service/config/wms/wms.xml create mode 100644 localCoverage/resident_service/init_gcov.py create mode 100644 localCoverage/resident_service/public_method.py create mode 100644 localCoverage/resident_service/pull_service_gcda.py create mode 100644 localCoverage/resident_service/resources/gcov_flush.sh create mode 100644 localCoverage/resident_service/resources/sign.cpp create mode 100644 localCoverage/resident_service/system_part_service.json create mode 100644 localCoverage/restore_comment/__init__.py create mode 100644 localCoverage/restore_comment/after_lcov_branch.py create mode 100644 localCoverage/restore_comment/build_befrore_lcov_branch.py create mode 100644 localCoverage/restore_comment/restore_source_code.py diff --git a/localCoverage/__init__.py b/localCoverage/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/localCoverage/all_subsystem_config.json b/localCoverage/all_subsystem_config.json new file mode 100644 index 0000000..b4a2285 --- /dev/null +++ b/localCoverage/all_subsystem_config.json @@ -0,0 +1,1238 @@ +{ + "bundle_framework": { + "name": "bundle_framework", + "path": [ + "foundation/bundlemanager/bundle_framework" + ] + }, + "bundle_framework_lite": { + "name": "bundle_framework_lite", + "path": [ + "foundation/bundlemanager/bundle_framework_lite" + ] + }, + "packing_tool": { + "name": "packing_tool", + "path": [ + "developtools/packing_tool" + ] + }, + "appverify": { + "name": "appverify", + "path": [ + "base/security/appverify" + ] + }, + "zlib": { + "name": "zlib", + "path": [ + "third_party/zlib" + ] + }, + "ability_lite": { + "name": "ability_lite", + "path": [ + "foundation/ability/ability_lite" + ] + }, + "ability_base": { + "name": "ability_base", + "path": [ + "foundation/ability/ability_base" + ] + }, + "ability_runtime": { + "name": "ability_runtime", + "path": [ + "foundation/ability/ability_runtime" + ] + }, + "ability_tool": { + "name": "ability_tool", + "path": [ + "foundation/ability/ability_runtime/tools" + ] + }, + "idl_tool": { + "name": "idl_tool", + "path": [ + "foundation/ability/idl_tool" + ] + }, + "form_fwk": { + "name": "form_fwk", + "path": [ + "foundation/ability/form_fwk" + ] + }, + "wms": { + "name": "wms", + "path": [ + "foundation/graphic/wms" + ] + }, + "ui": { + "name": "ui", + "path": [ + "foundation/graphic/ui" + ] + }, + "graphic_utils": { + "name": "graphic_utils", + "path": [ + "foundation/graphic/utils" + ] + }, + "graphic_2d": { + "name": "graphic_2d", + "path": [ + "foundation/graphic/graphic_2d" + ] + }, + "multimedia_image_framework": { + "name": "multimedia_image_framework", + "path": [ + "foundation/multimedia/image_framework" + ] + }, + "background_task_mgr": { + "name": "background_task_mgr", + "path": [ + "foundation/resourceschedule/background_task_mgr" + ] + }, + "work_scheduler": { + "name": "work_scheduler", + "path": [ + "foundation/resourceschedule/work_scheduler" + ] + }, + "device_usage_statistics": { + "name": "device_usage_statistics", + "path": [ + "foundation/resourceschedule/device_usage_statistics" + ] + }, + "resource_schedule_service": { + "name": "resource_schedule_service", + "path": [ + "foundation/resourceschedule/resource_schedule_service" + ] + }, + "schedule_ext": { + "name": "schedule_ext", + "path": [ + "foundation/resourceschedule/resource_schedule_service/schedule_ext" + ] + }, + "efficiency_manager": { + "name": "efficiency_manager", + "path": [ + "foundation/resourceschedule/efficiency_manager" + ] + }, + "efficiency_manager_ext": { + "name": "efficiency_manager_ext", + "path": [ + "foundation/resourceschedule/efficiency_manager_ext" + ] + }, + "preferences": { + "name": "preferences", + "path": [ + "foundation/distributeddatamgr/preferences" + ] + }, + "relational_store": { + "name": "relational_store", + "path": [ + "foundation/distributeddatamgr/relational_store" + ] + }, + "data_share": { + "name": "data_share", + "path": [ + "foundation/distributeddatamgr/data_share" + ] + }, + "kv_store": { + "name": "kv_store", + "path": [ + "foundation/distributeddatamgr/kv_store" + ] + }, + "datamgr_service": { + "name": "datamgr_service", + "path": [ + "foundation/distributeddatamgr/distributeddatamgr" + ] + }, + "data_object": { + "name": "data_object", + "path": [ + "foundation/distributeddatamgr/data_object" + ] + }, + "pasteboard": { + "name": "pasteboard", + "path": [ + "foundation/distributeddatamgr/pasteboard" + ] + }, + "ipc": { + "name": "ipc", + "path": [ + "foundation/communication/ipc" + ] + }, + "dsoftbus_standard": { + "name": "dsoftbus_standard", + "path": [ + "foundation/communication/dsoftbus" + ] + }, + "device_manager": { + "name": "device_manager", + "path": [ + "foundation/distributedhardware/device_manager" + ] + }, + "distributed_hardware_fwk": { + "name": "distributed_hardware_fwk", + "path": [ + "foundation/distributedhardware/distributed_hardware_fwk" + ] + }, + "distributed_camera": { + "name": "distributed_camera", + "path": [ + "foundation/distributedhardware/distributed_camera" + ] + }, + "distributed_audio": { + "name": "distributed_audio", + "path": [ + "foundation/distributedhardware/distributed_audio" + ] + }, + "distributed_screen": { + "name": "distributed_screen", + "path": [ + "foundation/distributedhardware/distributed_screen" + ] + }, + "distributed_input": { + "name": "distributed_input", + "path": [ + "foundation/distributedhardware/distributed_input" + ] + }, + "input": { + "name": "input", + "path": [ + "foundation/multimodalinput/input" + ] + }, + "multimedia_audio_framework": { + "name": "multimedia_audio_framework", + "path": [ + "foundation/multimedia/audio_framework" + ] + }, + "audio_manager_lite": { + "name": "audio_manager_lite", + "path": [ + "foundation/multimedia/audio_lite" + ] + }, + "camera_lite": { + "name": "camera_lite", + "path": [ + "foundation/multimedia/camera_lite" + ] + }, + "camera_framework": { + "name": "camera_framework", + "path": [ + "foundation/multimedia/camera_standard" + ] + }, + "media_lite": { + "name": "media_lite", + "path": [ + "foundation/multimedia/media_lite" + ] + }, + "multimedia_av_session": { + "name": "multimedia_av_session", + "path": [ + "foundation/multimedia/av_session" + ] + }, + "utils": { + "name": "utils", + "path": [ + "foundation/multimedia/utils" + ] + }, + "omx_adapter": { + "name": "omx_adapter", + "path": [ + "foundation/multimedia/omx_adapter" + ] + }, + "multimedia_histreamer": { + "name": "multimedia_histreamer", + "path": [ + "foundation/multimedia/histreamer" + ] + }, + "multimedia_player_framework": { + "name": "multimedia_player_framework", + "path": [ + "foundation/multimedia/player_framework" + ] + }, + "neural_network_runtime": { + "name": "neural_network_runtime", + "path": [ + "foundation/ai/neural_network_runtime" + ] + }, + "ai_engine": { + "name": "ai_engine", + "path": [ + "foundation/ai/ai_engine" + ] + }, + "decision": { + "name": "decision", + "path": [ + "foundation/ai/decision" + ] + }, + "mindspore": { + "name": "mindspore", + "path": [ + "third_party/mindspore" + ] + }, + "core_service": { + "name": "core_service", + "path": [ + "base/telephony/core_service" + ] + }, + "call_manager": { + "name": "call_manager", + "path": [ + "base/telephony/call_manager" + ] + }, + "data_storage": { + "name": "data_storage", + "path": [ + "base/telephony/data_storage" + ] + }, + "sms_mms": { + "name": "sms_mms", + "path": [ + "base/telephony/sms_mms" + ] + }, + "cellular_call": { + "name": "cellular_call", + "path": [ + "base/telephony/cellular_call" + ] + }, + "cellular_data": { + "name": "cellular_data", + "path": [ + "base/telephony/cellular_data" + ] + }, + "state_registry": { + "name": "state_registry", + "path": [ + "base/telephony/state_registry" + ] + }, + "ril_adapter": { + "name": "ril_adapter", + "path": [ + "base/telephony/ril_adapter" + ] + }, + "ims_service": { + "name": "ims_service", + "path": [ + "vendor/huawei/base/telephony/ims_service" + ] + }, + "ril_adapter_ext": { + "name": "ril_adapter_ext", + "path": [ + "vendor/huawei/base/telephony/ril_adapter_ext" + ] + }, + "certificate_manager": { + "name": "certificate_manager", + "path": [ + "base/security/certificate_manager" + ] + }, + "crypto_framework": { + "name": "crypto_framework", + "path": [ + "base/security/crypto_framework" + ] + }, + "dataclassification": { + "name": "dataclassification", + "path": [ + "base/security/dataclassification" + ] + }, + "device_auth": { + "name": "device_auth", + "path": [ + "base/security/device_auth" + ] + }, + "device_security_level": { + "name": "device_security_level", + "path": [ + "base/security/device_security_level" + ] + }, + "device_threat_detection": { + "name": "device_threat_detection", + "path": [ + "base/security/device_threat_detection" + ] + }, + "hapsigner": { + "name": "hapsigner", + "path": [ + "developtools/hapsigner" + ] + }, + "huks": { + "name": "huks", + "path": [ + "base/security/huks" + ] + }, + "appspawn": { + "name": "appspawn", + "path": [ + "base/startup/appspawn" + ] + }, + "bootstrap_lite": { + "name": "bootstrap_lite", + "path": [ + "base/startup/bootstrap_lite" + ] + }, + "init": { + "name": "init", + "path": [ + "base/startup/init" + ] + }, + "notification": { + "name": "notification", + "path": [ + "base/notification/common_event_service", + "base/notification/distributed_notification_service", + "base/notification/eventhandler" + ] + }, + "hilog": { + "name": "hilog", + "path": [ + "base/hiviewdfx/hilog" + ] + }, + "hilog_lite": { + "name": "hilog_lite", + "path": [ + "base/hiviewdfx/hilog_lite" + ] + }, + "hitrace": { + "name": "hitrace", + "path": [ + "base/hiviewdfx/hitrace" + ] + }, + "hiview": { + "name": "hiview", + "path": [ + "base/hiviewdfx/hiview/adapter", + "base/hiviewdfx/hiview/build", + "base/hiviewdfx/hiview/base", + "base/hiviewdfx/hiview/core", + "base/hiviewdfx/hiview/figures", + "base/hiviewdfx/hiview/include", + "base/hiviewdfx/hiview/service", + "base/hiviewdfx/hiview/utility", + "base/hiviewdfx/hiview/test", + "base/hiviewdfx/hiview/plugins/eventlogger", + "base/hiviewdfx/hiview/plugins/eventservice", + "base/hiviewdfx/hiview/plugins/faultlogger", + "base/hiviewdfx/hiview/plugins/freeze_detector", + "base/hiviewdfx/hiview/plugins/hicollie_collector", + "base/hiviewdfx/hiview/plugins/usage_event_report", + "base/hiviewdfx/hiview/plugins/huawei_proprietary/leak_detectors", + "base/hiviewdfx/hiview/plugins/huawei_proprietary/test" + ] + }, + "hiview_lite": { + "name": "hiview_lite", + "path": [ + "base/hiviewdfx/hiview_lite" + ] + }, + "hichecker": { + "name": "hichecker", + "path": [ + "base/hiviewdfx/hichecker" + ] + }, + "hicollie": { + "name": "hicollie", + "path": [ + "base/hiviewdfx/hicollie" + ] + }, + "hiappevent": { + "name": "hiappevent", + "path": [ + "base/hiviewdfx/hiappevent" + ] + }, + "hisysevent": { + "name": "hisysevent", + "path": [ + "base/hiviewdfx/hisysevent" + ] + }, + "hievent_lite": { + "name": "hievent_lite", + "path": [ + "base/hiviewdfx/hievent_lite" + ] + }, + "faultloggerd": { + "name": "faultloggerd", + "path": [ + "base/hiviewdfx/faultloggerd" + ] + }, + "profiler": { + "name": "profiler", + "path": [ + "developtools/profiler" + ] + }, + "hiperf": { + "name": "hiperf", + "path": [ + "developtools/hiperf" + ] + }, + "bytrace": { + "name": "bytrace", + "path": [ + "developtools/bytrace" + ] + }, + "hidumper_lite": { + "name": "hidumper_lite", + "path": [ + "base/hiviewdfx/hidumper_lite" + ] + }, + "blackbox": { + "name": "blackbox", + "path": [ + "base/hiviewdfx/blackbox" + ] + }, + "hidumper": { + "name": "hidumper", + "path": [ + "base/hiviewdfx/hidumper" + ] + }, + "bluetooth": { + "name": "bluetooth", + "path": [ + "foundation/communication/bluetooth" + ] + }, + "nfc": { + "name": "nfc", + "path": [ + "foundation/communication/nfc/nfc_core" + ] + }, + "connected_tag": { + "name": "connected_tag", + "path": [ + "foundation/communication/nfc/connected_tag" + ] + }, + "wifi": { + "name": "wifi", + "path": [ + "foundation/communication/wifi/wifi" + ] + }, + "dhcp": { + "name": "dhcp", + "path": [ + "foundation/communication/wifi/dhcp" + ] + }, + "wifi_aware": { + "name": "wifi_aware", + "path": [ + "foundation/communication/wifi_aware" + ] + }, + "wifi_lite": { + "name": "wifi_lite", + "path": [ + "foundation/communication/wifi_lite" + ] + }, + "algorithm": { + "name": "algorithm", + "path": [ + "base/msdp/algorithm" + ] + }, + "geofence": { + "name": "geofence", + "path": [ + "base/msdp/geofence" + ] + }, + "motion": { + "name": "motion", + "path": [ + "base/msdp/motion" + ] + }, + "movement": { + "name": "movement", + "path": [ + "base/msdp/movement" + ] + }, + "spatial_awareness": { + "name": "spatial_awareness", + "path": [ + "base/msdp/spatial_awareness" + ] + }, + "timeline": { + "name": "timeline", + "path": [ + "base/msdp/timeline" + ] + }, + "device_status": { + "name": "device_status", + "path": [ + "base/msdp/device_status" + ] + }, + "os_account": { + "name": "os_account", + "path": [ + "base/account/os_account" + ] + }, + "i18n": { + "name": "i18n", + "path": [ + "base/global/i18n" + ] + }, + "i18n_lite": { + "name": "i18n_lite", + "path": [ + "base/global/i18n_lite" + ] + }, + "system_resources": { + "name": "system_resources", + "path": [ + "utils/system_resources" + ] + }, + "jsoncpp": { + "name": "jsoncpp", + "path": [ + "third_party/jsoncpp" + ] + }, + "libxml2": { + "name": "libxml2", + "path": [ + "third_party/libxml2" + ] + }, + "global_resource_tool": { + "name": "global_resource_tool", + "path": [ + "developtools/global_resource_tool" + ] + }, + "resource_management": { + "name": "resource_management", + "path": [ + "base/global/resource_management" + ] + }, + "resource_management_lite": { + "name": "resource_management_lite", + "path": [ + "base/global/resource_management_lite" + ] + }, + "time_zone": { + "name": "time_zone", + "path": [ + "base/global/time_zone" + ] + }, + "accessibility": { + "name": "accessibility", + "path": [ + "foundation/barrierfree/accessibility" + ] + }, + "time_service": { + "name": "time_service", + "path": [ + "base/time/time_service" + ] + }, + "imf": { + "name": "imf", + "path": [ + "base/inputmethod/imf" + ] + }, + "theme": { + "name": "theme", + "path": [ + "base/theme" + ] + }, + "request": { + "name": "request", + "path": [ + "base/request" + ] + }, + "battery_manager": { + "name": "battery_manager", + "path": [ + "base/powermgr/battery_manager" + ] + }, + "display_manager": { + "name": "display_manager", + "path": [ + "base/powermgr/display_manager" + ] + }, + "powermgr_lite": { + "name": "powermgr_lite", + "path": [ + "base/powermgr/powermgr_lite" + ] + }, + "battery_lite": { + "name": "battery_lite", + "path": [ + "base/powermgr/battery_lite" + ] + }, + "battery_statistics": { + "name": "battery_statistics", + "path": [ + "base/powermgr/battery_statistics" + ] + }, + "power_manager": { + "name": "power_manager", + "path": [ + "base/powermgr/power_manager" + ] + }, + "thermal_manager": { + "name": "thermal_manager", + "path": [ + "base/powermgr/thermal_manager" + ] + }, + "sensor": { + "name": "sensor", + "path": [ + "base/sensors/sensor" + ] + }, + "miscdevice": { + "name": "miscdevice", + "path": [ + "base/sensors/miscdevice" + ] + }, + "sensor_lite": { + "name": "sensor_lite", + "path": [ + "base/sensors/sensor_lite" + ] + }, + "miscdevice_lite": { + "name": "miscdevice_lite", + "path": [ + "base/sensors/miscdevice_lite" + ] + }, + "start": { + "name": "start", + "path": [ + "base/sensors/start" + ] + }, + "user_auth_framework": { + "name": "user_auth_framework", + "path": [ + "base/useriam/user_auth_framework" + ] + }, + "pin_auth": { + "name": "pin_auth", + "path": [ + "base/useriam/pin_auth" + ] + }, + "face_auth": { + "name": "face_auth", + "path": [ + "base/useriam/face_auth" + ] + }, + "fingerprint_auth": { + "name": "fingerprint_auth", + "path": [ + "base/useriam/fingerprint_auth" + ] + }, + "peripheral": { + "name": "peripheral", + "path": [ + "drivers/peripheral/pin_auth", + "drivers/peripheral/face_auth", + "drivers/peripheral/user_auth", + "drivers/peripheral/fingerprint_auth" + ] + }, + "location": { + "name": "location", + "path": [ + "base/location" + ] + }, + "usb_manager": { + "name": "usb_manager", + "path": [ + "base/usb/usb_manager" + ] + }, + "build": { + "name": "build", + "path": [ + "build" + ] + }, + "gn": { + "name": "gn", + "path": [ + "third_party/gn" + ] + }, + "ninja": { + "name": "ninja", + "path": [ + "third_party/ninja" + ] + }, + "hidl_adapter": { + "name": "hidl_adapter", + "path": [ + "drivers/peripheral/adapter/activity_recognition", + "drivers/peripheral/adapter/audio", + "drivers/peripheral/adapter/camera", + "drivers/peripheral/adapter/gralloc", + "drivers/peripheral/adapter/hwc", + "drivers/peripheral/adapter/input", + "drivers/peripheral/adapter/motion", + "drivers/peripheral/adapter/sensor", + "drivers/peripheral/adapter/thermal" + ] + }, + "hdf_core": { + "name": "hdf_core", + "path": [ + "drivers/hdf_core/adapter/uhdf2", + "drivers/hdf_core/framework/core/common", + "drivers/hdf_core/framework/core/host", + "drivers/hdf_core/framework/core/manager", + "drivers/hdf_core/framework/core/shared", + "drivers/hdf_core/framework/support/posix/" + ] + }, + "filemanagement_app_file_service": { + "name": "filemanagement_app_file_service", + "path": [ + "foundation/filemanagement/app_file_service" + ] + }, + "filemanagement_backup": { + "name": "filemanagement_backup", + "path": [ + "foundation/filemanagement/backup" + ] + }, + "filemanagement_dfs_service": { + "name": "filemanagement_dfs_service", + "path": [ + "foundation/filemanagement/dfs_service" + ] + }, + "filemanagement_file_api": { + "name": "filemanagement_file_api", + "path": [ + "foundation/filemanagement/file_api" + ] + }, + "filemanagement_storage_service": { + "name": "filemanagement_storage_service", + "path": [ + "foundation/filemanagement/storage_service" + ] + }, + "filemanagement_user_file_service": { + "name": "filemanagement_user_file_service", + "path": [ + "foundation/filemanagement/user_file_service" + ] + }, + "media_library": { + "name": "media_library", + "path": [ + "foundation/multimedia/media_library" + ] + }, + "netmanager_base": { + "name": "netmanager_base", + "path": [ + "foundation/communication/netmanager_base" + ] + }, + "netmanager_ext": { + "name": "netmanager_ext", + "path": [ + "foundation/communication/netmanager_ext" + ] + }, + "netstack": { + "name": "netstack", + "path": [ + "foundation/communication/netstack" + ] + }, + "webview": { + "name": "webview", + "path": [ + "base/web/webview/ohos_adapter", + "base/web/webview/ohos_nweb" + ] + }, + "tee_client": { + "name": "tee_client", + "path": [ + "base/tee/tee_client" + ] + }, + "tee_os_framework": { + "name": "tee_os_framework", + "path": [ + "base/tee/tee_os_framework" + ] + }, + "tee_dev_kit": { + "name": "tee_dev_kit", + "path": [ + "base/tee/tee_dev_kit" + ] + }, + "tee_tzdriver": { + "name": "tee_tzdriver", + "path": [ + "base/tee/tee_tzdriver" + ] + }, + "tee_os_kernel": { + "name": "tee_os_kernel", + "path": [ + "base/tee/tee_os_kernel" + ] + }, + "device_info_manager": { + "name": "device_info_manager", + "path": [ + "foundation/deviceprofile" + ] + }, + "enterprise_device_management": { + "name": "enterprise_device_management", + "path": [ + "base/customization/enterprise_device_management" + ] + }, + "config_policy": { + "name": "config_policy", + "path": [ + "base/customization/config_policy" + ] + }, + "toolchain": { + "name": "toolchain", + "path": [ + "arkcompiler/toolchain" + ] + }, + "runtime_core": { + "name": "runtime_core", + "path": [ + "arkcompiler/runtime_core" + ] + }, + "ets_frontend": { + "name": "ets_frontend", + "path": [ + "arkcompiler/ets_frontend" + ] + }, + "ets_runtime": { + "name": "ets_runtime", + "path": [ + "arkcompiler/ets_runtime" + ] + }, + "jerryscript": { + "name": "jerryscript", + "path": [ + "third_party/jerryscript" + ] + }, + "safwk": { + "name": "safwk", + "path": [ + "foundation/systemabilitymgr/safwk" + ] + }, + "safwk_lite": { + "name": "safwk_lite", + "path": [ + "foundation/systemabilitymgr/safwk_lite" + ] + }, + "samgr_lite": { + "name": "samgr_lite", + "path": [ + "foundation/systemabilitymgr/samgr_lite" + ] + }, + "samgr": { + "name": "samgr", + "path": [ + "foundation/systemabilitymgr/samgr" + ] + }, + "dmsfwk": { + "name": "dmsfwk", + "path": [ + "foundation/ability/dmsfwk" + ] + }, + "dmsfwk_lite": { + "name": "dmsfwk_lite", + "path": [ + "foundation/ability/dmsfwk_lite" + ] + }, + "window": { + "name": "window", + "path": [ + "foundation/window/window_manager" + ] + }, + "utils_lite": { + "name": "utils_lite", + "path": [ + "commonlibrary/utils_lite" + ] + }, + "c_utils": { + "name": "c_utils", + "path": [ + "commonlibrary/c_utils" + ] + }, + "ets_utils": { + "name": "ets_utils", + "path": [ + "commonlibrary/ets_utils" + ] + }, + "selinux": { + "name": "selinux", + "path": [ + "base/security/selinux" + ] + }, + "access_token": { + "name": "access_token", + "path": [ + "base/security/access_token" + ] + }, + "permission_lite": { + "name": "permission_lite", + "path": [ + "base/security/permission_lite" + ] + }, + "dlp_permission_service": { + "name": "dlp_permission_service", + "path": [ + "base/security/dlp_permission_service" + ] + }, + "dlp_credential_service": { + "name": "dlp_credential_service", + "path": [ + "base/security/dlp_credential_service" + ] + }, + "memmgr": { + "name": "memmgr", + "path": [ + "foundation/resourceschedule/memmgr_plugin" + ] + }, + "utils_memory": { + "name": "utils_memory", + "path": [ + "utils/memory" + ] + }, + "frame_aware_sched": { + "name": "frame_aware_sched", + "path": [ + "foundation/resourceschedule/frame_aware_sched" + ] + }, + "sys_installer": { + "name": "sys_installer", + "path": [ + "base/update/sys_installer" + ] + }, + "updater": { + "name": "updater", + "path": [ + "base/update/updater" + ] + }, + "dupdate_engine": { + "name": "dupdate_engine", + "path": [ + "base/update/dupdate_engine" + ] + }, + "memory_utils": { + "name": "memory_utils", + "path": [ + "commonlibrary/memory_utils" + ] + }, + "resourceschedule_ffrt_core": { + "name": "resourceschedule_ffrt_core", + "path": [ + "foundation/resourceschedule/ffrt_core" + ] + }, + "resourceschedule_ffrt_sched_override": { + "name": "resourceschedule_ffrt_sched_override", + "path": [ + "vendor/huawei/foundation/resourceschedule/ffrt_sched_override" + ] + }, + "ace_engine": { + "name": "ace_engine", + "path": [ + "foundation/arkui/ace_engine/frameworks/base/geometry", + "foundation/arkui/ace_engine/frameworks/base/json", + "foundation/arkui/ace_engine/frameworks/base/utils", + "foundation/arkui/ace_engine/frameworks/bridge/card_frontend", + "foundation/arkui/ace_engine/frameworks/bridge/common/manifest", + "foundation/arkui/ace_engine/frameworks/bridge/common/media_query", + "foundation/arkui/ace_engine/frameworks/bridge/common/plugin_adapter", + "foundation/arkui/ace_engine/frameworks/bridge/common/utils", + "foundation/arkui/ace_engine/frameworks/bridge/plugin_frontend", + "foundation/arkui/ace_engine/interfaces" + ] + }, + "ace_engine_core": { + "name": "ace_engine_core", + "path": [ + "foundation/arkui/ace_engine/frameworks/core/accessibility", + "foundation/arkui/ace_engine/frameworks/core/common", + "foundation/arkui/ace_engine/frameworks/core/components_ng", + "foundation/arkui/ace_engine/frameworks/core/pipeline_ng" + ] + } +} + + + + + + + + + + + + + + + + + + + diff --git a/localCoverage/codeCoverage/__init__.py b/localCoverage/codeCoverage/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/localCoverage/codeCoverage/codeCoverage_gcov_lcov.py b/localCoverage/codeCoverage/codeCoverage_gcov_lcov.py new file mode 100644 index 0000000..e70b144 --- /dev/null +++ b/localCoverage/codeCoverage/codeCoverage_gcov_lcov.py @@ -0,0 +1,288 @@ +#!/usr/bin/env python3 +# coding=utf-8 + +# +# Copyright (c) 2023 Huawei Device Co., Ltd. +# 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. +# + + +import os +import json +import shutil +import shlex +import subprocess + + +# 代码根目录 +root_path = os.getcwd() +CODEPATH = root_path.split("/test/testfwk/developer_test")[0] +# 子系统json目录 +SYSTEM_JSON = "build/subsystem_config.json" +# 覆盖率gcda +COVERAGE_GCDA_RESULTS = "test/localCoverage/codeCoverage/results/coverage/data/cxx" +# 报告路径 +REPORT_PATH = "test/localCoverage/codeCoverage/results/coverage/reports/cxx" +# llvm-gcov.sh +LLVM_GCOV = "test/localCoverage/codeCoverage/llvm-gcov.sh" +# 编译生成的out路径 +OUTPUT = "out/baltimore" +# 屏蔽列表 +FILTEROUT_DIRS = ["unittest", "third_party", "test"] + + +def call(cmd_list, is_show_cmd=False, out=None, err=None): + return_flag = False + try: + if is_show_cmd: + print("execute command: {}".format(" ".join(cmd_list))) + if 0 == subprocess.call(cmd_list, shell=False, stdout=out, stderr=err): + return_flag = True + except Exception: + print("Error : command {} execute faild!".format(cmd_list)) + return_flag = False + return return_flag + + +def execute_command(command, printflag=False): + try: + cmd_list = shlex.split(command) + with open("coverage.log", 'a') as fd: + call(cmd_list, printflag, fd, fd) + except IOError as err: + print("Error: Exception occur in open: %s", err.message) + + +def get_subsystem_config_info(): + subsystem_info_dic = {} + subsystem_config_filepath = os.path.join(CODEPATH, SYSTEM_JSON) + if os.path.exists(subsystem_config_filepath): + data = None + with open(subsystem_config_filepath, 'r') as f: + data = json.load(f) + if not data: + print("subsystem config file error.") + for value in data.values(): + subsystem_name = value.get('name') + subsystem_dir = value.get('dir') + subsystem_path = value.get('path') + subsystem_project = value.get('project') + subsystem_rootpath = os.path.join(CODEPATH, subsystem_path) + subsystem_info_dic[subsystem_name] = [ + subsystem_project, subsystem_dir, + subsystem_path, subsystem_rootpath + ] + return subsystem_info_dic + + +def get_subsystem_name_list(): + subsystem_name_list = [] + subsystem_info_dic = get_subsystem_config_info() + for key in subsystem_info_dic.keys(): + subsystem_rootpath = subsystem_info_dic[key][3] + if os.path.exists(subsystem_rootpath): + subsystem_name_list.append(key) + return subsystem_name_list + + +def get_subsystem_rootpath(subsystem_name): + subsystem_path = "" + subsystem_rootpath = "" + subsystem_info_dic = get_subsystem_config_info() + for key in subsystem_info_dic.keys(): + if key == subsystem_name: + subsystem_path = subsystem_info_dic[key][2] + subsystem_rootpath = subsystem_info_dic[key][3] + break + return subsystem_path, subsystem_rootpath + + +def is_filterout_dir(ignore_prefix, check_path): + for dir in FILTEROUT_DIRS: + check_list = check_path[len(ignore_prefix):].split("/") + if dir in check_list: + return True + return False + + +def rm_unnecessary_dir(cov_path): + topdir = os.path.join(cov_path, "obj") + for root, dirs, files in os.walk(topdir): + if is_filterout_dir(topdir, root): + shutil.rmtree(root) + + +def get_files_from_dir(find_path, postfix=None): + names = os.listdir(find_path) + file_list = [] + for fn in names: + if not os.path.isfile(os.path.join(find_path, fn)): + continue + if postfix is not None: + if fn.endswith(postfix): + file_list.append(fn) + else: + file_list.append(fn) + return file_list + + +def get_gcno_files(cov_path, dir_name): + gcda_strip_path = dir_name[len(cov_path) + 1:] + gcda_list = get_files_from_dir(dir_name, ".gcda") + for file_name in gcda_list: + gcno_name = os.path.splitext(file_name)[0] + ".gcno" + gcno_path = os.path.join(os.path.join(CODEPATH, OUTPUT), + gcda_strip_path, gcno_name) + if os.path.exists(gcno_path): + if os.path.exists(gcno_path): + shutil.copy(gcno_path, dir_name) + else: + print("%s not exists!", gcno_path) + + +def get_module_gcno_files(cov_path, dir_name): + for root, dirs, files in os.walk(dir_name): + get_gcno_files(cov_path, root) + + +def gen_subsystem_trace_info(subsystem, data_dir, test_dir): + src_dir = os.path.join(CODEPATH, OUTPUT) + single_info_path = os.path.join(CODEPATH, REPORT_PATH, + "single_test", test_dir) + if not os.path.exists(single_info_path): + os.makedirs(single_info_path) + output_name = os.path.join(CODEPATH, single_info_path, + subsystem +"_output.info") + if not os.path.exists(src_dir): + print("Sours path %s not exist!", src_dir) + return + cmd = "lcov -c -b {} -d {} --gcov-tool {} -o {} --ignore-errors source,gcov" \ + .format(src_dir, data_dir, os.path.join( + CODEPATH, LLVM_GCOV), output_name) + print("single_test**" + cmd) + execute_command(cmd) + + +def cut_info(subsystem, test_dir): + trace_file = os.path.join( + CODEPATH, REPORT_PATH, "single_test", + test_dir, subsystem + "_output.info") + output_name = os.path.join( + CODEPATH, REPORT_PATH, "single_test", + test_dir, subsystem + "_strip.info") + remove = r"'*/unittest/*' '*/third_party/*' 'sdk/android-arm64/*'" + if not os.path.exists(trace_file): + print("Error: trace file %s not exisit!", trace_file) + return + cmd = "lcov --remove {} {} -o {}".format(trace_file, remove, output_name) + execute_command(cmd) + + +def gen_info(cov_path, test_dir, subsystem_list): + if len(subsystem_list) == 0: + return + for subsystem in subsystem_list: + (subsystem_path, subsystem_rootpath) = get_subsystem_rootpath(subsystem) + subsystem_data_abspath = os.path.join(cov_path, "obj", subsystem_path) + if not os.path.exists(subsystem_data_abspath): + continue + get_module_gcno_files(cov_path, subsystem_data_abspath) + gen_subsystem_trace_info(subsystem, subsystem_data_abspath, test_dir) + cut_info(subsystem, test_dir) + + +def gen_all_test_info(subsystem_list=[]): + cov_path = os.path.join(CODEPATH, COVERAGE_GCDA_RESULTS) + single_test_dir_list = [] + for root, dirs, files in os.walk(cov_path): + single_test_dir_list = dirs + break + for index, cur_test_dir in enumerate(single_test_dir_list): + cur_test_abs_dir = os.path.join(cov_path, cur_test_dir) + rm_unnecessary_dir(cur_test_abs_dir) + gen_info(cur_test_abs_dir, cur_test_dir, subsystem_list) + + +def merge_subsystem_info_from_all_test(subsystem): + single_test_info_path = os.path.join(CODEPATH, REPORT_PATH, "single_test") + subsystem_info_list = [] + subsystem_info_name = subsystem + "_strip.info" + for root, dirs, files in os.walk(single_test_info_path): + if subsystem_info_name in files: + subsystem_info_path_tmp = os.path.join( + single_test_info_path, root, subsystem_info_name) + subsystem_info_list.append(subsystem_info_path_tmp) + if len(subsystem_info_list) == 0: + return + info_output_name = os.path.join( + CODEPATH, REPORT_PATH, subsystem_info_name) + cmd = "lcov -a {} -o {}".format( + " -a ".join(subsystem_info_list), info_output_name) + execute_command(cmd) + + +def merge_all_test_subsystem_info(subsystem_list): + single_test_info_path = os.path.join( + CODEPATH, REPORT_PATH, "single_test") + if not os.path.exists(single_test_info_path): + print("Error: the single test info path %s not exist", + single_test_info_path) + return + for subsystem in subsystem_list: + print("Merging all %s info from test data......", subsystem) + merge_subsystem_info_from_all_test(subsystem) + + +def merge_info(report_dir): + if not os.path.exists(report_dir): + print("Error: report dir %s not exist", report_dir) + return + subsystem_name_list = get_files_from_dir(report_dir, "_strip.info") + if len(subsystem_name_list) == 0: + print("Error: get subsytem trace files in \report directory failed.") + return + trace_file_list = [] + for subsystem in subsystem_name_list: + trace_file_name = os.path.join(report_dir, subsystem) + trace_file_list.append(trace_file_name) + cmd = "lcov -a {} -o {}".format(" -a ".join(trace_file_list), + os.path.join( + report_dir, "ohos_codeCoverage.info")) + execute_command(cmd) + + +def merge_all_subsystem_info(): + print("Merging all the sysbsystem trace files......") + merge_info(os.path.join(CODEPATH, REPORT_PATH)) + + +def gen_html(cov_path): + tracefile = os.path.join(CODEPATH, REPORT_PATH, "ohos_codeCoverage.info") + if not os.path.exists(tracefile): + print("Error: the trace file %s not exist", tracefile) + return + cmd = "genhtml --branch-coverage --demangle-cpp -o {} -p {} --ignore-errors source {}"\ + .format(os.path.join(CODEPATH, REPORT_PATH, "html"), CODEPATH, tracefile) + execute_command(cmd) + + +def gen_final_report(cov_path): + print("Generating the html report......") + gen_html(cov_path) + + +if __name__ == "__main__": + gen_all_test_info(subsystem_list=get_subsystem_name_list()) + merge_all_test_subsystem_info(subsystem_list=get_subsystem_name_list()) + merge_all_subsystem_info() + gen_final_report(os.path.join(CODEPATH, COVERAGE_GCDA_RESULTS)) diff --git a/localCoverage/codeCoverage/coverage_rc/lcovrc_cov_template b/localCoverage/codeCoverage/coverage_rc/lcovrc_cov_template new file mode 100644 index 0000000..0f99e76 --- /dev/null +++ b/localCoverage/codeCoverage/coverage_rc/lcovrc_cov_template @@ -0,0 +1,175 @@ +# +# Copyright (c) 2023 Huawei Device Co., Ltd. +# 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. +# +# +# /etc/lcovrc - system-wide defaults for LCOV +# +# To change settings for a single user, place a customized copy of this file +# at location ~/.lcovrc +# + +# Specify an external style sheet file (same as -css-file option of genhtml) +# genhtml_css_file = gcov.css + +# Specify coverage rate limits (in %) for classifying file entries +# HI: hi_limit <= rate <= 100 graph color: green +# MED: med_limit <= rate < hi_limit graph color: orange +# LO: 0 <= rate < med_limit graph color: red +genhtml_hi_limit = 90 +genhtml_med_limit = 75 + +# Width of line coverage field in source code view +genhtml_line_field_width = 12 + +# Width of branch coverage field in source code view +genhtml_branch_field_width = 16 + +# Width of overview image (used by --frames option of genhtml) +genhtml_overview_width = 80 + +# Resolution of overview navigation: this number specifies the maximum +# difference in lines between the position a user selected from the overview +# and the position the source code window is scrolled to (used by --frames +# option of genhtml) +genhtml_nav_resolution = 4 + +# Clicking a line in the overview image should show the source code view at +# a position a bit further up so that the requested line is not the first +# line in the window. This number specifies that offset in lines (used by +# --frames option of genhtml) +genhtml_nav_offset = 10 + +# Do not remove unused test descriptions if non-zero (same as +# --keep-descriptions option of genhtml) +genhtml_keep_descriptions = 0 + +# Do not remove prefix from directory names if non-zero (same as --no-prefix +# option of genhtml) +genhtml_no_prefix = 0 + +# Do not create source code view if non-zero (same as --no-source option of +# genhtml) +genhtml_no_source = 0 + +# Replace tabs with number of spaces in source view (same as --num-spaces +# option of genhtml) +genhtml_num_spaces = 8 + +# Highlight lines with converted-only data if non-zero (same as --highlight +# option of genhtml) +genhtml_highlight = 0 + +# Include color legend in HTML output if non-zero (same as --legend option of +# genhtml) +genhtml_legend = 0 + +# Use FILE as HTML prolog for generated pages (same as --html-prolog option of +# genhtml) +# genhtml_html_prolog = FILE + +# Use FILE as HTML epilog for generated pages (same as --html-epilog option of +# genhtml) +# genhtml_html_epilog = FILE + +# Use custom filename extension for pages (same as --html-extension option of +# genhtml) +# genhtml_html_extension = html + +# Compress all generated html files with gzip. +# genhtml_html_gzip = 1 + +# Include sorted overview pages (can be disabled by the --no-sort option of +# genhtml) +genhtml_sort = 1 + +# Include function coverage data display (can be disabled by the +# --no-func-coverage option of genhtml) +# genhtml_function_coverage = 1 + +# Include branch coverage data display (can be disabled by the +# --no-branch-coverage option of genhtml) +# genhtml_branch_coverage = 1 + +# Specify the character set of all generated HTML pages +genhtml_charset=UTF-8 + +# Allow HTML markup in test case description text if non-zero +genhtml_desc_html = 0 + +# Specify the precision for coverage rates +# genhtml_precision = 1 + +# Location of the gcov tool (same as --gcov-info option of geninfo) +# geninfo_gcov_tool = gcov + +# Adjust test names to include operating system information if non-zero +# geninfo_adjust_testname = 0 + +# Calculate checksum for each source code line if non-zero (same as --checksum +# option of geninfo if non-zero, same as --no-checksum if zero) +# geninfo_checksum = 1 + +# Specify whether to capture coverage data for external source files (can +# be overridden by the --external and --no-external options of geninfo/lcov) +# geninfo_external = 1 + +# Enable libtool compatibility mode if non-zero (same as --compat-libtool option +# of geninfo if non-zero, same as --no-compat-libtool if zero) +# geninfo_compat_libtool = 0 + +# Specify compatiblity modes (same as --compat option of geninfo). +# geninfo_compat = libtool = on, hammer=auto, split_crc=auto + +# Adjust path to source files by removing or changing path components that +# match the specified pattern (Perl regular expression format) +# geninfo_adjust_src_path = /tmp/build => /usr/src + +# Specify if geninfo should try to automatically determine the base-directory +# when collecting coverage data. +geninfo_auto_base = 1 + +# Directory containing gcov kernel files +# lcov_gcov_dir = /proc/gcov + +# Location of the insmod tool +lcov_insmod_tool = /sbin/insmod + +# Location of the modprobe tool +lcov_modprobe_tool = /sbin/modprobe + +# Location of the rmmod tool +lcov_rmmod_tool = /sbin/rmmod + +# Show full paths during list operation if non-zero (same as --list-full-path +# option of lcov) +lcov_list_full_path = 0 + +# Specify the maximum width for list output. This value is ignored when +# lcov_list_full_path is non-zero. +lcov_list_width = 80 + +# Specify the maximum percentage of file names which may be truncated when +# choosing a directory prefix in list output. This value is ignored when +# lcov_list_full_path is non-zero. +lcov_list_truncate_max = 20 + +# Specify if function coverage data should be collected and processed. +lcov_function_coverage = 1 + +# Specify if branch coverage data should be collected and processed. +lcov_branch_coverage = 1 + +# Specify the regular expression of lines to exclude from branch coveragel +# Default is 'LCOV_EXCL_BR_LINE'. +lcov_excl_br_line = LCOV_EXCL_BR_LINE \ No newline at end of file diff --git a/localCoverage/codeCoverage/llvm-gcov.sh b/localCoverage/codeCoverage/llvm-gcov.sh new file mode 100644 index 0000000..4045480 --- /dev/null +++ b/localCoverage/codeCoverage/llvm-gcov.sh @@ -0,0 +1,20 @@ +# !/bin/bash +# +# Copyright (c) 2023 Huawei Device Co., Ltd. +# 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. +# +# This file is autogenerated by c_coverage_mgr.py, do not edit manually . + +current_path=$(cd $(dirname $0);pwd) +root_path=${current_path%%/test/testfwk/developer_test/localCoverage/codeCoverage} +exec $root_path/prebuilts/clang/ohos/linux-x86_64/llvm/bin/llvm-cov gcov "$@" diff --git a/localCoverage/codeCoverage/mutilProcess_CodeCoverage.py b/localCoverage/codeCoverage/mutilProcess_CodeCoverage.py new file mode 100644 index 0000000..69a4e34 --- /dev/null +++ b/localCoverage/codeCoverage/mutilProcess_CodeCoverage.py @@ -0,0 +1,405 @@ +#!/usr/bin/env python3 +# coding=utf-8 + +# +# Copyright (c) 2023 Huawei Device Co., Ltd. +# 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. +# + +import os +import json +import shutil +import shlex +import subprocess +import multiprocessing +from multiprocessing import Process + + +# 根代码目录 +root_path = os.getcwd() +CODEPATH = root_path.split("/test/testfwk/developer_test")[0] +# 子系统json目录 +SYSTEM_JSON = "test/testfwk/developer_test/localCoverage/codeCoverage/subsystem_config.json" +# 覆盖率gcda +COVERAGE_GCDA_RESULTS = "test/testfwk/developer_test/localCoverage/codeCoverage/results/coverage/data/cxx" +# 报告路径 +REPORT_PATH = "test/testfwk/developer_test/localCoverage/codeCoverage/results/coverage/reports/cxx" +# llvm-gcov.sh +LLVM_GCOV = "test/testfwk/developer_test/localCoverage/codeCoverage/llvm-gcov.sh" +# 编译生成的out路径 +OUTPUT = "out/baltimore" +# 屏蔽列表 +FILTEROUT_DIRS = ["unittest", "third_party", "test"] +# 测试套划分步长 +STEP_SIZE = 10 +# lcovrc配置文件集合 +LCOVRC_SET = CODEPATH + "/test/testfwk/developer_test/localCoverage/codeCoverage/coverage_rc" + + +def call(cmd_list, is_show_cmd=False, out=None, err=None): + return_flag = False + try: + if is_show_cmd: + print("execute command: {}".format(" ".join(cmd_list))) + if 0 == subprocess.call(cmd_list, shell=False, stdout=out, stderr=err): + return_flag = True + except: + print("Error : command {} execute faild!".format(cmd_list)) + return_flag = False + + return return_flag + + +def execute_command(command, printflag=False): + try: + cmd_list = shlex.split(command) + with open("coverage.log", 'a') as fd: + call(cmd_list, printflag, fd, fd) + except IOError as err: + print("Error: Exception occur in open: %s", err.message) + + +def get_subsystem_config_info(): + filter_subsystem_name_list = [ + "subsystem_examples", + ] + subsystem_info_dic = {} + subsystem_config_filepath = os.path.join(CODEPATH, SYSTEM_JSON) + if os.path.exists(subsystem_config_filepath): + data = None + with open(subsystem_config_filepath, "r", encoding="utf-8") as f: + data = json.load(f) + if not data: + print("subsystem config file error.") + for value in data.values(): + subsystem_name = value.get("name") + if subsystem_name in filter_subsystem_name_list: + continue + subsystem_dir = value.get('dir') + subsystem_path = value.get('path') + subsystem_project = value.get('project') + subsystem_rootpath = [] + for path in subsystem_path: + subsystem_rootpath.append(os.path.join(CODEPATH, path)) + subsystem_info_dic[subsystem_name] = [ + subsystem_project, subsystem_dir, + subsystem_path, subsystem_rootpath + ] + return subsystem_info_dic + + +def get_subsystem_name_list(): + subsystem_name_list = [] + subsystem_info_dic = get_subsystem_config_info() + for key in subsystem_info_dic.keys(): + subsystem_rootpath = subsystem_info_dic[key][3] + for subsystem_rootpath_item in subsystem_rootpath: + if os.path.exists(subsystem_rootpath_item): + subsystem_name_list.append(key) + + return subsystem_name_list + + +def get_subsystem_rootpath(subsystem_name): + subsystem_path = "" + subsystem_rootpath = "" + subsystem_info_dic = get_subsystem_config_info() + for key in subsystem_info_dic.keys(): + if key == subsystem_name: + subsystem_path = subsystem_info_dic[key][2] + subsystem_rootpath = subsystem_info_dic[key][3] + break + + return subsystem_path, subsystem_rootpath + + +def is_filterout_dir(ignore_prefix, check_path): + for dir in FILTEROUT_DIRS: + check_list = check_path[len(ignore_prefix):].split("/") + if dir in check_list: + return True + + return False + + +def rm_unnecessary_dir(cov_path): + topdir = os.path.join(cov_path, "obj") + for root, dirs, files in os.walk(topdir): + if is_filterout_dir(topdir, root): + shutil.rmtree(root) + + +def get_files_from_dir(find_path, postfix=None): + names = os.listdir(find_path) + file_list = [] + for fn in names: + if not os.path.isfile(os.path.join(find_path, fn)): + continue + if postfix is not None: + if fn.endswith(postfix): + file_list.append(fn) + else: + file_list.append(fn) + + return file_list + + +def get_gcno_files(cov_path, dir_name): + gcda_strip_path = dir_name[len(cov_path) + 1:] + gcda_list = get_files_from_dir(dir_name, ".gcda") + for file_name in gcda_list: + gcno_name = os.path.splitext(file_name)[0] + ".gcno" + gcno_path = os.path.join( + os.path.join(CODEPATH, OUTPUT), gcda_strip_path, gcno_name + ) + if os.path.exists(gcno_path): + shutil.copy(gcno_path, dir_name) + else: + print(f"{gcno_path} not exists!") + + +def get_module_gcno_files(cov_path, dir_name): + for root, dirs, files in os.walk(dir_name): + get_gcno_files(cov_path, root) + + +def gen_subsystem_trace_info(subsystem, data_dir, test_dir, lcovrc_path): + src_dir = os.path.join(CODEPATH, OUTPUT) + single_info_path = os.path.join( + CODEPATH, REPORT_PATH, "single_test", test_dir + ) + if not os.path.exists(single_info_path): + os.makedirs(single_info_path) + output_name = os.path.join( + CODEPATH, single_info_path, subsystem + "_output.info" + ) + if not os.path.exists(src_dir): + print(f"Sours path {src_dir} not exists!") + return + + cmd = "lcov -c -b {} -d {} --gcov-tool {} --config-file {} -o {} --ignore-errors" \ + "source,gcov".format(src_dir, data_dir, os.path.join( + CODEPATH, LLVM_GCOV), lcovrc_path, output_name) + print("single_test**##father_pid:%s##child_pid:%s cmd:%s config file:%s"%( + os.getpid(), os.getppid(), cmd, lcovrc_path + )) + execute_command(cmd) + + +def cut_info(subsystem, test_dir): + trace_file = os.path.join( + CODEPATH, REPORT_PATH, "single_test", + test_dir, subsystem + "_output.info" + ) + output_name = os.path.join( + CODEPATH, REPORT_PATH, "single_test", + test_dir, subsystem + "_strip.info" + ) + + remove = r"'*/third_party/*' 'sdk/android-arm64/*'" + if not os.path.exists(trace_file): + print(f"Error: trace file {trace_file} not exists!") + return + + cmd = "lcov --remove {} {} -o {}".format(trace_file, remove, output_name) + execute_command(cmd) + + +def gen_info(cov_path, test_dir, subsystem_list, lcovrc_path): + if len(subsystem_list) == 0: + print("Error: get subsystem list failed, can not generate trace info") + return + + loop = 0 + for subsystem in list(set(subsystem_list)): + subsystem_path, subsystem_rootpath = get_subsystem_rootpath(subsystem) + for subsys_path in subsystem_path: + subsystem_data_abspath = os.path.join(cov_path, "obj", subsys_path) + # check id subsystem data is exists + if not os.path.exists(subsystem_data_abspath): + continue + + # copy gcno to the gcda same directory + get_module_gcno_files(cov_path, subsystem_data_abspath) + + # generate coverage info for each subsystem + gen_subsystem_trace_info( + subsystem + "#" + subsys_path.replace("/", "_") + "#" + str(loop), + subsystem_data_abspath, test_dir, lcovrc_path + ) + + # remove some type which useless + cut_info(subsystem + "#" + subsys_path.replace("/", "_") + "#" + str(loop), test_dir) + + loop += 1 + + +def generate_coverage_info(single_test_dir_list, lcovrc_path, subsystem_list=[]): + cov_path = os.path.join(CODEPATH, COVERAGE_GCDA_RESULTS) + for index, cur_test_dir in enumerate(single_test_dir_list): + cur_test_abs_dir = os.path.join(cov_path, cur_test_dir) + gen_info(cur_test_abs_dir, cur_test_dir, subsystem_list, lcovrc_path) + + +def gen_all_test_info(subsystem_list=[]): + cov_path = os.path.join(CODEPATH, COVERAGE_GCDA_RESULTS) + print(os.getpid(), os.getppid()) + single_test_dir_list = [] + for root, dirs, files in os.walk(cov_path): + single_test_dir_list = dirs + break + + return single_test_dir_list + + +def merge_subsystem_info_from_all_test(subsystem): + single_test_info_path = os.path.join( + CODEPATH, REPORT_PATH, "single_test" + ) + subsystem_info_list = [] + subsystem_info_name = subsystem + "_strip.info" + for root, dirs, files in os.walk(single_test_info_path): + for file in files: + if file.startswith(subsystem) and file.endswith("_strip.info"): + subsystem_info_path_tmp = os.path.join( + single_test_info_path, root, file + ) + print("##" + subsystem_info_path_tmp) + subsystem_info_list.append(subsystem_info_path_tmp) + + if len(subsystem_info_list) == 0: + return + + info_output_name = os.path.join( + CODEPATH, REPORT_PATH, subsystem_info_name + ) + cmd = "lcov -a {} -o {}".format( + " -a ".join(subsystem_info_list), info_output_name + ) + execute_command(cmd) + + +def merge_all_test_subsystem_info(subsystem_list): + single_test_info_path = os.path.join( + CODEPATH, REPORT_PATH, "single_test" + ) + if not os.path.exists(single_test_info_path): + print(f"Error: the single test info path " + f"{single_test_info_path} not exist") + return + + for subsystem in subsystem_list: + print(f"Merging all {subsystem} info from test data") + merge_subsystem_info_from_all_test(subsystem) + + +def merge_info(report_dir): + if not os.path.exists(report_dir): + print(f"Error: report dir {report_dir} not exists!") + return + + subsystem_name_list = get_files_from_dir(report_dir, "_strip.info") + if len(subsystem_name_list) == 0: + print("Error: get subsystem trace files in report directory failed.") + return + + trace_file_list = [] + for subsystem in subsystem_name_list: + trace_file_name = os.path.join(report_dir, subsystem) + trace_file_list.append(trace_file_name) + + cmd = "lcov -a {} -o {}".format( + " -a ".join(trace_file_list), os.path.join(report_dir, "ohos_codeCoverage.info") + ) + execute_command(cmd) + + +def merge_all_subsystem_info(): + print("Merging all the subsystem trace files") + merge_info(os.path.join(CODEPATH, REPORT_PATH)) + + +def gen_html(cov_path): + tracefile = os.path.join(CODEPATH, REPORT_PATH, "ohos_codeCoverage.info") + if not os.path.exists(tracefile): + print(f"Error: the trace file {tracefile} not exists!") + return + + cmd = "genhtml --branch-coverage --demangle-cpp -o {} -p {} --ignore-errors " \ + "source {}".format(os.path.join(CODEPATH, REPORT_PATH, "html"), + CODEPATH, tracefile) + execute_command(cmd) + + +def gen_final_report(cov_path): + print("Generating the html report") + gen_html(cov_path) + + +if __name__ == '__main__': + caseLst = gen_all_test_info(subsystem_list=get_subsystem_name_list()) + multiprocessing.set_start_method("fork") # fork spawn forkserver + start = end = 0 + Tag = False + process_list = [] + for i in range(len(caseLst)): + lcovrc_path = LCOVRC_SET + "/" + "lcovrc_cov" + str(i) + print(lcovrc_path) + if os.path.exists(lcovrc_path): + print(lcovrc_path + "@" * 20 + "yes") + else: + raise Exception("mutilProcess have error -rc path not existed. " + "please fix add run") + + start = end + end += STEP_SIZE + if end >= len(caseLst): + end = len(caseLst) + Tag = True + + p = Process(target=generate_coverage_info, + args=(caseLst[start:end], lcovrc_path, + get_subsystem_name_list())) + p.daemon = True + p.start() + process_list.append(p) + if Tag: + break + + for i in process_list: + i.join() + + merge_all_test_subsystem_info(subsystem_list=get_subsystem_name_list()) + merge_all_subsystem_info() + gen_final_report(os.path.join(CODEPATH, COVERAGE_GCDA_RESULTS)) + + + + + + + + + + + + + + + + + + + + + diff --git a/localCoverage/coverage_tools.py b/localCoverage/coverage_tools.py new file mode 100644 index 0000000..f36f735 --- /dev/null +++ b/localCoverage/coverage_tools.py @@ -0,0 +1,174 @@ +#!/usr/bin/env python3 +# coding=utf-8 + +# +# Copyright (c) 2023 Huawei Device Co., Ltd. +# 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. +# + + +import os +import sys +import json +import shutil +import subprocess +from shutil import copyfile + + +def get_subsystem_config(test_part_list): + all_system_info_path = os.path.join( + developer_path, + "developer_test/localCoverage/all_subsystem_config.json" + ) + system_info_path = os.path.join( + developer_path, + "developer_test/localCoverage/codeCoverage/subsystem_config.json" + ) + if os.path.exists(all_system_info_path): + new_json_text = {} + for part in test_part_list: + with open(all_system_info_path, "r", encoding="utf-8") as system_text: + system_text_json = json.load(system_text) + if part in system_text_json: + new_json_text[part] = system_text_json[part] + else: + print("part not in all_subsystem_config.json") + + new_json = json.dumps(new_json_text, indent=4) + with open(system_info_path, "w") as out_file: + out_file.write(new_json) + else: + print("%s not exists.", all_system_info_path) + + +def copy_coverage(): + print("[*************** Start TO Get Coverage Report ***************]") + coverage_path = os.path.join( + developer_path, "developer_test/reports/coverage" + ) + code_path = os.path.join( + developer_path, + "developer_test/localCoverage/codeCoverage/results/coverage" + ) + if os.path.exists(code_path): + shutil.rmtree(code_path) + shutil.copytree(coverage_path, code_path) + + +def generate_coverage_rc(developer_path): + coverage_rc_path = os.path.join( + developer_path, + "developer_test/localCoverage/codeCoverage/coverage_rc" + ) + lcovrc_cov_template_path = os.path.join(coverage_rc_path, "lcovrc_cov_template") + for num in range(16): + tmp_cov_path = os.path.join(coverage_rc_path, f"tmp_cov_{num}") + lcovrc_cov_path = os.path.join(coverage_rc_path, f"lcovrc_cov_{num}") + if not os.path.exists(tmp_cov_path): + os.mkdir(tmp_cov_path) + if not os.path.exists(os.path.join(tmp_cov_path, "ex.txt")): + with open(os.path.join(tmp_cov_path, "ex.txt"), mode="w") as f: + f.write("") + + copyfile(lcovrc_cov_template_path, lcovrc_cov_path) + with open(lcovrc_cov_path, mode="a") as f: + f.write("\n\n") + f.write("# Location for temporary directories\n") + f.write(f"lcov_tmp_dir = {tmp_cov_path}") + + +def execute_code_cov_tools(): + llvm_gcov_path = os.path.join( + developer_path, + "developer_test/localCoverage/codeCoverage/llvm-gcov.sh" + ) + subprocess.Popen("dos2unix %s" % llvm_gcov_path, shell=True).communicate() + tools_path = os.path.join( + developer_path, + "developer_test/localCoverage/codeCoverage/mutilProcess_CodeCoverage.py" + ) + code_coverage_process = subprocess.Popen("python3 %s" % tools_path, shell=True) + code_coverage_process.communicate() + + +def get_subsystem_name(test_part_list): + testfwk_json_path = os.path.join( + root_path, "out/baltimore/build_configs/infos_for_testfwk.json" + ) + if os.path.exists(testfwk_json_path): + with open(testfwk_json_path, "r", encoding="utf-8") as json_text: + system_json = json.load(json_text) + subsystem_info = system_json.get("phone").get("subsystem_infos") + subsystem_list = [] + for part in test_part_list: + for key in subsystem_info.keys(): + if part in subsystem_info.keys() and key not in subsystem_list: + subsystem_list.append(key) + subsystem_str = ','.join(list(map(str, subsystem_list))) + return subsystem_str + else: + print("%s not exists.", testfwk_json_path) + + +def execute_interface_cov_tools(subsystem_str): + print("[*************** Start TO Get Interface Coverage Report ***************]") + innerkits_json_path = os.path.join( + developer_path, + "developer_test/localCoverage/interfaceCoverage/get_innerkits_json.py" + ) + interface_coverage_process = subprocess.Popen( + "python3 %s" % innerkits_json_path, shell=True + ) + interface_coverage_process.communicate() + + interface_path = os.path.join( + developer_path, + "developer_test/localCoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py" + ) + subprocess.run("python2 %s %s" % (interface_path, subsystem_str), shell=True) + + +if __name__ == '__main__': + testpart_args = sys.argv[1] + subsystem_args = sys.argv[2] + test_part_list = testpart_args.split("testpart=")[1].split(",") + subsystem_args_str = subsystem_args.split("subsystem=")[1] + + current_path = os.getcwd() + root_path = current_path.split("/test/testfwk/developer_test")[0] + developer_path = current_path.split("/developer_test/src")[0] + + # copy gcda数据到覆盖率工具指定位置 + copy_coverage() + generate_coverage_rc(developer_path) + + # 获取部件位置信息config + if len(test_part_list) > 0: + get_subsystem_config(test_part_list) + + # 执行代码覆盖率 + execute_code_cov_tools() + + # 执行接口覆盖率 + if subsystem_args_str: + subsystem_str = subsystem_args_str + else: + subsystem_str = get_subsystem_name(test_part_list) + + if subsystem_str: + execute_interface_cov_tools(subsystem_str) + else: + print("subsystem or part without!") + + + diff --git a/localCoverage/interfaceCoverage/__init__.py b/localCoverage/interfaceCoverage/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/localCoverage/interfaceCoverage/get_innerkits_json.py b/localCoverage/interfaceCoverage/get_innerkits_json.py new file mode 100644 index 0000000..8ab3378 --- /dev/null +++ b/localCoverage/interfaceCoverage/get_innerkits_json.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +# coding=utf-8 + +# +# Copyright (c) 2023 Huawei Device Co., Ltd. +# 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. +# + + +import os +import json +import subprocess + + +def genPartsInfoJSON(folder_list, output_json_path): + """ + 根据部件信息,生成字典至json文件中 + """ + if len(folder_list) != 0: + data_dict = {} + for folder_str in folder_list: + data_dict[folder_str] = "innerkits/ohos-arm64/" + folder_str + output_json_path = os.path.join(output_json_path, "kits_modules_info.json") + json_str = json.dumps(data_dict, indent=2) + with open(output_json_path, "w") as json_file: + json_file.write(json_str) + else: + print("Failed to obtain component information") + + +def getPartsJson(path): + """ + #获取out/ohos-arm-release/innerkits/ohos-arm内部接口文件夹名称列表 + """ + if os.path.exists(path): + folder_list = os.listdir(path) + else: + print("The folder does not exist") + folder_list = [] + return folder_list + + +if __name__ == "__main__": + current_path = os.getcwd() + root_path = current_path.split("/test/testfwk/developer_test")[0] + part_info_path = os.path.join( + root_path, "out/baltimore/innerkits/ohos-arm64" + ) + output_json_path = os.path.join( + root_path, "out/baltimore/packages/phone/innerkits/ohos-arm64" + ) + subprocess.Popen("mkdir -p " + output_json_path, shell=True) + folder_list = getPartsJson(part_info_path) + genPartsInfoJSON(folder_list, output_json_path) + diff --git a/localCoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py b/localCoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py new file mode 100644 index 0000000..66c77e8 --- /dev/null +++ b/localCoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py @@ -0,0 +1,461 @@ +#!/usr/bin/env python3 +# coding=utf-8 + +# +# Copyright (c) 2023 Huawei Device Co., Ltd. +# 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. +# + + +import os +import sys +import json +import shutil +import subprocess +import CppHeaderParser +import get_innerkits_json +import makeReport + + +root_path = os.getcwd() +CODEPATH = root_path.split("/test/testfwk/developer_test")[0] +PATH_INFO_PATH = "out/baltimore/innerkits/ohos-arm64" +OUTPUT_JSON_PATH = "out/baltimore/packages/phone/innerkits/ohos-arm64" +KIT_MODULES_INFO = "out/baltimore/packages/phone/innerkits/ohos-arm64/kits_modules_info.json" +SUB_SYSTEM_INFO_PATH = os.path.join( + CODEPATH, "test/testfwk/developer_test/localCoverage/codeCoverage/results/coverage/reports/cxx") +OUTPUT_REPORT_PATH = os.path.join( + CODEPATH, "test/testfwk/developer_test/localCoverage/interfaceCoverage/results/coverage/interface_kits" +) + + +filter_file_name_list = [ + "appexecfwk/libjnikit/include/jni.h", +] +FILTER_CLASS_ATTRIBUTE_LIST = ["ACE_EXPORT", "OHOS_NWEB_EXPORT"] + + +def create_coverage_result_outpath(filepath): + if os.path.exists(filepath): + shutil.rmtree(filepath) + os.makedirs(filepath) + + +def get_subsystem_part_list(project_rootpath): + subsystme_part_dict = {} + subsystem_part_config_filepath = os.path.join( + project_rootpath, "out/baltimore/build_configs", "infos_for_testfwk.json") + print(subsystem_part_config_filepath) + if os.path.exists(subsystem_part_config_filepath): + try: + with open(subsystem_part_config_filepath, 'r') as f: + data = json.load(f) + except IOError as err_msg: + print("Error for open subsystem config file: ", err_msg) + if not data: + print("subsystem_part config file error.") + else: + subsystme_part_dict= data.get("phone", "").get("subsystem_infos", "") + return subsystme_part_dict + else: + print("subsystem_part_config_filepath not exists.") + + +def load_json_data(): + json_file_path = os.path.join(CODEPATH, KIT_MODULES_INFO) + json_data_dic = {} + if os.path.isfile(json_file_path): + try: + with open(json_file_path, 'r') as f: + json_data_dic = json.load(f) + if not json_data_dic: + print("Loadind file \"%s\" error" % json_file_path) + return {} + except(IOError, ValueError) as err_msg: + print("Error for load_json_data: \"%s\"" % json_file_path, err_msg) + else: + print("Info: \"%s\" not exist." % json_file_path) + return json_data_dic + + +def get_file_list(find_path, postfix): + file_names = os.listdir(find_path) + file_list = [] + if len(file_names) > 0: + for fn in file_names: + if fn.find(postfix) != -1 and fn[-len(postfix):] == postfix: + file_list.append(fn) + return file_list + + +def get_file_list_by_postfix(path, postfix, filter_jar=""): + file_list = [] + for dirs in os.walk(path): + files = get_file_list(find_path=dirs[0], postfix=postfix) + for file_path in files: + if "" != file_path and -1 == file_path.find(__file__): + pos = file_path.rfind(os.sep) + file_name = file_path[pos+1:] + file_path = os.path.join(dirs[0], file_path) + if filter_jar != "" and file_name == filter_jar: + print("Skipped %s" % file_path) + continue + file_list.append(file_path) + return file_list + + +def is_need_to_be_parsed(filepath): + for item in filter_file_name_list: + if -1 != filepath.find(item): + return False + return True + + +def get_pubilc_func_list_from_headfile(cxx_header_filepath): + pubilc_func_list = [] + try: + cpp_header = CppHeaderParser.CppHeader(cxx_header_filepath) + for classname in cpp_header.classes: + class_name = classname + curr_class = cpp_header.classes[classname] + for func in curr_class["methods"]["public"]: + func_returntype = func["rtnType"] + func_name = func["name"] + if class_name in FILTER_CLASS_ATTRIBUTE_LIST: + class_name = func_name + if func_returntype.find("KVSTORE_API") != -1: + func_returntype = func_returntype.replace("KVSTORE_API", "").strip() + if func_name.isupper(): + continue + if class_name == func_name: + destructor = func["destructor"] + if destructor == True: + func_name = "~" + func_name + func_returntype = "" + debug = func["debug"].replace("KVSTORE_API", "") + debug = debug.replace(" ", "") + debug = debug.strip("{") + if debug.endswith("=delete;"): + continue + if debug.endswith("=default;"): + continue + if debug.startswith("inline"): + continue + if debug.startswith("constexpr"): + continue + if debug.startswith("virtual"): + continue + template = func["template"] + if template != False: + continue + param_type_list = [t["type"] for t in func["parameters"]] + pubilc_func_list.append((cxx_header_filepath, class_name, + func_name, param_type_list, func_returntype)) + for func in cpp_header.functions: + func_returntype = func["rtnType"] + func_name = func["name"] + if func_returntype.find("KVSTORE_API") != -1: + func_returntype = func_returntype.replace("KVSTORE_API", "").strip() + if func_name.isupper(): + continue + template = func["template"] + if template != False: + continue + debug = func["debug"].replace("KVSTORE_API", "") + debug = debug.replace(" ", "") + debug = debug.strip("{") + if debug.startswith("inline"): + continue + if debug.startswith("constexpr"): + continue + param_type_list = [t["type"] for t in func["parameters"]] + pubilc_func_list.append( + (cxx_header_filepath, "", func_name, param_type_list, + func_returntype) + ) + except CppHeaderParser.CppParseError as e: + print(e) + return pubilc_func_list + + +def get_sdk_interface_func_list(part_name): + interface_func_list = [] + sub_path = load_json_data().get(part_name, "") + if sub_path == "": + return interface_func_list + + sdk_path = os.path.join(CODEPATH, "out", "baltimore", sub_path) + if os.path.exists(sdk_path): + file_list = get_file_list_by_postfix(sdk_path, ".h") + for file in file_list: + try: + if is_need_to_be_parsed(file): + interface_func_list += get_pubilc_func_list_from_headfile(file) + except: + print("get interface error ", sdk_path) + else: + print("Error: %s is not exist." % sdk_path) + + print("interface_func_list:", interface_func_list) + return interface_func_list + + +def get_function_info_string(func_string): + function_info = "" + cxxfilt_filepath = "/usr/bin/c++filt" + if os.path.exists(cxxfilt_filepath): + command = ["c++filt", func_string] + function_info = subprocess.check_output(command, shell=False) + else: + print("/usr/bin/c++filt is not exist.") + return function_info + + +def get_covered_function_list(subsystem_name): + covered_function_list = [] + file_name = subsystem_name + "_strip.info" + file_path = os.path.join(SUB_SYSTEM_INFO_PATH, file_name) + if os.path.exists(file_path): + with open(file_path, "r") as fd: + for line in fd: + if line.startswith("FNDA:"): + sub_line_string = line[len("FNDA:"):].replace("\n", "").strip() + temp_list = sub_line_string.split(",") + if len(temp_list) == 2 and int(temp_list[0]) != 0: + func_info = get_function_info_string(temp_list[1]) + if "" == func_info: + continue + func_info = func_info.replace("\n", "") + if func_info == temp_list[1] and func_info.startswith("_"): + continue + covered_function_list.append(func_info) + else: + pass + return covered_function_list + + +def get_para_sub_string(content): + start_index = -1 + ended_index = -1 + parentheses_list_left = [] + parentheses_list_right = [] + + for index in range(len(content)): + char = content[index] + if "<" == char: + if 0 == len(parentheses_list_left): + start_index = index + parentheses_list_left.append(char) + continue + if ">" == char: + parentheses_list_right.append(char) + if len(parentheses_list_left) == len(parentheses_list_right): + ended_index = index + break + continue + + if -1 == start_index: + substring = content + else: + if -1 != ended_index: + substring = content[start_index:ended_index+1] + else: + substring = content[start_index:] + + return substring + + +def filter_para_sub_string(source): + content = source + if content != "": + while True: + pos = content.find("<") + if -1 != pos: + substring = get_para_sub_string(content[pos:]) + content = content.replace(substring, "") + else: + break + return content + + +def get_function_para_count(func_info): + pos_start = func_info.find("(") + pos_end = func_info.rfind(")") + content = func_info[pos_start+1: pos_end] + if "" == content: + return 0 + content = filter_para_sub_string(content) + para_list = content.split(",") + return len(para_list) + + +def get_covered_result_data(public_interface_func_list, covered_func_list, subsystem_name): + coverage_result_list = [] + for item in public_interface_func_list: + data_list = list(item) + file_path = data_list[0] + class_name = data_list[1] + func_name = data_list[2] + para_list = data_list[3] + return_val = data_list[4] + para_string = "" + for index in range(len(para_list)): + if para_list[index].strip() == "": + continue + curr_para = para_list[index] + para_string += curr_para + if index < len(para_list)-1: + para_string += ", " + fun_string = return_val + " " + func_name + "(" + para_string.strip().strip(",") + ")" + fun_string = fun_string.strip() + fun_string = filter_para_sub_string(fun_string) + + find_string = "" + if class_name != "": + find_string = "::" + class_name + "::" + func_name + "(" + else: + find_string = func_name + func_info_list = [] + for line in covered_func_list: + if -1 != line.find(find_string): + func_info_list.append(line) + curr_list = [class_name, fun_string] + if len(func_info_list) == 0: + curr_list.append("N") + elif len(func_info_list) == 1: + curr_list.append("Y") + else: + interface_para_count = len(para_list) + find_flag = False + for funcinfo in func_info_list: + if find_string == funcinfo: + curr_list.append("Y") + break + para_count = get_function_para_count(funcinfo) + if interface_para_count == para_count: + curr_list.append("Y") + find_flag = True + break + if not find_flag: + curr_list.append("N") + coverage_result_list.append(curr_list) + return coverage_result_list + + +def get_interface_coverage_result_list(subsystem_name,subsystem_part_dict): + part_list = subsystem_part_dict.get(subsystem_name, []) + public_interface_func_list = [] + for part_str in part_list: + try: + interface_func_list = get_sdk_interface_func_list(part_str) + public_interface_func_list.extend(interface_func_list) + except: + print("####") + covered_func_list = get_covered_function_list(subsystem_name) + interface_coverage_result_list = get_covered_result_data( + public_interface_func_list, covered_func_list, subsystem_name) + return interface_coverage_result_list + + +def get_coverage_data(data_list): + covered_count = 0 + total_count = len(data_list) + if 0 != total_count: + for item in data_list: + if "Y" == item[2] or "Recorded" == item[2]: + covered_count += 1 + coverage = str(covered_count * 100 / total_count) + "%" + else: + coverage = "0%" + return covered_count, coverage + + +def get_summary_data(interface_data_list): + summary_list = [] + total_count = 0 + covered_count = 0 + + for item in interface_data_list: + subsystem_name = item[0] + data_list = item[1] + if 0 != len(data_list): + count, coverage = get_coverage_data(data_list) + summary_list.append([subsystem_name, len(data_list), count, coverage]) + total_count += len(data_list) + covered_count += count + if 0 != total_count: + total_coverage = str(covered_count * 100 / total_count) + "%" + summary_list.append(["Summary", total_count, covered_count, total_coverage]) + return summary_list + + +def make_summary_file(summary_list, output_path): + report_path = os.path.join(output_path, "coverage_summary_file.xml") + try: + with open(report_path, "w") as fd: + fd.write('\n') + fd.write('\n') + for item in summary_list: + fd.write(" \n" % ( + item[0], str(item[1]), item[3])) + fd.write('\n') + except(IOError, ValueError) as err_msg: + print("Error for make coverage result: ", err_msg) + + +def make_result_file(interface_data_list, summary_list, output_path, title_name): + report_path = os.path.join(output_path, "ohos_interfaceCoverage.html") + makeReport.create_html_start(report_path) + makeReport.create_title(report_path, title_name, summary_list) + makeReport.create_summary(report_path, summary_list) + for item in interface_data_list: + subsystem_name = item[0] + data_list = item[1] + if 0 == len(data_list): + continue + count, coverage = get_coverage_data(data_list) + makeReport.create_table_test( + report_path, subsystem_name, data_list, len(data_list), count) + makeReport.create_html_ended(report_path) + + +def make_coverage_result_file(interface_data_list, output_path, title_name): + summary_list = get_summary_data(interface_data_list) + make_summary_file(summary_list, output_path) + make_result_file(interface_data_list, summary_list, output_path, title_name) + + +def make_interface_coverage_result(): + subsystem_name_list = system_name_list + interface_data_list = [] + subsystem_part_dict = get_subsystem_part_list(CODEPATH) + for subsystem_name in subsystem_name_list: + coverage_result_list = get_interface_coverage_result_list( + subsystem_name,subsystem_part_dict) + interface_data_list.append([subsystem_name, coverage_result_list]) + make_coverage_result_file(interface_data_list, OUTPUT_REPORT_PATH, + "Inner Interface") + + +if __name__ == "__main__": + system_args = sys.argv[1] + system_name_list = system_args.split(",") + get_innerkits_json.genPartsInfoJSON( + get_innerkits_json.getPartsJson(os.path.join(CODEPATH,PATH_INFO_PATH)), + os.path.join(CODEPATH,OUTPUT_JSON_PATH) + ) + if len(system_name_list) > 0: + make_interface_coverage_result() + else: + print("subsystem_name not exists!") diff --git a/localCoverage/interfaceCoverage/makeReport.py b/localCoverage/interfaceCoverage/makeReport.py new file mode 100644 index 0000000..a9e5056 --- /dev/null +++ b/localCoverage/interfaceCoverage/makeReport.py @@ -0,0 +1,243 @@ +#!/usr/bin/env python3 +# coding=utf-8 + +# +# Copyright (c) 2023 Huawei Device Co., Ltd. +# 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. +# + + +import sys +import datetime +reload(sys) +sys.setdefaultencoding("utf-8") + + +g_html_head = """ + + + + + 接口覆盖率邮件模板 + + +""" +g_html_body_start = """ +""" + +g_html_body_ended = """ +""" +g_html_ended = """ +""" + + +def sort_by_field_element(elem): + return int(elem[3][:-1]) #@######value是浮点数,如1.0,那么需要先转float再转int + + +def sort_by_field_element_data(elem): + return elem[2] + + +def create_html_start(reportpath): + try: + with open(reportpath, "w") as report: + report.write(g_html_head) + report.write(g_html_body_start) + except(IOError, ValueError) as err_msg: + print("Error for create html start: ", err_msg) + + +def create_title(reportpath, title_name, summary_list): + currdatetime = datetime.date.today().strftime("%Y-%m-%d") + report_title = """ +

%s coverage report (%s)

+ """ + content = report_title % (title_name, currdatetime) + report_title = content + """ +
+ + + + +
+

Summary Report

+

接口总数%s, 已覆盖%s, 未覆盖%s

+
+
+ """ + summary_list.sort(key=sort_by_field_element, reverse=False) + subsystems = "" + count = 0 + for item in summary_list: + subsystem = item[0] + if count < 3: + subsystems = subsystems + "、" + subsystem + count = count + 1 + if subsystem == "Summary": + nocoverd = item[1] - item[2] + report_title = report_title % (item[1], item[2], nocoverd) + try: + with open(reportpath, "a") as report: + report.write(report_title) + except(IOError, ValueError) as err_msg: + print("Error for create html title: ", err_msg) + + +def create_summary(reportpath, summary_list): + table_title = """ +

Summary

+ """ + + table_start = """
""" + + table_head = """ + + + + + + """ + + table_line = """ + + + + + + + """ + + table_ended = """
SubsystemNameTotalCountCoveredCountCoverage
%s%s%s%s
+ """ + try: + if len(summary_list) == 0: + return + with open(reportpath, "a") as report: + report.write(table_title) + report.write(table_start) + report.write(table_head) + for item in summary_list: + content = table_line % (item[0], str(item[1]), str(item[2]), item[3]) + report.write(content) + report.write(table_ended) + except(IOError, ValueError) as err_msg: + print("Error for create html summary: ", err_msg) + + +def create_table_test(reportpath, subsystem_name, datalist, total_count, covered_count): + table_title = """ + %s details: + """ + table_start = """
""" + table_head = """ + + + + + + """ + table_line = """ + + + + + + + """ + table_summary = """ + + + + """ + table_ended = """
SubsystemNameClassNameInterfaceNameIsCovered
%s%s%s%s
TotalCount: %s, CoveredCount:%s, Coverage: %s
+ """ + try: + with open(reportpath, "a") as report: + print("subsystem_name==" + subsystem_name) + tabletitle = table_title % (subsystem_name) + print("tabletitle==" + tabletitle) + tabletitle = "

" + tabletitle + "

" + report.write(tabletitle) + report.write(table_start) + report.write(table_head) + datalist.sort(key=sort_by_field_element_data, reverse=False) + + for line in datalist: + if str(line[2]) == "N": + content = table_line % ( + "" + subsystem_name + "", "" + line[0] + "", + "" + line[1] + "", + "" + str(line[2]) + "") + report.write(content) + else: + content = table_line % ( + "" + subsystem_name + "", "" + line[0] + "", + "" + line[1] + "", + "" + str(line[2]) + "") + report.write(content) + if 0 != total_count: + coverage = str(covered_count * 100 / total_count) + "%" + else: + coverage = "0%" + coverage = table_summary % (total_count, covered_count, coverage) + report.write(coverage) + report.write(table_ended) + except(IOError, ValueError) as err_msg: + print("Error for create html table test: ", err_msg) + + +def create_html_ended(reportpath): + try: + with open(reportpath, "a") as report: + report.write(g_html_body_ended) + report.write(g_html_ended) + except(IOError, ValueError) as err_msg: + print("Error for create html end: ", err_msg) diff --git a/localCoverage/interfaceCoverage/results/coverage/interface_kits/coverage_summary_file.xml b/localCoverage/interfaceCoverage/results/coverage/interface_kits/coverage_summary_file.xml new file mode 100644 index 0000000..fb67817 --- /dev/null +++ b/localCoverage/interfaceCoverage/results/coverage/interface_kits/coverage_summary_file.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/localCoverage/interfaceCoverage/results/coverage/interface_kits/ohos_interfaceCoverage.html b/localCoverage/interfaceCoverage/results/coverage/interface_kits/ohos_interfaceCoverage.html new file mode 100644 index 0000000..e506f9b --- /dev/null +++ b/localCoverage/interfaceCoverage/results/coverage/interface_kits/ohos_interfaceCoverage.html @@ -0,0 +1,1127 @@ + + + + + + 接口覆盖率邮件模板 + + + + +

Inner Interface coverage report (2022-08-23)

+ +
+ + + + +
+

Summary Report

+

接口总数147,已覆盖0,未覆盖147

+
+
+ +

Summary

+
+ + + + + + + + + + + + + + + + + + + +
SubsystemNameTotalCountCoveredCountCoverage
account14700.0%
Summary14700.0%
+

+ account details:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SubsystemNameClassNameInterfaceNameIsCovered
accountOsAccountSubscribeInfoOsAccountSubscribeInfo()N
accountOsAccountSubscribeInfoOsAccountSubscribeInfo(OS_ACCOUNT_SUBSCRIBE_TYPE &, std::string &)N
accountOsAccountSubscribeInfo~OsAccountSubscribeInfo()N
accountOsAccountSubscribeInfoErrCode GetOsAccountSubscribeType(OS_ACCOUNT_SUBSCRIBE_TYPE &)N
accountOsAccountSubscribeInfoErrCode SetOsAccountSubscribeType(const OS_ACCOUNT_SUBSCRIBE_TYPE &)N
accountOsAccountSubscribeInfoErrCode GetName(std::string &)N
accountOsAccountSubscribeInfoErrCode SetName(const std::string &)N
accountOsAccountSubscribeInfobool Marshalling(Parcel &)N
accountOsAccountSubscribeInfoOsAccountSubscribeInfo * Unmarshalling(Parcel &)N
accountOsAccountSubscriberOsAccountSubscriber()N
accountOsAccountSubscriberOsAccountSubscriber(const OsAccountSubscribeInfo &)N
accountOsAccountSubscriber~OsAccountSubscriber()N
accountOsAccountSubscriberErrCode GetSubscribeInfo(OsAccountSubscribeInfo &)N
accountOsAccountManagerErrCode CreateOsAccount(const std::string &, const OsAccountType &, OsAccountInfo &)N
accountOsAccountManagerErrCode CreateOsAccountForDomain(const OsAccountType &, const DomainAccountInfo &, OsAccountInfo &)N
accountOsAccountManagerErrCode RemoveOsAccount(const int)N
accountOsAccountManagerErrCode IsOsAccountExists(const int, bool &)N
accountOsAccountManagerErrCode IsOsAccountActived(const int, bool &)N
accountOsAccountManagerErrCode IsOsAccountConstraintEnable(const int, const std::string &, bool &)N
accountOsAccountManagerErrCode IsOsAccountVerified(const int, bool &)N
accountOsAccountManagerErrCode GetCreatedOsAccountsCount(unsigned int &)N
accountOsAccountManagerErrCode GetOsAccountLocalIdFromProcess(int &)N
accountOsAccountManagerErrCode IsMainOsAccount(bool &)N
accountOsAccountManagerErrCode GetOsAccountLocalIdFromUid(const int, int &)N
accountOsAccountManagerErrCode GetBundleIdFromUid(const int, int &)N
accountOsAccountManagerErrCode GetOsAccountLocalIdFromDomain(const DomainAccountInfo &, int &)N
accountOsAccountManagerErrCode QueryMaxOsAccountNumber(int &)N
accountOsAccountManagerErrCode GetOsAccountAllConstraints(const int, std::vector &)N
accountOsAccountManagerErrCode QueryAllCreatedOsAccounts(std::vector &)N
accountOsAccountManagerErrCode QueryCurrentOsAccount(OsAccountInfo &)N
accountOsAccountManagerErrCode QueryOsAccountById(const int, OsAccountInfo &)N
accountOsAccountManagerErrCode GetOsAccountTypeFromProcess(OsAccountType &)N
accountOsAccountManagerErrCode GetOsAccountProfilePhoto(const int, std::string &)N
accountOsAccountManagerErrCode IsMultiOsAccountEnable(bool &)N
accountOsAccountManagerErrCode SetOsAccountName(const int, const std::string &)N
accountOsAccountManagerErrCode SetOsAccountConstraints(const int, const std::vector &, const bool)N
accountOsAccountManagerErrCode SetOsAccountProfilePhoto(const int, const std::string &)N
accountOsAccountManagerErrCode GetDistributedVirtualDeviceId(std::string &)N
accountOsAccountManagerErrCode ActivateOsAccount(const int)N
accountOsAccountManagerErrCode StartOsAccount(const int)N
accountOsAccountManagerErrCode StopOsAccount(const int)N
accountOsAccountManagerErrCode GetOsAccountLocalIdBySerialNumber(const int64_t, int &)N
accountOsAccountManagerErrCode GetSerialNumberByOsAccountLocalId(const int &, int64_t &)N
accountOsAccountManagerErrCode SubscribeOsAccount(const std::shared_ptr &)N
accountOsAccountManagerErrCode UnsubscribeOsAccount(const std::shared_ptr &)N
accountOsAccountManagerOS_ACCOUNT_SWITCH_MOD GetOsAccountSwitchMod()N
accountOsAccountManagerErrCode IsCurrentOsAccountVerified(bool &)N
accountOsAccountManagerErrCode IsOsAccountCompleted(const int, bool &)N
accountOsAccountManagerErrCode SetCurrentOsAccountIsVerified(const bool)N
accountOsAccountManagerErrCode SetOsAccountIsVerified(const int, const bool)N
accountOsAccountManagerErrCode GetCreatedOsAccountNumFromDatabase(const std::string &, int &)N
accountOsAccountManagerErrCode GetSerialNumberFromDatabase(const std::string &, int64_t &)N
accountOsAccountManagerErrCode GetMaxAllowCreateIdFromDatabase(const std::string &, int &)N
accountOsAccountManagerErrCode GetOsAccountFromDatabase(const std::string &, const int, OsAccountInfo &)N
accountOsAccountManagerErrCode GetOsAccountListFromDatabase(const std::string &, std::vector &)N
accountOsAccountManagerErrCode QueryActiveOsAccountIds(std::vector &)N
accountOsAccountManagerErrCode QueryOsAccountConstraintSourceTypes(const int32_t, const std::string, std::vector &)N
accountOsAccountManagerErrCode SetGlobalOsAccountConstraints(const std::vector &, const bool, const int32_t, const bool)N
accountOsAccountManagerErrCode SetSpecificOsAccountConstraints(const std::vector &, const bool, const int32_t, const int32_t, const bool)N
accountDomainAccountInfoDomainAccountInfo()N
accountDomainAccountInfoDomainAccountInfo(const std::string &, const std::string &)N
accountDomainAccountInfovoid Clear()N
accountOsAccountInfoOsAccountInfo()N
accountOsAccountInfoOsAccountInfo(int, const std::string, OsAccountType, int64_t)N
accountOsAccountInfoOsAccountInfo(int, std::string, OsAccountType, std::vector, bool, std::string, int64_t, int64_t, int64_t, bool)N
accountOsAccountInfoint GetLocalId()N
accountOsAccountInfovoid SetLocalId(int)N
accountOsAccountInfostd::string GetLocalName()N
accountOsAccountInfovoid SetLocalName(const std::string)N
accountOsAccountInfoOsAccountType GetType()N
accountOsAccountInfovoid SetType(OsAccountType)N
accountOsAccountInfostd::vector GetConstraints()N
accountOsAccountInfovoid SetConstraints(const std::vector)N
accountOsAccountInfobool GetIsVerified()N
accountOsAccountInfovoid SetIsVerified(bool)N
accountOsAccountInfostd::string GetPhoto()N
accountOsAccountInfovoid SetPhoto(const std::string)N
accountOsAccountInfoint64_t GetCreateTime()N
accountOsAccountInfovoid SetCreateTime(const int64_t)N
accountOsAccountInfoint64_t GetLastLoginTime()N
accountOsAccountInfovoid SetLastLoginTime(const int64_t)N
accountOsAccountInfoJson ToJson()N
accountOsAccountInfovoid FromJson(const Json &)N
accountOsAccountInfobool Marshalling(Parcel &)N
accountOsAccountInfobool ReadFromParcel(Parcel &)N
accountOsAccountInfostd::string ToString()N
accountOsAccountInfostd::string GetPrimeKey()N
accountOsAccountInfoOsAccountInfo * Unmarshalling(Parcel &)N
accountOsAccountInfoint64_t GetSerialNumber()N
accountOsAccountInfovoid SetSerialNumber(const int64_t)N
accountOsAccountInfobool GetIsActived()N
accountOsAccountInfovoid SetIsActived(const bool)N
accountOsAccountInfobool GetIsCreateCompleted()N
accountOsAccountInfovoid SetIsCreateCompleted(const bool)N
accountOsAccountInfobool SetDomainInfo(const DomainAccountInfo &)N
accountOsAccountInfovoid GetDomainInfo(DomainAccountInfo &)N
accountOsAccountInfobool GetToBeRemoved()N
accountOsAccountInfovoid SetToBeRemoved(bool)N
accountOhosAccountKitsOhosAccountKits & GetInstance()N
accountDeviceAccountInfoDeviceAccountInfo()N
accountDeviceAccountInfoDeviceAccountInfo(const std::int32_t, const DeviceAccountType, const std::string &)N
accountDeviceAccountInfoDeviceAccountInfo(const std::int32_t, const DeviceAccountType, const std::string &, const std::string &)N
accountDeviceAccountInfo~DeviceAccountInfo()N
accountDeviceAccountInfobool operator==(const DeviceAccountInfo &)N
accountDeviceAccountInfostd::int32_t WriteDataToParcel(MessageParcel &)N
accountDeviceAccountInfovoid ReadDataFromParcel(MessageParcel &)N
accountOhosAccountInfoOhosAccountInfo(const std::string &, const std::string &, std::int32_t)N
accountOhosAccountInfoOhosAccountInfo()N
accountOhosAccountInfo~OhosAccountInfo()N
accountAccountInfoAccountInfo()N
accountAccountInfoAccountInfo(const std::string &, const std::string &, const std::int32_t &)N
accountAccountInfobool operator==(const AccountInfo &)N
accountAccountInfovoid clear(std::int32_t)N
accountAccountInfo~AccountInfo()N
accountAppAccountManagerErrCode AddAccount(const std::string &, const std::string &)N
accountAppAccountManagerErrCode AddAccountImplicitly(const std::string &, const std::string &, const AAFwk::Want &, const sptr &)N
accountAppAccountManagerErrCode DeleteAccount(const std::string &)N
accountAppAccountManagerErrCode GetAccountExtraInfo(const std::string &, std::string &)N
accountAppAccountManagerErrCode SetAccountExtraInfo(const std::string &, const std::string &)N
accountAppAccountManagerErrCode EnableAppAccess(const std::string &, const std::string &)N
accountAppAccountManagerErrCode DisableAppAccess(const std::string &, const std::string &)N
accountAppAccountManagerErrCode CheckAppAccountSyncEnable(const std::string &, bool &)N
accountAppAccountManagerErrCode SetAppAccountSyncEnable(const std::string &, const bool &)N
accountAppAccountManagerErrCode GetAssociatedData(const std::string &, const std::string &, std::string &)N
accountAppAccountManagerErrCode SetAssociatedData(const std::string &, const std::string &, const std::string &)N
accountAppAccountManagerErrCode GetAccountCredential(const std::string &, const std::string &, std::string &)N
accountAppAccountManagerErrCode SetAccountCredential(const std::string &, const std::string &, const std::string &)N
accountAppAccountManagerErrCode Authenticate(const std::string &, const std::string &, const std::string &, const AAFwk::Want &, const sptr &)N
accountAppAccountManagerErrCode GetOAuthToken(const std::string &, const std::string &, const std::string &, std::string &)N
accountAppAccountManagerErrCode SetOAuthToken(const std::string &, const std::string &, const std::string &)N
accountAppAccountManagerErrCode DeleteOAuthToken(const std::string &, const std::string &, const std::string &, const std::string &)N
accountAppAccountManagerErrCode SetOAuthTokenVisibility(const std::string &, const std::string &, const std::string &, bool)N
accountAppAccountManagerErrCode CheckOAuthTokenVisibility(const std::string &, const std::string &, const std::string &, bool &)N
accountAppAccountManagerErrCode GetAuthenticatorInfo(const std::string &, AuthenticatorInfo &)N
accountAppAccountManagerErrCode GetAllOAuthTokens(const std::string &, const std::string &, std::vector &)N
accountAppAccountManagerErrCode GetOAuthList(const std::string &, const std::string &, std::set &)N
accountAppAccountManagerErrCode GetAuthenticatorCallback(const std::string &, sptr &)N
accountAppAccountManagerErrCode GetAllAccounts(const std::string &, std::vector &)N
accountAppAccountManagerErrCode GetAllAccessibleAccounts(std::vector &)N
accountAppAccountManagerErrCode CheckAppAccess(const std::string &, const std::string &, bool &)N
accountAppAccountManagerErrCode DeleteAccountCredential(const std::string &, const std::string &)N
accountAppAccountManagerErrCode SelectAccountsByOptions(const SelectAccountsOptions &, const sptr &)N
accountAppAccountManagerErrCode VerifyCredential(const std::string &, const std::string &, const VerifyCredentialOptions &, const sptr &)N
accountAppAccountManagerErrCode CheckAccountLabels(const std::string &, const std::string &, const std::vector &, const sptr &)N
accountAppAccountManagerErrCode SetAuthenticatorProperties(const std::string &, const SetPropertiesOptions &, const sptr &)N
accountAppAccountManagerErrCode SubscribeAppAccount(const std::shared_ptr &)N
accountAppAccountManagerErrCode UnsubscribeAppAccount(const std::shared_ptr &)N
TotalCount: 147, CoveredCount:0, Coverage: 0.0%
+ + + \ No newline at end of file diff --git a/localCoverage/interfaceCoverage/results/coverage/interface_kits/test.png b/localCoverage/interfaceCoverage/results/coverage/interface_kits/test.png new file mode 100644 index 0000000000000000000000000000000000000000..9926563cf3090c93597c170f83e1951d9fabb462 GIT binary patch literal 8752 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 literal 0 HcmV?d00001 diff --git a/localCoverage/resident_service/config/ams/ams.cfg b/localCoverage/resident_service/config/ams/ams.cfg new file mode 100644 index 0000000..f287bd7 --- /dev/null +++ b/localCoverage/resident_service/config/ams/ams.cfg @@ -0,0 +1,50 @@ +{ + "jobs": [{ + "name": "services:ams", + "cmds": [ + "mkdir /data/service/el1/public/AbilityManagerService 0711 foundation system", + "mkdir /data/service/el1/bundle 0711 system system", + "mkdir /data/service/el2/base 0711 system system", + "mkdir /data/service/el2/database 0711 system system", + "mkdir /data/service/el1/public/notification 0711 foundation system", + "mkdir /data/service/el1/public/database 0711 ddms ddms", + "mkdir /data/service/el1/public/database/bundle_manager_service 02770 foundation ddms", + "mkdir /data/service/el1/public/database/notification_service 02770 foundation ddms", + "mkdir /data/service/el1/public/database/form_storage 02770 foundation ddms", + "chown radio system /sys/power/wake_lock", + "chown radio system /sys/power/wake_unlock", + "chmod 0664 /sys/power/wake_count" + ] + },{ + "name": "service:restartfoundation", + "cmds": [ + "reset appspawn", + "reset accountmgr" + ] + } + ], + "services": [{ + "name": "ams", + "path": ["/system/bin/sa_main", "/system/profile/ams.xml"], + "critical": [1, 1, 60], + "importance": -20, + "uid": "foundation", + "permission": [ + "ohos.permission.INPUT_MONITORING", + "ohos.permission.PERMISSION_USED_STATS", + "ohos.permission.DISTRIBUTED_DOFTBUS_CENTER", + "ohos.permission.DISTRIBUTE_DATASYNC", + "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", + "ohos.permission.INSTALL_BUNDLE", + "ohos.permission.MICROPHONE" + ], + "gid": ["system"], + "caps": ["SYS_PTRACE", "KILL"], + "jobs": { + "on-start": "services:ams", + "on-restart": "services:restartfoundation" + }, + "secon": "u:r:foundation:s0" + } + ] +} \ No newline at end of file diff --git a/localCoverage/resident_service/config/ams/ams.xml b/localCoverage/resident_service/config/ams/ams.xml new file mode 100644 index 0000000..c92bbb4 --- /dev/null +++ b/localCoverage/resident_service/config/ams/ams.xml @@ -0,0 +1,50 @@ + + + foundation + + + /system/lib64/libabliltyms.z.so + /system/lib64/libdataobsms.z.so + /system/lib64/libupms.z.so + /system/lib64/libappms.z.so + + + + + 180 + /system/lib64/libabilityms.z.so + + + true + false + 1 + + + 182 + /system/lib64/libdataobsms.z.so + + + true + false + 1 + + + 183 + /system/lib64/libupms.z.so + + + true + false + 1 + + + 501 + /system/lib64/libappms.z.so + + + true + false + 1 + + + \ No newline at end of file diff --git a/localCoverage/resident_service/config/ams/foundation.xml b/localCoverage/resident_service/config/ams/foundation.xml new file mode 100644 index 0000000..4397de7 --- /dev/null +++ b/localCoverage/resident_service/config/ams/foundation.xml @@ -0,0 +1,108 @@ + + + foundation + + /system/lib64/libcesfwk_services.z.so + libans.z.so + libbatteryservice.z.so + libdisplaymgrservice.z.so + libpowermgrservice.z.so + libtel_call_manager.z.so + libtel_state_registry.z.so + + + + + /system/lib64/libfms.z.so + /system/lib64/libbms.z.so + libwms.z.so + + + 401 + /system/lib64/libbms.z.so + 1301 + 60000 + true + false + 1 + CoreStartPhase + + + 4606 + libwms.z.so + + + true + false + 1 + CoreStartPhase + + + 4607 + libwms.z.so + 1301 + 60000 + true + false + 1 + CoreStartPhase + + + 3299 + /system/lib64/libcesfwk_services.z.so + + + true + false + 1 + + + 3203 + libans.z.so + 1301 + 5000 + true + false + 1 + + + 3302 + libbatteryservice.z.so + true + false + 1 + + + 3308 + libdisplaymgrservice.z.so + + + true + false + 1 + + + 4005 + libtel_call_manager.z.so + true + false + 1 + + + 4009 + libtel_state_registry.z.so + true + false + 1 + + + + 404 + /system/lib64/libfms.z.so + + + true + false + 1 + + \ No newline at end of file diff --git a/localCoverage/resident_service/config/bms/bms.xml b/localCoverage/resident_service/config/bms/bms.xml new file mode 100644 index 0000000..a26af2f --- /dev/null +++ b/localCoverage/resident_service/config/bms/bms.xml @@ -0,0 +1,20 @@ + + + foundation + + + /system/lib64/libbms.z.so + + + + 401 + /system/lib64/libbms.z.so + 1301 + 60000 + true + false + 1 + CoreStartPhase + + + \ No newline at end of file diff --git a/localCoverage/resident_service/config/bms/bms_cfg b/localCoverage/resident_service/config/bms/bms_cfg new file mode 100644 index 0000000..49de6d5 --- /dev/null +++ b/localCoverage/resident_service/config/bms/bms_cfg @@ -0,0 +1,50 @@ +{ + "jobs": [{ + "name": "services:bms", + "cmds": [ + "mkdir /data/service/el1/public/AbilityManagerService 0711 foundation system", + "mkdir /data/service/el1/bundle 0711 system system", + "mkdir /data/service/el2/base 0711 system system", + "mkdir /data/service/el2/database 0711 system system", + "mkdir /data/service/el1/public/notification 0711 foundation system", + "mkdir /data/service/el1/public/database 0711 ddms ddms", + "mkdir /data/service/el1/public/database/bundle_manager_service 02770 foundation ddms", + "mkdir /data/service/el1/public/database/notification_service 02770 foundation ddms", + "mkdir /data/service/el1/public/database/form_storage 02770 foundation ddms", + "chown radio system /sys/power/wake_lock", + "chown radio system /sys/power/wake_unlock", + "chmod 0664 /sys/power/wake_count" + ] + },{ + "name": "service:restartfoundation", + "cmds": [ + "reset appspawn", + "reset accountmgr" + ] + } + ], + "services": [{ + "name": "bms", + "path": ["/system/bin/sa_main", "/system/profile/bms.xml"], + "critical": [1, 1, 60], + "importance": -20, + "uid": "foundation", + "permission": [ + "ohos.permission.INPUT_MONITORING", + "ohos.permission.PERMISSION_USED_STATS", + "ohos.permission.DISTRIBUTED_DOFTBUS_CENTER", + "ohos.permission.DISTRIBUTE_DATASYNC", + "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", + "ohos.permission.INSTALL_BUNDLE", + "ohos.permission.MICROPHONE" + ], + "gid": ["system"], + "caps": ["SYS_PTRACE", "KILL"], + "jobs": { + "on-start": "services:bms", + "on-restart": "services:restartfoundation" + }, + "secon": "u:r:foundation:s0" + } + ] +} \ No newline at end of file diff --git a/localCoverage/resident_service/config/bms/foundation.xml b/localCoverage/resident_service/config/bms/foundation.xml new file mode 100644 index 0000000..a2d8122 --- /dev/null +++ b/localCoverage/resident_service/config/bms/foundation.xml @@ -0,0 +1,142 @@ + + + foundation + + /system/lib64/libcesfwk_services.z.so + libans.z.so + libbatteryservice.z.so + libdisplaymgrservice.z.so + libpowermgrservice.z.so + libtel_call_manager.z.so + libtel_state_registry.z.so + /system/lib64/libabilityms.z.so + /system/lib64/libdataobsms.z.so + /system/lib64/libupms.z.so + /system/lib64/libappms.z.so + /system/lib64/libfms.z.so + + libwms.z.so + + + + 4606 + libwms.z.so + + + true + false + 1 + CoreStartPhase + + + 4607 + libwms.z.so + + + true + false + 1 + CoreStartPhase + + + 3299 + /system/lib64/libcesfwk_services.z.so + + + true + false + 1 + + + 3203 + libans.z.so + 1301 + 3299 + 5000 + true + false + 1 + + + 3302 + libbatteryservice.z.so + true + false + 1 + + + 3308 + libdisplaymgrservice.z.so + + + true + false + 1 + + + 3301 + libpowermgrservice.z.so + true + false + 1 + + + 4005 + libtel_call_manager.z.so + true + false + 1 + + + 4009 + libtel_state_registry.z.so + true + false + 1 + + + 180 + /system/lib64/libabiliyms.z.so + + + true + false + 1 + + + 182 + /system/lib64/libdataobsms.z.so + + + true + false + 1 + + + 183 + /system/lib64/libupms.z.so + + + true + false + 1 + + + 501 + /system/lib64/libappms.z.so + + + true + false + 1 + + + 403 + /system/lib64/libfms.z.so + + + true + false + 1 + + \ No newline at end of file diff --git a/localCoverage/resident_service/config/call/call.cfg b/localCoverage/resident_service/config/call/call.cfg new file mode 100644 index 0000000..7120b82 --- /dev/null +++ b/localCoverage/resident_service/config/call/call.cfg @@ -0,0 +1,50 @@ +{ + "jobs": [{ + "name": "services:call", + "cmds": [ + "mkdir /data/service/el1/public/AbilityManagerService 0711 foundation system", + "mkdir /data/service/el1/bundle 0711 system system", + "mkdir /data/service/el2/base 0711 system system", + "mkdir /data/service/el2/database 0711 system system", + "mkdir /data/service/el1/public/notification 0711 foundation system", + "mkdir /data/service/el1/public/database 0711 ddms ddms", + "mkdir /data/service/el1/public/database/bundle_manager_service 02770 foundation ddms", + "mkdir /data/service/el1/public/database/notification_service 02770 foundation ddms", + "mkdir /data/service/el1/public/database/form_storage 02770 foundation ddms", + "chown radio system /sys/power/wake_lock", + "chown radio system /sys/power/wake_unlock", + "chmod 0664 /sys/power/wake_count" + ] + },{ + "name": "service:restartfoundation", + "cmds": [ + "reset appspawn", + "reset accountmgr" + ] + } + ], + "services": [{ + "name": "call", + "path": ["/system/bin/sa_main", "/system/profile/call.xml"], + "critical": [1, 1, 60], + "importance": -20, + "uid": "foundation", + "permission": [ + "ohos.permission.INPUT_MONITORING", + "ohos.permission.PERMISSION_USED_STATS", + "ohos.permission.DISTRIBUTED_DOFTBUS_CENTER", + "ohos.permission.DISTRIBUTE_DATASYNC", + "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", + "ohos.permission.INSTALL_BUNDLE", + "ohos.permission.MICROPHONE" + ], + "gid": ["system"], + "caps": ["SYS_PTRACE", "KILL"], + "jobs": { + "on-start": "services:call", + "on-restart": "services:restartfoundation" + }, + "secon": "u:r:foundation:s0" + } + ] +} \ No newline at end of file diff --git a/localCoverage/resident_service/config/call/call.xml b/localCoverage/resident_service/config/call/call.xml new file mode 100644 index 0000000..78853b6 --- /dev/null +++ b/localCoverage/resident_service/config/call/call.xml @@ -0,0 +1,18 @@ + + + foundation + + + libtel_call_manager.z.so + + + + + 4005 + libtel_call_manager.z.so + true + false + 1 + + + \ No newline at end of file diff --git a/localCoverage/resident_service/config/call/foundation.xml b/localCoverage/resident_service/config/call/foundation.xml new file mode 100644 index 0000000..5783d0a --- /dev/null +++ b/localCoverage/resident_service/config/call/foundation.xml @@ -0,0 +1,150 @@ + + + foundation + + /system/lib64/libcesfwk_services.z.so + libans.z.so + libbatteryservice.z.so + libdisplaymgrservice.z.so + libpowermgrservice.z.so + libtel_state_registry.z.so + /system/lib64/libabilityms.z.so + /system/lib64/libdataobsms.z.so + /system/lib64/libupms.z.so + /system/lib64/libappms.z.so + /system/lib64/libfms.z.so + /system/lib64/libbms.z.so + libwms.z.so + + + 401 + /system/lib64/libfms.z.so + 1301 + 60000 + true + false + 1 + CoreStartPhase + + + 4606 + libwms.z.so + + + true + false + 1 + CoreStartPhase + + + 4607 + libwms.z.so + + + true + false + 1 + CoreStartPhase + + + 3299 + /system/lib64/libcesfwk_services.z.so + + + true + false + 1 + + + 3203 + libans.z.so + 1301 + 3299 + 5000 + true + false + 1 + + + 3302 + libbatteryservice.z.so + true + false + 1 + + + 3308 + libdisplaymgrservice.z.so + + + true + false + 1 + + + 3301 + libpowermgrservice.z.so + true + false + 1 + + + 4005 + libtel_call_manager.z.so + true + false + 1 + + + 4009 + libtel_state_registry.z.so + true + false + 1 + + + 180 + /system/lib64/libabiliyms.z.so + + + true + false + 1 + + + 182 + /system/lib64/libdataobsms.z.so + + + true + false + 1 + + + 183 + /system/lib64/libupms.z.so + + + true + false + 1 + + + 501 + /system/lib64/libappms.z.so + + + true + false + 1 + + + 403 + /system/lib64/libfms.z.so + + + true + false + 1 + + \ No newline at end of file diff --git a/localCoverage/resident_service/config/fms/fms.cfg b/localCoverage/resident_service/config/fms/fms.cfg new file mode 100644 index 0000000..e2d9f98 --- /dev/null +++ b/localCoverage/resident_service/config/fms/fms.cfg @@ -0,0 +1,50 @@ +{ + "jobs": [{ + "name": "services:fms", + "cmds": [ + "mkdir /data/service/el1/public/AbilityManagerService 0711 foundation system", + "mkdir /data/service/el1/bundle 0711 system system", + "mkdir /data/service/el2/base 0711 system system", + "mkdir /data/service/el2/database 0711 system system", + "mkdir /data/service/el1/public/notification 0711 foundation system", + "mkdir /data/service/el1/public/database 0711 ddms ddms", + "mkdir /data/service/el1/public/database/bundle_manager_service 02770 foundation ddms", + "mkdir /data/service/el1/public/database/notification_service 02770 foundation ddms", + "mkdir /data/service/el1/public/database/form_storage 02770 foundation ddms", + "chown radio system /sys/power/wake_lock", + "chown radio system /sys/power/wake_unlock", + "chmod 0664 /sys/power/wake_count" + ] + },{ + "name": "service:restartfoundation", + "cmds": [ + "reset appspawn", + "reset accountmgr" + ] + } + ], + "services": [{ + "name": "fms", + "path": ["/system/bin/sa_main", "/system/profile/fms.xml"], + "critical": [1, 1, 60], + "importance": -20, + "uid": "foundation", + "permission": [ + "ohos.permission.INPUT_MONITORING", + "ohos.permission.PERMISSION_USED_STATS", + "ohos.permission.DISTRIBUTED_DOFTBUS_CENTER", + "ohos.permission.DISTRIBUTE_DATASYNC", + "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", + "ohos.permission.INSTALL_BUNDLE", + "ohos.permission.MICROPHONE" + ], + "gid": ["system"], + "caps": ["SYS_PTRACE", "KILL"], + "jobs": { + "on-start": "services:fms", + "on-restart": "services:restartfoundation" + }, + "secon": "u:r:foundation:s0" + } + ] +} \ No newline at end of file diff --git a/localCoverage/resident_service/config/fms/fms.xml b/localCoverage/resident_service/config/fms/fms.xml new file mode 100644 index 0000000..647c234 --- /dev/null +++ b/localCoverage/resident_service/config/fms/fms.xml @@ -0,0 +1,19 @@ + + + foundation + + + /system/lib64/libbms.z.so + + + + + 403 + /system/lib64/libfms.z.so + + true + false + 1 + + + \ No newline at end of file diff --git a/localCoverage/resident_service/config/fms/foundation.xml b/localCoverage/resident_service/config/fms/foundation.xml new file mode 100644 index 0000000..7c7ade1 --- /dev/null +++ b/localCoverage/resident_service/config/fms/foundation.xml @@ -0,0 +1,142 @@ + + + foundation + + /system/lib64/libcesfwk_services.z.so + libans.z.so + libbatteryservice.z.so + libdisplaymgrservice.z.so + libpowermgrservice.z.so + libtel_call_manager.z.so + libtel_state_registry.z.so + /system/lib64/libabilityms.z.so + /system/lib64/libdataobsms.z.so + /system/lib64/libupms.z.so + /system/lib64/libappms.z.so + /system/lib64/libbms.z.so + + libwms.z.so + + + 401 + /system/lib64/libbms.z.so + 1301 + 60000 + true + false + 1 + CoreStartPhase + + + 4606 + libwms.z.so + + + true + false + 1 + CoreStartPhase + + + 4607 + libwms.z.so + + + true + false + 1 + CoreStartPhase + + + 3299 + /system/lib64/libcesfwk_services.z.so + + + true + false + 1 + + + 3203 + libans.z.so + 1301 + 3299 + 5000 + true + false + 1 + + + 3302 + libbatteryservice.z.so + true + false + 1 + + + 3308 + libdisplaymgrservice.z.so + + + true + false + 1 + + + 3301 + libpowermgrservice.z.so + true + false + 1 + + + 4005 + libtel_call_manager.z.so + true + false + 1 + + + 4009 + libtel_state_registry.z.so + true + false + 1 + + + 180 + /system/lib64/libabiliyms.z.so + + + true + false + 1 + + + 182 + /system/lib64/libdataobsms.z.so + + + true + false + 1 + + + 183 + /system/lib64/libupms.z.so + + + true + false + 1 + + + 501 + /system/lib64/libappms.z.so + + + true + false + 1 + + \ No newline at end of file diff --git a/localCoverage/resident_service/config/notification/foundation.xml b/localCoverage/resident_service/config/notification/foundation.xml new file mode 100644 index 0000000..37c63c6 --- /dev/null +++ b/localCoverage/resident_service/config/notification/foundation.xml @@ -0,0 +1,140 @@ + + + foundation + + libbatteryservice.z.so + libdisplaymgrservice.z.so + libpowermgrservice.z.so + libtel_call_manager.z.so + libtel_state_registry.z.so + /system/lib64/libabilityms.z.so + /system/lib64/libdataobsms.z.so + /system/lib64/libupms.z.so + /system/lib64/libappms.z.so + /system/lib64/libfms.z.so + /system/lib64/libbms.z.so + libwms.z.so + + + 401 + /system/lib64/libbms.z.so + 1301 + 60000 + true + false + 1 + CoreStartPhase + + + 4606 + libwms.z.so + + + true + false + 1 + CoreStartPhase + + + 4607 + libwms.z.so + + + true + false + 1 + CoreStartPhase + + + 3203 + libans.z.so + 1301 + 3299 + 5000 + true + false + 1 + + + 3302 + libbatteryservice.z.so + true + false + 1 + + + 3308 + libdisplaymgrservice.z.so + + + true + false + 1 + + + 3301 + libpowermgrservice.z.so + true + false + 1 + + + 4005 + libtel_call_manager.z.so + true + false + 1 + + + 4009 + libtel_state_registry.z.so + true + false + 1 + + + 180 + /system/lib64/libabiliyms.z.so + + + true + false + 1 + + + 182 + /system/lib64/libdataobsms.z.so + + + true + false + 1 + + + 183 + /system/lib64/libupms.z.so + + + true + false + 1 + + + 501 + /system/lib64/libappms.z.so + + + true + false + 1 + + + 403 + /system/lib64/libfms.z.so + + + true + false + 1 + + \ No newline at end of file diff --git a/localCoverage/resident_service/config/notification/notification.xml b/localCoverage/resident_service/config/notification/notification.xml new file mode 100644 index 0000000..d22e44b --- /dev/null +++ b/localCoverage/resident_service/config/notification/notification.xml @@ -0,0 +1,30 @@ + + + foundation + + + /system/lib64/libcesfwk_services.z.so + libans.z.so + + + + 3299 + /system/lib64/libcesfwk_services.z.so + + + true + false + 1 + + + 3203 + libans.z.so + 1301 + 3299 + 5000 + true + false + 1 + + + \ No newline at end of file diff --git a/localCoverage/resident_service/config/notification/notificatoin.cfg b/localCoverage/resident_service/config/notification/notificatoin.cfg new file mode 100644 index 0000000..27d93e6 --- /dev/null +++ b/localCoverage/resident_service/config/notification/notificatoin.cfg @@ -0,0 +1,50 @@ +{ + "jobs": [{ + "name": "services:notification", + "cmds": [ + "mkdir /data/service/el1/public/AbilityManagerService 0711 foundation system", + "mkdir /data/service/el1/bundle 0711 system system", + "mkdir /data/service/el2/base 0711 system system", + "mkdir /data/service/el2/database 0711 system system", + "mkdir /data/service/el1/public/notification 0711 foundation system", + "mkdir /data/service/el1/public/database 0711 ddms ddms", + "mkdir /data/service/el1/public/database/bundle_manager_service 02770 foundation ddms", + "mkdir /data/service/el1/public/database/notification_service 02770 foundation ddms", + "mkdir /data/service/el1/public/database/form_storage 02770 foundation ddms", + "chown radio system /sys/power/wake_lock", + "chown radio system /sys/power/wake_unlock", + "chmod 0664 /sys/power/wake_count" + ] + },{ + "name": "service:restartfoundation", + "cmds": [ + "reset appspawn", + "reset accountmgr" + ] + } + ], + "services": [{ + "name": "notification", + "path": ["/system/bin/sa_main", "/system/profile/notification.xml"], + "critical": [1, 1, 60], + "importance": -20, + "uid": "foundation", + "permission": [ + "ohos.permission.INPUT_MONITORING", + "ohos.permission.PERMISSION_USED_STATS", + "ohos.permission.DISTRIBUTED_DOFTBUS_CENTER", + "ohos.permission.DISTRIBUTE_DATASYNC", + "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", + "ohos.permission.INSTALL_BUNDLE", + "ohos.permission.MICROPHONE" + ], + "gid": ["system"], + "caps": ["SYS_PTRACE", "KILL"], + "jobs": { + "on-start": "services:notification", + "on-restart": "services:restartfoundation" + }, + "secon": "u:r:foundation:s0" + } + ] +} \ No newline at end of file diff --git a/localCoverage/resident_service/config/power/foundation.xml b/localCoverage/resident_service/config/power/foundation.xml new file mode 100644 index 0000000..b2a9a24 --- /dev/null +++ b/localCoverage/resident_service/config/power/foundation.xml @@ -0,0 +1,125 @@ + + + foundation + + /system/lib64/libcesfwk_services.z.so + libans.z.so + libtel_call_manager.z.so + libtel_state_registry.z.so + /system/lib64/libabilityms.z.so + /system/lib64/libdataobsms.z.so + /system/lib64/libupms.z.so + /system/lib64/libappms.z.so + /system/lib64/libfms.z.so + /system/lib64/libbms.z.so + libwms.z.so + + + 401 + /system/lib64/libbms.z.so + 1301 + 60000 + true + false + 1 + CoreStartPhase + + + 4606 + libwms.z.so + + + true + false + 1 + CoreStartPhase + + + 4607 + libwms.z.so + + + true + false + 1 + CoreStartPhase + + + 3299 + /system/lib64/libcesfwk_services.z.so + + + true + false + 1 + + + 3203 + libans.z.so + 1301 + 3299 + 5000 + true + false + 1 + + + 4005 + libtel_call_manager.z.so + true + false + 1 + + + 4009 + libtel_state_registry.z.so + true + false + 1 + + + 180 + /system/lib64/libabiliyms.z.so + + + true + false + 1 + + + 182 + /system/lib64/libdataobsms.z.so + + + true + false + 1 + + + 183 + /system/lib64/libupms.z.so + + + true + false + 1 + + + 501 + /system/lib64/libappms.z.so + + + true + false + 1 + + + 403 + /system/lib64/libfms.z.so + + + true + false + 1 + + \ No newline at end of file diff --git a/localCoverage/resident_service/config/power/power.cfg b/localCoverage/resident_service/config/power/power.cfg new file mode 100644 index 0000000..50c6a57 --- /dev/null +++ b/localCoverage/resident_service/config/power/power.cfg @@ -0,0 +1,50 @@ +{ + "jobs": [{ + "name": "services:power", + "cmds": [ + "mkdir /data/service/el1/public/AbilityManagerService 0711 foundation system", + "mkdir /data/service/el1/bundle 0711 system system", + "mkdir /data/service/el2/base 0711 system system", + "mkdir /data/service/el2/database 0711 system system", + "mkdir /data/service/el1/public/notification 0711 foundation system", + "mkdir /data/service/el1/public/database 0711 ddms ddms", + "mkdir /data/service/el1/public/database/bundle_manager_service 02770 foundation ddms", + "mkdir /data/service/el1/public/database/notification_service 02770 foundation ddms", + "mkdir /data/service/el1/public/database/form_storage 02770 foundation ddms", + "chown radio system /sys/power/wake_lock", + "chown radio system /sys/power/wake_unlock", + "chmod 0664 /sys/power/wake_count" + ] + },{ + "name": "service:restartfoundation", + "cmds": [ + "reset appspawn", + "reset accountmgr" + ] + } + ], + "services": [{ + "name": "power", + "path": ["/system/bin/sa_main", "/system/profile/power.xml"], + "critical": [1, 1, 60], + "importance": -20, + "uid": "foundation", + "permission": [ + "ohos.permission.INPUT_MONITORING", + "ohos.permission.PERMISSION_USED_STATS", + "ohos.permission.DISTRIBUTED_DOFTBUS_CENTER", + "ohos.permission.DISTRIBUTE_DATASYNC", + "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", + "ohos.permission.INSTALL_BUNDLE", + "ohos.permission.MICROPHONE" + ], + "gid": ["system"], + "caps": ["SYS_PTRACE", "KILL"], + "jobs": { + "on-start": "services:power", + "on-restart": "services:restartfoundation" + }, + "secon": "u:r:foundation:s0" + } + ] +} \ No newline at end of file diff --git a/localCoverage/resident_service/config/power/power.xml b/localCoverage/resident_service/config/power/power.xml new file mode 100644 index 0000000..f5187c9 --- /dev/null +++ b/localCoverage/resident_service/config/power/power.xml @@ -0,0 +1,50 @@ + + + foundation + + + libbatteryservice.z.so + libdisplaymgrservice.z.so + libpowermgrservice.z.so + libthermalservice.z.so + libbatrterystats_service.z.so + + + + + 3302 + libbatteryservice.z.so + true + false + 1 + + + 3308 + libdisplaymgrservice.z.so + true + false + 1 + + + 3301 + libpowermgrservice.z.so + true + false + 1 + + + 3303 + libthermalservice.z.so + true + false + 1 + + + 3304 + libbatrterystats_service.z.so + true + false + 1 + + + \ No newline at end of file diff --git a/localCoverage/resident_service/config/state/foundation.xml b/localCoverage/resident_service/config/state/foundation.xml new file mode 100644 index 0000000..7153d28 --- /dev/null +++ b/localCoverage/resident_service/config/state/foundation.xml @@ -0,0 +1,143 @@ + + + foundation + + /system/lib64/libcesfwk_services.z.so + libans.z.so + libbatteryservice.z.so + libdisplaymgrservice.z.so + libpowermgrservice.z.so + libtel_call_manager.z.so + /system/lib64/libabilityms.z.so + /system/lib64/libdataobsms.z.so + /system/lib64/libupms.z.so + /system/lib64/libappms.z.so + /system/lib64/libfms.z.so + /system/lib64/libbms.z.so + libwms.z.so + + + 401 + /system/lib64/libbms.z.so + 1301 + 60000 + true + false + 1 + CoreStartPhase + + + 4606 + libwms.z.so + + + true + false + 1 + CoreStartPhase + + + 4607 + libwms.z.so + + + true + false + 1 + CoreStartPhase + + + 3299 + /system/lib64/libcesfwk_services.z.so + + + true + false + 1 + + + 3203 + libans.z.so + 1301 + 3299 + 5000 + true + false + 1 + + + 3302 + libbatteryservice.z.so + true + false + 1 + + + 3308 + libdisplaymgrservice.z.so + + + true + false + 1 + + + 3301 + libpowermgrservice.z.so + true + false + 1 + + + 4005 + libtel_call_manager.z.so + true + false + 1 + + + 180 + /system/lib64/libabiliyms.z.so + + + true + false + 1 + + + 182 + /system/lib64/libdataobsms.z.so + + + true + false + 1 + + + 183 + /system/lib64/libupms.z.so + + + true + false + 1 + + + 501 + /system/lib64/libappms.z.so + + + true + false + 1 + + + 403 + /system/lib64/libfms.z.so + + + true + false + 1 + + \ No newline at end of file diff --git a/localCoverage/resident_service/config/state/state.cfg b/localCoverage/resident_service/config/state/state.cfg new file mode 100644 index 0000000..983a383 --- /dev/null +++ b/localCoverage/resident_service/config/state/state.cfg @@ -0,0 +1,50 @@ +{ + "jobs": [{ + "name": "services:state", + "cmds": [ + "mkdir /data/service/el1/public/AbilityManagerService 0711 foundation system", + "mkdir /data/service/el1/bundle 0711 system system", + "mkdir /data/service/el2/base 0711 system system", + "mkdir /data/service/el2/database 0711 system system", + "mkdir /data/service/el1/public/notification 0711 foundation system", + "mkdir /data/service/el1/public/database 0711 ddms ddms", + "mkdir /data/service/el1/public/database/bundle_manager_service 02770 foundation ddms", + "mkdir /data/service/el1/public/database/notification_service 02770 foundation ddms", + "mkdir /data/service/el1/public/database/form_storage 02770 foundation ddms", + "chown radio system /sys/power/wake_lock", + "chown radio system /sys/power/wake_unlock", + "chmod 0664 /sys/power/wake_count" + ] + },{ + "name": "service:restartfoundation", + "cmds": [ + "reset appspawn", + "reset accountmgr" + ] + } + ], + "services": [{ + "name": "state", + "path": ["/system/bin/sa_main", "/system/profile/state.xml"], + "critical": [1, 1, 60], + "importance": -20, + "uid": "foundation", + "permission": [ + "ohos.permission.INPUT_MONITORING", + "ohos.permission.PERMISSION_USED_STATS", + "ohos.permission.DISTRIBUTED_DOFTBUS_CENTER", + "ohos.permission.DISTRIBUTE_DATASYNC", + "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", + "ohos.permission.INSTALL_BUNDLE", + "ohos.permission.MICROPHONE" + ], + "gid": ["system"], + "caps": ["SYS_PTRACE", "KILL"], + "jobs": { + "on-start": "services:state", + "on-restart": "services:restartfoundation" + }, + "secon": "u:r:foundation:s0" + } + ] +} \ No newline at end of file diff --git a/localCoverage/resident_service/config/state/state.xml b/localCoverage/resident_service/config/state/state.xml new file mode 100644 index 0000000..5538a14 --- /dev/null +++ b/localCoverage/resident_service/config/state/state.xml @@ -0,0 +1,18 @@ + + + foundation + + + libtel_state_registry.z.so + + + + + 4009 + libtel_state_registry.z.so + true + false + 1 + + + \ No newline at end of file diff --git a/localCoverage/resident_service/config/wms/foundation.xml b/localCoverage/resident_service/config/wms/foundation.xml new file mode 100644 index 0000000..2ebd10a --- /dev/null +++ b/localCoverage/resident_service/config/wms/foundation.xml @@ -0,0 +1,142 @@ + + + foundation + + /system/lib64/libcesfwk_services.z.so + libans.z.so + libbatteryservice.z.so + libdisplaymgrservice.z.so + libpowermgrservice.z.so + libtel_call_manager.z.so + libtel_state_registry.z.so + /system/lib64/libabilityms.z.so + /system/lib64/libdataobsms.z.so + /system/lib64/libupms.z.so + /system/lib64/libappms.z.so + /system/lib64/libfms.z.so + /system/lib64/libbms.z.so + + + + + 401 + /system/lib64/libbms.z.so + 1301 + 60000 + true + false + 1 + CoreStartPhase + + + 4606 + libwms.z.so + + + true + false + 1 + CoreStartPhase + + + 3299 + /system/lib64/libcesfwk_services.z.so + + + true + false + 1 + + + 3203 + libans.z.so + 1301 + 3299 + 5000 + true + false + 1 + + + 3302 + libbatteryservice.z.so + true + false + 1 + + + 3308 + libdisplaymgrservice.z.so + + + true + false + 1 + + + 3301 + libpowermgrservice.z.so + true + false + 1 + + + 4005 + libtel_call_manager.z.so + true + false + 1 + + + 4009 + libtel_state_registry.z.so + true + false + 1 + + + 180 + /system/lib64/libabiliyms.z.so + + + true + false + 1 + + + 182 + /system/lib64/libdataobsms.z.so + + + true + false + 1 + + + 183 + /system/lib64/libupms.z.so + + + true + false + 1 + + + 501 + /system/lib64/libappms.z.so + + + true + false + 1 + + + 403 + /system/lib64/libfms.z.so + + + true + false + 1 + + \ No newline at end of file diff --git a/localCoverage/resident_service/config/wms/wms.cfg b/localCoverage/resident_service/config/wms/wms.cfg new file mode 100644 index 0000000..f8ef584 --- /dev/null +++ b/localCoverage/resident_service/config/wms/wms.cfg @@ -0,0 +1,50 @@ +{ + "jobs": [{ + "name": "services:wms", + "cmds": [ + "mkdir /data/service/el1/public/AbilityManagerService 0711 foundation system", + "mkdir /data/service/el1/bundle 0711 system system", + "mkdir /data/service/el2/base 0711 system system", + "mkdir /data/service/el2/database 0711 system system", + "mkdir /data/service/el1/public/notification 0711 foundation system", + "mkdir /data/service/el1/public/database 0711 ddms ddms", + "mkdir /data/service/el1/public/database/bundle_manager_service 02770 foundation ddms", + "mkdir /data/service/el1/public/database/notification_service 02770 foundation ddms", + "mkdir /data/service/el1/public/database/form_storage 02770 foundation ddms", + "chown radio system /sys/power/wake_lock", + "chown radio system /sys/power/wake_unlock", + "chmod 0664 /sys/power/wake_count" + ] + },{ + "name": "service:restartfoundation", + "cmds": [ + "reset appspawn", + "reset accountmgr" + ] + } + ], + "services": [{ + "name": "wms", + "path": ["/system/bin/sa_main", "/system/profile/wms.xml"], + "critical": [1, 1, 60], + "importance": -20, + "uid": "foundation", + "permission": [ + "ohos.permission.INPUT_MONITORING", + "ohos.permission.PERMISSION_USED_STATS", + "ohos.permission.DISTRIBUTED_DOFTBUS_CENTER", + "ohos.permission.DISTRIBUTE_DATASYNC", + "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", + "ohos.permission.INSTALL_BUNDLE", + "ohos.permission.MICROPHONE" + ], + "gid": ["system"], + "caps": ["SYS_PTRACE", "KILL"], + "jobs": { + "on-start": "services:wms", + "on-restart": "services:restartfoundation" + }, + "secon": "u:r:foundation:s0" + } + ] +} \ No newline at end of file diff --git a/localCoverage/resident_service/config/wms/wms.xml b/localCoverage/resident_service/config/wms/wms.xml new file mode 100644 index 0000000..94265fa --- /dev/null +++ b/localCoverage/resident_service/config/wms/wms.xml @@ -0,0 +1,31 @@ + + + foundation + + + libwms.z.so + + + + + 4606 + libwms.z.so + + + true + false + 1 + CoreStartPhase + + + 4607 + libwms.z.so + + + true + false + 1 + CoreStartPhase + + + \ No newline at end of file diff --git a/localCoverage/resident_service/init_gcov.py b/localCoverage/resident_service/init_gcov.py new file mode 100644 index 0000000..604ba41 --- /dev/null +++ b/localCoverage/resident_service/init_gcov.py @@ -0,0 +1,250 @@ +# coding=utf-8 + +# +# Copyright (c) 2020-2023 Huawei Device Co., Ltd. +# 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. +# + +import os +import subprocess +import json +import sys +import time + +from public_method import get_server_dict, get_config_ip, get_sn_list + + +def modify_init_file(developer_path, device_sn, device_ip): + """ + /etc/init.cfg文件添加cmds + """ + hdc_str = "hdc -s %s:8710 -t %s" % (device_ip, device_sn) + recv_path = os.path.join(developer_path, "localCoverage/resident_service/resources") + print() + subprocess.Popen(hdc_str + "file recv /etc/init.cfg %s" % recv_path, + shell=True).communicate() + recv_restores_path = os.path.join(recv_path, "restores_environment") + if not os.path.exists(recv_restores_path): + os.mkdir(recv_restores_path) + recv_restores_name = os.path.join(recv_restores_path, "init.cfg") + if not os.path.exists(recv_restores_name): + subprocess.Popen(hdc_str + "file recv /etc/init.cfg %s" % recv_restores_path, + shell=True).communicate() + else: + print("INFO: file exit", recv_restores_name) + + cfg_file_path = os.path.join(recv_path, "init.cfg") + if os.path.exists(cfg_file_path): + with open(cfg_file_path, "r") as fp: + json_data = json.load(fp) + + for jobs_list in json_data["jobs"]: + if jobs_list["name"] == "init": + if jobs_list["cmds"][-1] != "export GCOV_FETCH_METHOD FM_SIGNA": + jobs_list["cmds"].append("mkdir /data/gcov 0777 system system") + jobs_list["cmds"].append("export GCOV_PREFIX /data/gcov") + jobs_list["cmds"].append("export GCOV_FETCH_METHOD FM_SIGNA") + else: + return + json_str = json.dumps(json_data, indent=2) + with open(cfg_file_path, "w") as json_file: + json_file.write(json_str) + else: + print("init.cfg file not exists") + return + print(hdc_str + "shell mount -o rw,remount / > /dev/null 2&1") + subprocess.Popen(hdc_str + "shell mount -o rw,remount / > /dev/null 2&1", + shell=True).communicate() + print(hdc_str + "file send %s %s" % (cfg_file_path, "/etc/")) + subprocess.Popen(hdc_str + "file send %s %s" % (cfg_file_path, "/etc/"), + shell=True).communicate() + subprocess.Popen(hdc_str + "shell param set persist.appspawn.client.timeout 120 > /dev/null 2>&1", + shell=True).communicate() + print(hdc_str + "shell reboot") + subprocess.Popen(hdc_str + "shell reboot > /dev/null 2>&1", shell=True).communicate() + return + + +def modify_faultloggerd_file(developer_path, device_sn, device_ip): + hdc_str = "hdc -s %s:8710 -t %s" % (device_ip, device_sn) + so_path = os.path.join( + developer_path, "localCoverage/resident_service/resources/libgcov_dump_sign.z.so") + _, system_lib = subprocess.getstatusoutput( + hdc_str + "shell find /system/lib -name libgcov_dump_sign.z.so") + _, system_lib64 = subprocess.getstatusoutput( + hdc_str + "shell find /system/lib64 -name libgcov_dump_sign.z.so") + _, enforce = subprocess.getstatusoutput(hdc_str + "shell getenforce") + if_reboot = False + if not system_lib or not system_lib64 or enforce != "Permissive": + if_reboot = True + print(hdc_str + "shell mount -o rw,remount /") + subprocess.Popen(hdc_str + "shell mount -o rw,remount /", + shell=True).communicate() + print(hdc_str + "file send %s %s" % (so_path, "/system/lib/")) + subprocess.Popen(hdc_str + "file send %s %s" % (so_path, "/system/lib/"), + shell=True).communicate() + subprocess.Popen(hdc_str + "file send %s %s" % (so_path, "/system/lib64/"), + shell=True).communicate() + subprocess.Popen(hdc_str + "shell sed -i 's/enforcing/permissive/g' /system/etc.selinux/config", + shell=True).communicate() + + recv_path = os.path.join(developer_path, "localCoverage/resident_service/resources") + print(hdc_str + "file recv /system/etc/init/faultloggerd.cfg %s" % recv_path) + subprocess.Popen(hdc_str + "file recv /system/etc/init/faultloggerd.cfg %s" % recv_path, + shell=True).communicate() + + cfg_file_path = os.path.join(recv_path, "faultloggerd.cfg") + if os.path.exists(cfg_file_path): + with open(cfg_file_path, "r") as fp: + json_data = json.load(fp) + if len(json_data["jobs"]) == 1 and json_data["jobs"][0]["name"] != "pre-init": + if_reboot = True + json_data["jobs"].insert(0, { + "name": "pre-init", + "cmds": [ + "export LD_PRELOAD libgcov_dump_sign.z.so" + ] + }) + json_str = json.dumps(json_data, indent=4) + with open(cfg_file_path, "w") as json_file: + json_file.write(json_str) + print(hdc_str + "file send %s %s" % (cfg_file_path, "/system/etc/init/")) + subprocess.Popen(hdc_str + "file send %s %s" % (cfg_file_path, "/system/etc/init/"), + shell=True).communicate() + else: + print("faultloggerd.cfg file not exists.") + if if_reboot: + print(hdc_str + "shell reboot") + subprocess.Popen(hdc_str + "shell reboot", shell=True).communicate() + + +def split_foundation_services(developer_path, device_sn, device_ip, + system_info_dict, home_path): + """ + foundation.xml、XXX.xml文件推送到 /system/profile + XXX.cfg文件推送到/etc/init/ + reboot设备,可以将服务从foundation中拆分出来,成为一个独立服务进程 + """ + resident_service_path = os.path.join( + developer_path, "localCoverage/resident_service") + config_path = os.path.join(resident_service_path, "config") + restores_path = os.path.join( + resident_service_path, "resources", "restores_environment") + xml_restores_path = os.path.join(restores_path, "foundation.xml") + + hdc_str = "hdc -s %s:8710 -t %s" % (device_ip, device_sn) + if not os.path.exists(xml_restores_path): + print(hdc_str + "file recv /system/profile/foundation.xml %s" % restores_path) + subprocess.Popen(hdc_str + "file recv /system/profile/foundation.xml %s" % restores_path, + shell=True).communicate() + + # 推送xml数据 + flag = False + for key, value_list in system_info_dict.items(): + for process_str in value_list: + foundation_xml_path = os.path.join(config_path, process_str, "foundation.xml") + print(hdc_str + "shell mount -o rw,remount /") + subprocess.Popen(hdc_str + "shell mount -o rw,remount /", + shell=True).communicate() + if os.path.exists(foundation_xml_path): + flag = True + subprocess.Popen(hdc_str + "shell rm -rf /lost+found", shell=True).communicate() + subprocess.Popen(hdc_str + "shell rm -rf /log", shell=True).communicate() + subprocess.Popen(hdc_str + "shell rm -rf %s" % home_path, shell=True).communicate() + print(hdc_str + "file send %s %s" % (foundation_xml_path, "/system/profile/")) + subprocess.Popen(hdc_str + "file send %s %s" % ( + foundation_xml_path, "/system/profile/"), shell=True).communicate() + + process_xml_path = os.path.join(config_path, process_str, process_str + ".xml") + print(hdc_str + "file send %s %s" % (process_xml_path, "/system/profile/")) + subprocess.Popen(hdc_str + "file send %s %s" % ( + process_xml_path, "/system/profile/"), shell=True).communicate() + + process_cfg_path = os.path.join(config_path, process_str, process_str + ".cfg") + print(hdc_str + "file send %s %s" % (process_cfg_path, "/system/init/")) + subprocess.Popen(hdc_str + "file send %s %s" % ( + process_cfg_path, "/system/init/"), shell=True).communicate() + if flag: + print(hdc_str + "shell reboot") + subprocess.Popen(hdc_str + "shell reboot", shell=True).communicate() + while True: + after_sn_list = get_sn_list("hdc -s" + device_ip + ":8710 list targets") + time.sleep(10) + if device_sn in after_sn_list: + break + + subprocess.Popen(hdc_str + "shell mount -o rw,remount /", + shell=True).communicate() + subprocess.Popen(hdc_str + 'shell "rm -rf %s"' % ("/data/gcov" + home_path), + shell=True).communicate() + subprocess.Popen(hdc_str + 'shell "chmod 777 /data/gcov - R"', shell=True).communicate() + subprocess.Popen(hdc_str + "shell mount -o rw,remount /", shell=True).communicate() + return + + +def modify_init_cfg(developer_path, device_ip, device_sn_list): + if device_ip and len(device_sn_list) >= 1: + before_sn_list = device_sn_list + for device_sn_str in device_sn_list: + modify_init_file(developer_path, device_sn_str, device_ip) + + while True: + after_sn_list = get_sn_list("hdc -s %s:8710 list targets" % device_ip) + time.sleep(10) + if after_sn_list == before_sn_list: + break + else: + print("user_config.xml device ip not config") + + +def modify_faultloggerd_cfg(developer_path, device_ip, device_sn_list): + if device_ip and len(device_sn_list) >= 1: + before_sn_list = device_sn_list + for device_sn_str in device_sn_list: + modify_faultloggerd_file(developer_path, device_sn_str, device_ip) + + while True: + after_sn_list = get_sn_list("hdc -s %s:8710 list targets" % device_ip) + time.sleep(10) + if after_sn_list == before_sn_list: + break + else: + print("user_config.xml device ip not config") + + +if __name__ == '__main__': + command_args = sys.argv[1] + command_str = command_args.split("command_str=")[1].replace(",", " ") + current_path = os.getcwd() + root_path = current_path.split("/test/testfwk/developer_test")[0] + developer_path = os.path.join( + current_path.split("/developer_test/src")[0], "developer_test") + home_path = '/'.join(root_path.split("/")[:3]) + + # 获取user_config中的device ip + device_ip = get_config_ip(os.path.join(developer_path, "config/user_config.xml")) + device_sn_list = get_sn_list("hdc -s %s" % device_ip + ":8710 list targets") + + # 修改设备init.cfg文件 + modify_init_cfg(developer_path, device_ip, device_sn_list) + # 修改faultloggerd.cfg文件 + modify_faultloggerd_cfg(developer_path, device_ip, device_sn_list) + + # 获取子系统部件与服务的关系 + system_info_dict, services_component_dict, component_gcda_dict = get_server_dict(command_str) + + # 推送服务对应的xml文件 + if device_ip and len(system_info_dict.keys()) >= 1: + for device_sn_str in device_sn_list: + split_foundation_services(developer_path, device_sn_str, + device_ip, system_info_dict, home_path) diff --git a/localCoverage/resident_service/public_method.py b/localCoverage/resident_service/public_method.py new file mode 100644 index 0000000..352cfef --- /dev/null +++ b/localCoverage/resident_service/public_method.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 +# coding=utf-8 + +# +# Copyright (c) 2020-2023 Huawei Device Co., Ltd. +# 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. +# + +import os +import subprocess +import json +import xml.etree.ElementTree as ET + + +def get_config_ip(filepath): + ip_config = "" + try: + data_dic = {} + if os.path.exists(filepath): + tree = ET.parse(filepath) + root = tree.getroot() + for node in root.findall("environment/device"): + if node.attrib["type"] != "usb-hdc": + continue + for sub in node: + data_dic[sub.tag] = sub.text if sub.text else "" + ip_config = data_dic.get("ip", "") + except ET.ParseError as xml_exception: + print("occurs exception:{}".format(xml_exception.agrs)) + + return ip_config + + +def get_sn_list(command): + device_sn_list = [] + # 执行查询设备sn号命令并获取执行结果 + proc = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + strout = proc.stdout.read() + if isinstance(strout, bytes): + strout = strout.decode("utf-8", "ignore") + for line in strout.split("\n"): + line = line.strip().replace('\t', ' ') + if line != "": + device_sn_list.append(line) + + return device_sn_list + + +def get_all_part_service(): + current_path = os.getcwd() + developer_path = current_path.split("/test/testfwk/developer_test")[0] + system_part_service_path = os.path.join( + developer_path, "developer_test/localCoverage/resident_service/system_part_service.json") + if os.path.exists(system_part_service_path): + with open(system_part_service_path, "r") as system_text: + system_text_json = json.load(system_text) + system_info_dict = system_text_json["system_info_dict"] + services_component_dict = system_text_json["service_component_dict"] + component_gcda_dict = system_text_json["component_gcda_dict"] + return system_info_dict, services_component_dict, component_gcda_dict + else: + print("%s not exists.", system_part_service_path) + + +def get_system_dict_to_server_name(server_name: str, system_info_dict): + for system, server_list in system_info_dict.ites(): + if server_name in server_list: + system_info_dict_after = { + system: [server_name] + } + return system_info_dict_after + + +def get_server_dict(command): + system_info_dict, services_component_dict, component_gcda_dict = get_all_part_service() + system_info_dict_after = {} + services_component_dict_after = {} + component_gcda_dict_after = {} + server_name = None + if " -ts " in command: + _, testsuite = command.split(" -ts ") + if testsuite in services_component_dict.get("dinput"): + services_component_dict_after = { + "dinput": [testsuite] + } + server_name = "dinput" + elif testsuite in services_component_dict.get("softbus_server"): + services_component_dict_after = { + "softbus_server": [testsuite] + } + server_name = "softbus_server" + if server_name: + system_info_dict_after = get_system_dict_to_server_name(server_name, system_info_dict) + component_gcda_dict_after = { + server_name: component_gcda_dict.get(server_name) + } + elif " -tp " in command: + component_name = command.split(" -tp ")[-1].split(" ")[0] + for server, component_list in services_component_dict.items(): + if component_name in component_list: + if server in ["dinput", "softbus_server"]: + break + services_component_dict_after = { + server: [component_name] + } + server_name = server + break + if server_name: + system_info_dict_after = get_system_dict_to_server_name(server_name, system_info_dict) + component_gcda_dict_after = { + server_name: component_gcda_dict.get(server_name) + } + elif " ss " in command: + system_name = command.split(" -ss ")[-1].split(" ")[0] + server_list = system_info_dict.get(system_name) + system_info_dict_after = { + system_name: server_list + } + for server_name in server_list: + services_component_dict_after.update({ + server_name: services_component_dict.get(server_name) + }) + component_gcda_dict_after.update({ + server_name: component_gcda_dict.get(server_name) + }) + return system_info_dict_after, services_component_dict_after, component_gcda_dict_after diff --git a/localCoverage/resident_service/pull_service_gcda.py b/localCoverage/resident_service/pull_service_gcda.py new file mode 100644 index 0000000..7a005cf --- /dev/null +++ b/localCoverage/resident_service/pull_service_gcda.py @@ -0,0 +1,128 @@ +# coding=utf-8 + +# +# Copyright (c) 2020-2023 Huawei Device Co., Ltd. +# 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. +# + +import os +import subprocess +import sys + + +from public_method import get_server_dict, get_config_ip, get_sn_list + + +def attach_pid(device_ip, device_sn, process_str, component_gcda_dict, + developer_path, resident_service_path, services_str): + """ + 1. 在设备里ps -ef | grep SERVICE 获取进程号 + 2. kill - '信号' pid + """ + hdc_str = "hdc -s %s:8710 -t %s" % (device_ip, device_sn) + print(hdc_str + "shell chmod 777 /data/gcov -R") + subprocess.Popen(hdc_str + "shell chmod 777 /data/gcov -R", shell=True).communicate() + subprocess.Popen(hdc_str + "shell mount -o rw,remount /", shell=True).communicate() + locah_sh_path = os.path.join(resident_service_path, "resources", "gcov_flush.sh") + print(hdc_str + "file send %s %s" % (locah_sh_path, "/data/")) + subprocess.Popen(hdc_str + "file send %s %s" % (locah_sh_path, "/data/"), + shell=True).communicate() + subprocess.Popen(hdc_str + "shell chmod 777 /data/gcov_flush.sh", + shell=True).communicate() + print(hdc_str + "shell sh /data/gcov_flush.sh %s" % services_str) + subprocess.Popen(hdc_str + "shell sh /data/gcov_flush.sh %s" % services_str, + shell=True).communicate() + + # 拉取gcda文件 + get_gcda_file(device_ip, device_sn, process_str, component_gcda_dict, + developer_path, services_str) + + +def get_gcda_file(device_ip, device_sn, process_str, component_gcda_dict, + developer_path, services_str): + hdc_str = "hdc -s %s:8710 -t %s" % (device_ip, device_sn) + root_path = current_path.split("/test/testfwk/developer_test")[0] + home_path = '/'.join(root_path.split("/")[:3]) + gcda_path = "/data/gcov" + root_path + + for component_gcda_path in component_gcda_dict[process_str]: + gcov_root = os.path.join(gcda_path, component_gcda_path) + gcda_file_name = os.path.basename(gcov_root) + gcda_file_path = os.path.dirname(gcov_root) + print(hdc_str + "shell 'cd %s; tar -czf %s.tar.gz %s'" % ( + gcda_file_path, gcda_file_name, gcda_file_name)) + subprocess.Popen(hdc_str + "shell 'cd %s; tar -czf %s.tar.gz %s'" % ( + gcda_file_path, gcda_file_name, gcda_file_name), shell=True).communicate() + + obj_gcda_path = component_gcda_path.split("baltimore")[-1].strip("/") + local_gcda_path = os.path.dirname( + os.path.join(developer_path, "reports/coverage/data/cxx", + services_str + "_service", obj_gcda_path)) + + if not os.path.exists(local_gcda_path): + os.makedirs(local_gcda_path) + tar_path = os.path.join(gcda_file_path, "%s.tar.gz" % gcda_file_name) + print(hdc_str + "file recv %s %s" % (tar_path, local_gcda_path)) + subprocess.Popen(hdc_str + "file recv %s %s" % ( + tar_path, local_gcda_path), shell=True).communicate() + + local_tar = os.path.join(local_gcda_path, "%s.tar.gz" % gcda_file_name) + print("tar -zxf %s -C %s > /dev/null 2>&1" % (local_tar, local_gcda_path)) + subprocess.Popen("tar -zxf %s -C %s > /dev/null 2>&1" % ( + local_tar, local_gcda_path), shell=True).communicate() + subprocess.Popen("rm -rf %s" % local_tar, shell=True).communicate() + print(hdc_str + "shell rm -fr %s" % ("/data/gcov" + home_path)) + subprocess.Popen(hdc_str + "shell rm -fr %s" % ("/data/gcov" + home_path), + shell=True).communicate() + + +def get_service_list(device_ip, device_sn, system_info_dict, services_component_dict, + component_gcda_dict, developer_path, resident_service_path): + + service_list = [] + for key, value_list in system_info_dict.items(): + for process_str in value_list: + if process_str in services_component_dict.keys(): + service_list.append(process_str) + else: + return + if len(service_list) > 0: + for process_str in service_list: + service_list = process_str.split("|") + for service_str in service_list: + attach_pid(device_ip, device_sn, process_str, component_gcda_dict, + developer_path, resident_service_path, service_str) + return + + +if __name__ == '__main__': + command_args = sys.argv[1] + command_str = command_args.split("command_str=")[1].replace(",", " ") + current_path = os.getcwd() + developer_path = os.path.join( + current_path.split("/developer_test/src")[0], "developer_test") + resident_service_path = os.path.join( + developer_path, "localCoverage/resident_service") + config_path = os.path.join(resident_service_path, "config") + + # 获取子系统部件与服务的关系 + system_info_dict, services_component_dict, component_gcda_dict = get_server_dict(command_str) + + device_ip = get_config_ip(os.path.join(developer_path, "config/user_config.xml")) + device_sn_list = get_sn_list("hdc -s %s" % device_ip + ":8710 list targets") + + if device_ip and len(device_sn_list) >= 1 and len(system_info_dict.keys()) >= 1: + for device_sn_str in device_sn_list: + get_service_list(device_ip, device_sn_str, system_info_dict, services_component_dict, + component_gcda_dict, developer_path, resident_service_path) + diff --git a/localCoverage/resident_service/resources/gcov_flush.sh b/localCoverage/resident_service/resources/gcov_flush.sh new file mode 100644 index 0000000..d8a5c9e --- /dev/null +++ b/localCoverage/resident_service/resources/gcov_flush.sh @@ -0,0 +1,7 @@ +#!/bin/sh +SERVER_NAME=$1 + +# pid=`pgrep -l $SERVER_NAME |awk '{print $1}'` +ip_addrs=`pgrep -f $SERVER_NAME` +echo $ip_addrs +kill -SIGUSR2 $ip_addrs \ No newline at end of file diff --git a/localCoverage/resident_service/resources/sign.cpp b/localCoverage/resident_service/resources/sign.cpp new file mode 100644 index 0000000..98948d1 --- /dev/null +++ b/localCoverage/resident_service/resources/sign.cpp @@ -0,0 +1,34 @@ +#include +#include +#include +#include +#include + + +extern "C" void __gcov_dump(); + +using namespace std; +void sighandler(int signo) +{ + cout << "######gcov_dump_start" << endl; + __gcov_dump(); + cout << "######gcov_dump_end" << endl; +} +__attribute__ ((constructor)) +void ctor() +{ + int sigs[] = { + SIGUSR2 + }; + int i; + struct sigaction sa; + sa.sa_handler = sighandler; + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + for (i = 0; i < sizeof (sigs)/ sizeof (sigs[0]); ++i){ + if (sigaction(sigs[i], &sa, NULL == -1)){ + cout << "Could not set signal handler" << endl; + } + } +} + diff --git a/localCoverage/resident_service/system_part_service.json b/localCoverage/resident_service/system_part_service.json new file mode 100644 index 0000000..37df1f0 --- /dev/null +++ b/localCoverage/resident_service/system_part_service.json @@ -0,0 +1,119 @@ +{ + "system_info_dict": { + "window": ["wms"], + "security": ["huks_service", "dlp_permission", "accesstoken_ser|privacy_service|token_sync_ser", "dlp_credential_"], + "multimedia": ["media_service", "av_session"], + "resourceschedule": ["device_usage_st", "resource_schedu", "bgtaskmgr_servi"], + "account": ["accountmgr"], + "telephone": ["telephone|riladapter_host"], + "communication": ["netmanager", "samgr"], + "deviceprofile": ["distribuatedsche"], + "bundlemanager": ["bms"], + "distributeddatamgr": ["pastedboard_serv"], + "filemanagement": ["com.ohos.medialibrary.medialibrarydata.entry:FileExtensionablity", "com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility"], + "miscservices": ["inputmethod_ser"], + "hdf": [ + "hdf_devmgr|input_host|audio_host|sample_host|fingerprint_auth_host|user_auth_host|pin_auth_host|face_auth_host|nfc_host|codec_host|wifi_host|motion_host|sensor_host|riladapter_host|hwc_host|gralloc_host|camera_host|usb_host|blue_host|audio_hdi_server_host|power_host|a2dp_host|location_host|daudio_host" + ], + "notification": ["ans"], + "graphic": ["render_service"], + + + "location": ["locationhub"], + "time_service": ["time_service"], + "sensors": ["sensors"], + "msdp": ["msdp"], + "screenlock_serv": ["screenlock_serv"], + "dlp_credential_service_sa": ["dlp_credential_service_sa"], + "wallpaper_servi": ["wallpaper_servi"], + "hilogd": ["hilogd|hidumper_service"], + "power_mgr": ["power"], + "data_share": ["com.ohos.medialibrary.medialibrarydata"], + "dinput": ["dinput"], + "dsoftbus": ["dsoftbus_service"] + }, + "services_component_dict": { + "wms": ["window_manager"], + "bms": ["bundle_framework"], + "power": ["battery_manager", "battery_statistics", "display_manager", "thermal_manager"], + "huks_service": ["huks_service"], + "dlp_permission": ["dlp_permission_service"], + "media_service": ["multimedia_player_framework"], + "device_usage_st": ["device_usage_statistics"], + "accountmgr": ["os_account"], + "av_session": ["multimedia_av_session"], + "accesstoken_ser|privacy_service|token_sync_ser": ["access_token"], + "telephone|raladapter_host": [ + "call_manager", "cellular_call", "cellular_data", "core_service","data_storage", + "ril_adapter", "state_register", "ims", "sms_mms" + ], + "netmanager": ["netmanager_base", "netmanager_ext", "netstack"], + "samgr": ["samgr"], + "distributedsche": ["dmsfwk", "device_info_manager"], + "resource_schedu": ["efficiency_manager"], + "bgtaskmgr_servi": ["background_task_mgr"], + "pasteboard_serv": ["pasteboard"], + "com.ohos.medialibrary.medialibrarydata.entry:FileExtensionablity|com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility": ["filemanagement"], + "com.ohos.medialibrary.medialibrarydata": ["data_share"], + "inputmethod_ser": ["imf"], + "hdf_devmgr|input_host|audio_host|sample_host|fingerprint_auth_host|user_auth_host|pin_auth_host|face_auth_host|nfc_host|codec_host|wifi_host|motion_host|sensor_host|riladapter_host|hwc_host|gralloc_host|camera_host|usb_host|blue_host|audio_hdi_server_host|power_host|a2dp_host|location_host|daudio_host": [ + "drivers_peripheral_battery", "drivers_peripheral_motion", "drivers_peripheral_sensor", + "drivers_peripheral_thermal", "hdf", "hdf_core", "hidl_adapter","drivers_peripheral_input", + "drivers_peripheral_power" + ], + "ans": ["distributed_notification_service"], + "render_service": ["graphic", "graphic_standard"], + "dlp_credential_": ["dlp_credential_service"], + "locationhub": ["location"], + "time_service": ["time_service"], + "sensors": ["sensors"], + "msdp": ["algorithm", "geofence", "movement", "timeline", "spatialawareness_manager_native", "msdp"], + "screenlock_serv": ["screenlock"], + "dlp_credential_service_sa": ["dlp_credential_service"], + "wallpaper": ["theme", "wallpaper_mgr"], + "hilogd|hidumper_service": ["hiviewfdx"], + "dinput": ["distributed_input_sourcemanager_test", "distribute_input_sourcetrans_test"], + "softbus_server": [ + "BusCenterHeartbeatSdkTest", "BusCenterMetaModeSdkTest", "BusCenterSdkTest", + "BusCenterServerTest", "ClientBusCenterMgrTest", "ClientBusMangerTest, SetDataChangeTest" + ] + }, + "component_gcda_dict": { + "wms": ["out/baltimore/obj/foundation/window/window_manager"], + "huks_service": ["out/baltimore/obj/base/security/huks"], + "dlp_permission": ["out/baltimore/obj/base/security/dlp_permission_service"], + "media_service": ["out/baltimore/obj/foundation/multimedia/player_framework"], + "device_usage_st": ["out/baltimore/obj/foundation/resourceschedule"], + "accountmgr": ["out/baltimore/obj/base/os_account"], + "av_session": ["out/baltimore/obj/foundation/multimedia/av_session"], + "accesstoken_ser|privacy_service|token_sync_ser": ["out/baltimore/obj/base/security/access_token"], + "telephone|riladaper_host": ["out/baltimore/obj/base/telephone"], + "netmanager": ["out/baltimore/obj/foundation/communication"], + "samgr": ["out/baltimore/obj/foundation/systemabilitymgr"], + "distributedsche": ["out/baltimore/obj/foundation/ability/dmsfwk", "out/baltimore/obj/foundation/deviceprofile"], + "resource_schedu": ["out/baltimore/obj/foundation/resourceschedule/efficiency_manager"], + "bgtaskmgr_servi": ["out/baltimore/obj/foundation/resourceschedule/background_task_mgr"], + "bms": ["out/baltimore/obj/foundation/bundlemanager/bundle_framework"], + "pasteboard_serv": ["out/baltimore/obj/foundation/distributeddatamgr"], + "com.ohos.medialibrary.medialibrarydata.entry:FileExtensionablity|com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility": ["out/baltimore/obj/foundation/multimedia", "out/baltimore/obj/foundation/filemanagement"], + "inputmethod_ser": ["out/baltimore/obj/base/inputmethod/imf"], + "hdf_devmgr|input_host|audio_host|sample_host|fingerprint_auth_host|user_auth_host|pin_auth_host|face_auth_host|nfc_host|codec_host|wifi_host|motion_host|sensor_host|riladapter_host|hwc_host|gralloc_host|camera_host|usb_host|blue_host|audio_hdi_server_host|power_host|a2dp_host|location_host|daudio_host": [ + "out/baltimore/obj/drivers" + ], + "ans": ["out/baltimore/obj/base/notification/distributed_notification_service"], + "render_service": ["out/baltimore/obj/foundation/graphic/graphic_2d"], + "dlp_credential_": ["out/baltimore/obj/base/security/dlp_credential_service"], + "locationhub": ["out/baltimore/obj/base/location/services"], + "time_service": ["out/baltimore/obj/base/time/time_service"], + "sensors": ["out/baltimore/obj/base/sensors"], + "msdp": ["out/baltimore/obj/base/msdp"], + "screenlock_serv": ["out/baltimore/obj/base/theme/screenlock_mgr/services"], + "dlp_credential_service_sa": ["out/baltimore/obj/base/security/dlp_credential_service"], + "wallpaper_servi": ["out/baltimore/obj/base/theme/wallpaper_mgr"], + "hilogd|hidumper_service": ["out/baltimore/obj/base/hiviewdfx"], + "power": ["out/baltimore/obj/base/powermgr"], + "com.ohos.medialibrary.medialibrarydata": ["out/baltimore/obj/foundation/distributeddatamgr/data_share"], + "dinput": ["out/baltimore/obj/foundation/distributedhardware/distribute_input"], + "softbus_server": ["out/baltimore/obj/foundation/communication/dsoftbus"] + } +} \ No newline at end of file diff --git a/localCoverage/restore_comment/__init__.py b/localCoverage/restore_comment/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/localCoverage/restore_comment/after_lcov_branch.py b/localCoverage/restore_comment/after_lcov_branch.py new file mode 100644 index 0000000..56d689d --- /dev/null +++ b/localCoverage/restore_comment/after_lcov_branch.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 +# coding=utf-8 + +# +# Copyright (c) 2020-2023 Huawei Device Co., Ltd. +# 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. +# + +import os +import subprocess + + +def get_file_list(find_path, postfix=""): + file_names = os.listdir(find_path) + file_list = [] + if len(file_names) > 0: + for fn in file_names: + if postfix != "": + if fn.find(postfix) != -1 and fn[-len(postfix):] == postfix: + file_list.append(fn) + else: + file_list.append(fn) + return + + +def get_file_list_by_postfix(path, postfix=""): + file_list = [] + for dirs in os.walk(path): + files = get_file_list(find_path=dirs[0], postfix=postfix) + for file_name in files: + if "" != file_name and -1 == file_name.find(__file__): + file_name = os.path.join(dirs[0], file_name) + if os.path.isfile(file_name): + file_list.append(file_name) + return file_list + + +def recover_source_file(cpp_arr_list, keys): + if not cpp_arr_list: + print("no any .cpp file here") + return + + print("[********** Start Recover Source File **********]") + for path in cpp_arr_list: + if not os.path.exists(path): + return + for key in keys: + with open(path, "r") as read_fp: + code_lines = read_fp.readlines() + with open(path.split(".")[0] + "_bk.html", "w") as write_fp: + for line in code_lines: + if key in line: + write_fp.write(line.strip("\n").strip("\n\r").replace("//LCOV_EXCL_BR_LINE", "")) + write_fp.write("\n") + else: + write_fp.write("\n") + + os.remove(path) + subprocess.Popen("mv %s %s" % (path.split(".")[0] + "_bk.html", path), + shell=True).communicate() + print("[********** End Recover Source File **********]") + + +if __name__ == '__main__': + current_path = os.getcwd() + root_path = current_path.split("/test/testfwk/developer_test")[0] + html_path = os.path.join( + root_path, "test/testfwk/developer_test/localCoverage/codeCoverage/results/coverage/reports/cxx/html") + cpp_arr_list = get_file_list(html_path, ".html") + recover_source_file(cpp_arr_list, keys=["//LCOV_EXCL_BR_LINE"]) diff --git a/localCoverage/restore_comment/build_befrore_lcov_branch.py b/localCoverage/restore_comment/build_befrore_lcov_branch.py new file mode 100644 index 0000000..11bc943 --- /dev/null +++ b/localCoverage/restore_comment/build_befrore_lcov_branch.py @@ -0,0 +1,164 @@ +#!/usr/bin/env python3 +# coding=utf-8 + +# +# Copyright (c) 2020-2023 Huawei Device Co., Ltd. +# 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. +# + +import os +import subprocess +import traceback +import json + + +def get_file_list(find_path, postfix=""): + file_names = os.listdir(find_path) + file_list = [] + if len(file_names) > 0: + for fn in file_names: + if postfix != "": + if fn.find(postfix) != -1 and fn[-len(postfix):] == postfix: + file_list.append(fn) + else: + file_list.append(fn) + return + + +def get_file_list_by_postfix(path, postfix=""): + file_list = [] + for dirs in os.walk(path): + files = get_file_list(find_path=dirs[0], postfix=postfix) + for file_name in files: + if "" != file_name and -1 == file_name.find(__file__): + file_name = os.path.join(dirs[0], file_name) + if os.path.isfile(file_name): + file_list.append(file_name) + return file_list + + +def get_source_file_list(path): + """ + 获取path路径下源文件路径列表 + """ + file_path_list = [] + file_path_list_append = file_path_list.append + for root, dirs, files in os.walk(path): + if files: + for file_name in files: + file_path = os.path.join(root, file_name) + _, suffix = os.path.splitext(file_name) + if suffix in [".c", ".h", ".cpp"]: + file_path_list_append(file_path) + return file_path_list + + +def rewrite_source_file(source_path_list: list): + """ + 源文件加“//LCOV_EXCL_BR_LINE” + """ + keys = ["if", "while", "switch", "case", "for", "try", "catch"] + if not source_path_list: + print("no any source file here") + return + + print("[********** Start Rewrite Source File **********]") + for path in source_path_list: + if not os.path.exists(path) or "test" in path: + continue + with open(path, "r", encoding="utf-8", errors="ignore") as read_fp: + code_lines = read_fp.readlines() + source_dir, suffix_name = os.path.splitext(path) + with open(source_dir + f"_bk.{suffix_name}", "w", + encoding="utf-8", errors="ignore") as write_fp: + + for line in code_lines: + for key in keys: + if key in line and line.strip().startswith(key): + write_fp.write(line) + elif " //LCOV_EXCL_BR_LINE" not in line and not line.strip().endswith("\\"): + write_fp.write(line.strip("\n").strip("\n\r") + " //LCOV_EXCL_BR_LINE") + write_fp.write("\n") + else: + write_fp.write(line) + break + + os.remove(path) + subprocess.Popen("mv %s %s" % (source_dir + f"_bk.{suffix_name}", path), + shell=True).communicate() + print("[********** End Rewrite Source File **********]") + + +def add_locv(subsystem_config_path): + try: + with open(subsystem_config_path, "r", encoding="utf-8", errors="ignore") as fp: + data_dict = json.load(fp) + for key, value in data_dict.items(): + if "path" in value.keys(): + for path_str in value["path"]: + file_path = os.path.join(root_path, path_str) + if os.path.exists(file_path): + subprocess.Popen("cp -r %s %s" % ( + file_path, file_path + "_primal"), shell=True).communicate() + source_file_path = get_source_file_list(file_path) + rewrite_source_file(source_file_path) + else: + print("The directory does not exist.", file_path) + except: + print(traceback.format_exc()) + + +def get_part_config_json(part_name_list, all_system_info_path, part_info_path): + if os.path.exists(all_system_info_path): + new_json_text = {} + for part in part_name_list: + with open(all_system_info_path, "r") as system_text: + system_text_json = json.load(system_text) + if part in system_text_json: + new_json_text[part] = system_text_json[part] + else: + print("part not in all_subsystem_config.json") + new_json = json.dumps(new_json_text, indent=4) + with open(part_info_path, "w") as out_file: + out_file.write(new_json) + else: + print("%s not exists.", all_system_info_path) + + +if __name__ == '__main__': + while True: + print("For example: run -tp partname\n" + " run -tp partname1 partname2") + + # 获取用户输入命令 + part_name = input("Please enter your command: ") + if part_name == "": + continue + if " -tp " in part_name: + part_name_list = part_name.strip().split(" -tp ")[1].split() + break + else: + continue + + current_path = os.getcwd() + root_path = current_path.split("/test/testfwk/developer_test")[0] + all_system_info_path = os.path.join( + root_path, "test/testfwk/developer_test/localCoverage/all_subsystem_config.json") + part_info_path = os.path.join( + root_path, "test/testfwk/developer_test/localCoverage/restore_comment/part_config.json") + + # 获取要修改的源代码的部件信息 + get_part_config_json(part_name_list, all_system_info_path, part_info_path) + + # 执行修改 + add_locv(part_info_path) diff --git a/localCoverage/restore_comment/restore_source_code.py b/localCoverage/restore_comment/restore_source_code.py new file mode 100644 index 0000000..999c6a4 --- /dev/null +++ b/localCoverage/restore_comment/restore_source_code.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +# coding=utf-8 + +# +# Copyright (c) 2020-2023 Huawei Device Co., Ltd. +# 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. +# + +import os +import subprocess +import traceback +import json + + +if __name__ == '__main__': + try: + current_path = os.getcwd() + root_path = current_path.split("/test/testfwk/developer_test")[0] + subsystem_config_path = os.path.join( + root_path, "test/testfwk/developer_test/localCoverage/restore_comment/part_config.json") + with open(subsystem_config_path, "r", encoding="utf-8", errors="ignore") as fp: + data_dict = json.load(fp) + for key, value in data_dict.items(): + if "path" in value.keys(): + for path_str in value["path"]: + file_path = os.path.join(root_path, path_str) + if os.path.exists(file_path): + if os.path.exists(file_path + "_primal"): + subprocess.Popen("rm -rf %s" % file_path, shell=True).communicate() + subprocess.Popen("mv %s %s" % ( + file_path + "_primal", file_path), shell=True).communicate() + else: + print("The directory does not exist.", file_path) + except: + print(traceback.format_exc()) -- Gitee From f696808ca3c081cbd191add1b3172eacc9f65bfd Mon Sep 17 00:00:00 2001 From: caojiale1 Date: Sat, 18 Feb 2023 16:54:38 +0800 Subject: [PATCH 02/14] Signed-off-by:caojiale1 --- localCoverage/coverage_tools.py | 8 ++++++++ src/core/command/run.py | 34 ++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/localCoverage/coverage_tools.py b/localCoverage/coverage_tools.py index f36f735..12b05ed 100644 --- a/localCoverage/coverage_tools.py +++ b/localCoverage/coverage_tools.py @@ -170,5 +170,13 @@ if __name__ == '__main__': else: print("subsystem or part without!") + # 源代码还原 + after_locv_branch_path = os.path.join( + root_path, "test/testfwk/developer_test/localCoverage/restore_comment/after_locv_branch.py") + subprocess.run("python3 %s " % after_locv_branch_path, shell=True) + restore_source_code_path = os.path.join( + root_path, "test/testfwk/developer_test/localCoverage/restore_comment/restore_source_code.py") + subprocess.run("python3 %s" % restore_source_code_path, shell=True) + diff --git a/src/core/command/run.py b/src/core/command/run.py index d47b2b2..ccd6757 100644 --- a/src/core/command/run.py +++ b/src/core/command/run.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # coding=utf-8 - +import platform # # Copyright (c) 2020-2022 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,6 +17,7 @@ # import random +import subprocess from pydoc import classname import time import os @@ -53,6 +54,15 @@ class Run(object): return self.history_cmd_list def process_command_run(self, command, options): + current_raw_cmd = ",".join(list(map(str, options.current_raw_cmd.split(" ")))) + if options.coverage and platform.system() != "Windows": + init_gcov_path = os.path.join(sys.framework_root_dir, "localCoverage/resident_service/init_gcov.py") + if os.path.exists(init_gcov_path): + subprocess.run("python3 %s command_str=%s" % ( + init_gcov_path, current_raw_cmd),shell=True) + else: + print(f"{init_gcov_path} not exists.") + para = Parameter() test_type_list = para.get_testtype_list(options.testtype) if len(test_type_list) == 0: @@ -178,6 +188,11 @@ class Run(object): if not self._check_test_dictionary(test_dict): LOG.error("The test file list is empty.") return + if options.coverage and platform.system() != "Windows": + coverage_path = os.path.join(sys.framework_root_dir, "reports/coverage.py") + if os.path.exists(coverage_path): + coverage_process = subprocess.Popen("rm -rf %s" % coverage_path, shell=True) + coverage_process.communicate() if ("distributedtest" in options.testtype and len(options.testtype) == 1): @@ -259,6 +274,23 @@ class Run(object): del self.history_cmd_list[0] self.history_cmd_list.append(cmd_record) print("-------------run end: ", self.history_cmd_list) + if options.coverage and platform.system() != "Windows": + pull_service_gcov_path = os.path.join( + sys.framework_root_dir, "localCoverage/resident_service/pull_service_gcda.py") + if os.path.exists(pull_service_gcov_path): + subprocess.run("python3 %s command_str=%s" % ( + get_build_output_path, current_raw_cmd), shell=True) + else: + print(f"{pull_service_gcov_path} not exists.") + + cov_main_file_path = os.path.join(sys.framework_root_dir, "localCoverage/coverage_tools.py") + testpart = ",".join(list(map(str, options.partname_list))) + subsystem = ",".join(list(map(str, options.subsystem))) + if os.path.exists(cov_main_file_path): + subprocess.run("python3 %s testpart=%s subsystem=%s" % ( + cov_main_file_path, testpart, subsystem), shell=True) + else: + print(f"{cov_main_file_path} not exists.") return ############################################################## -- Gitee From 047c53daa0c870dec20c7145323c3c2f8f6b18e3 Mon Sep 17 00:00:00 2001 From: caojiale1 Date: Sat, 18 Feb 2023 18:09:12 +0800 Subject: [PATCH 03/14] Signed-off-by:caojiale1 --- localCoverage/coverage_tools.py | 4 +- .../resident_service/config/ams/ams.cfg | 14 +++--- .../resident_service/config/ams/ams.xml | 2 +- .../config/ams/foundation.xml | 10 ++++- .../config/bms/{bms_cfg => bms.cfg} | 14 +++--- .../resident_service/config/bms/bms.xml | 2 +- .../config/bms/foundation.xml | 6 +-- .../resident_service/config/call/call.cfg | 14 +++--- .../resident_service/config/call/call.xml | 2 +- .../config/call/foundation.xml | 15 ++----- .../resident_service/config/fms/fms.cfg | 14 +++--- .../resident_service/config/fms/fms.xml | 2 +- .../config/fms/foundation.xml | 8 ++-- .../config/notification/foundation.xml | 18 ++------ .../{notificatoin.cfg => notification.cfg} | 14 +++--- .../config/notification/notification.xml | 4 +- .../config/power/foundation.xml | 8 ++-- .../resident_service/config/power/power.cfg | 14 +++--- .../resident_service/config/power/power.xml | 12 ++--- .../config/state/foundation.xml | 8 ++-- .../resident_service/config/state/state.cfg | 14 +++--- .../resident_service/config/state/state.xml | 2 +- .../config/wms/foundation.xml | 14 +----- .../resident_service/config/wms/wms.cfg | 14 +++--- .../resident_service/config/wms/wms.xml | 6 +-- localCoverage/resident_service/init_gcov.py | 12 ++--- .../resident_service/public_method.py | 10 ++--- .../resident_service/pull_service_gcda.py | 10 ++--- .../resident_service/system_part_service.json | 44 +++++++++---------- .../restore_comment/after_lcov_branch.py | 6 +-- .../build_befrore_lcov_branch.py | 4 +- 31 files changed, 151 insertions(+), 170 deletions(-) rename localCoverage/resident_service/config/bms/{bms_cfg => bms.cfg} (78%) rename localCoverage/resident_service/config/notification/{notificatoin.cfg => notification.cfg} (79%) diff --git a/localCoverage/coverage_tools.py b/localCoverage/coverage_tools.py index 12b05ed..1d54e4e 100644 --- a/localCoverage/coverage_tools.py +++ b/localCoverage/coverage_tools.py @@ -171,9 +171,9 @@ if __name__ == '__main__': print("subsystem or part without!") # 源代码还原 - after_locv_branch_path = os.path.join( + after_lcov_branch_path = os.path.join( root_path, "test/testfwk/developer_test/localCoverage/restore_comment/after_locv_branch.py") - subprocess.run("python3 %s " % after_locv_branch_path, shell=True) + subprocess.run("python3 %s " % after_lcov_branch_path, shell=True) restore_source_code_path = os.path.join( root_path, "test/testfwk/developer_test/localCoverage/restore_comment/restore_source_code.py") subprocess.run("python3 %s" % restore_source_code_path, shell=True) diff --git a/localCoverage/resident_service/config/ams/ams.cfg b/localCoverage/resident_service/config/ams/ams.cfg index f287bd7..0859723 100644 --- a/localCoverage/resident_service/config/ams/ams.cfg +++ b/localCoverage/resident_service/config/ams/ams.cfg @@ -3,9 +3,9 @@ "name": "services:ams", "cmds": [ "mkdir /data/service/el1/public/AbilityManagerService 0711 foundation system", - "mkdir /data/service/el1/bundle 0711 system system", - "mkdir /data/service/el2/base 0711 system system", - "mkdir /data/service/el2/database 0711 system system", + "mkdir /data/storage/el1/bundle 0711 system system", + "mkdir /data/storage/el2/base 0711 system system", + "mkdir /data/storage/el2/database 0711 system system", "mkdir /data/service/el1/public/notification 0711 foundation system", "mkdir /data/service/el1/public/database 0711 ddms ddms", "mkdir /data/service/el1/public/database/bundle_manager_service 02770 foundation ddms", @@ -13,10 +13,10 @@ "mkdir /data/service/el1/public/database/form_storage 02770 foundation ddms", "chown radio system /sys/power/wake_lock", "chown radio system /sys/power/wake_unlock", - "chmod 0664 /sys/power/wake_count" + "chmod 0664 /sys/power/wakeup_count" ] },{ - "name": "service:restartfoundation", + "name": "services:restartfoundation", "cmds": [ "reset appspawn", "reset accountmgr" @@ -32,8 +32,8 @@ "permission": [ "ohos.permission.INPUT_MONITORING", "ohos.permission.PERMISSION_USED_STATS", - "ohos.permission.DISTRIBUTED_DOFTBUS_CENTER", - "ohos.permission.DISTRIBUTE_DATASYNC", + "ohos.permission.DISTRIBUTED_SOFTBUS_CENTER", + "ohos.permission.DISTRIBUTED_DATASYNC", "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", "ohos.permission.INSTALL_BUNDLE", "ohos.permission.MICROPHONE" diff --git a/localCoverage/resident_service/config/ams/ams.xml b/localCoverage/resident_service/config/ams/ams.xml index c92bbb4..9fbe4b6 100644 --- a/localCoverage/resident_service/config/ams/ams.xml +++ b/localCoverage/resident_service/config/ams/ams.xml @@ -3,7 +3,7 @@ foundation - /system/lib64/libabliltyms.z.so + /system/lib64/libabilityms.z.so /system/lib64/libdataobsms.z.so /system/lib64/libupms.z.so /system/lib64/libappms.z.so diff --git a/localCoverage/resident_service/config/ams/foundation.xml b/localCoverage/resident_service/config/ams/foundation.xml index 4397de7..4ba1cf5 100644 --- a/localCoverage/resident_service/config/ams/foundation.xml +++ b/localCoverage/resident_service/config/ams/foundation.xml @@ -60,6 +60,7 @@ 3203 libans.z.so 1301 + 3299 5000 true false @@ -81,6 +82,13 @@ false 1 + + 3301 + libpowermgrservice.z.so + true + false + 1 + 4005 libtel_call_manager.z.so @@ -97,7 +105,7 @@ - 404 + 403 /system/lib64/libfms.z.so diff --git a/localCoverage/resident_service/config/bms/bms_cfg b/localCoverage/resident_service/config/bms/bms.cfg similarity index 78% rename from localCoverage/resident_service/config/bms/bms_cfg rename to localCoverage/resident_service/config/bms/bms.cfg index 49de6d5..f3da1bf 100644 --- a/localCoverage/resident_service/config/bms/bms_cfg +++ b/localCoverage/resident_service/config/bms/bms.cfg @@ -3,9 +3,9 @@ "name": "services:bms", "cmds": [ "mkdir /data/service/el1/public/AbilityManagerService 0711 foundation system", - "mkdir /data/service/el1/bundle 0711 system system", - "mkdir /data/service/el2/base 0711 system system", - "mkdir /data/service/el2/database 0711 system system", + "mkdir /data/storage/el1/bundle 0711 system system", + "mkdir /data/storage/el2/base 0711 system system", + "mkdir /data/storage/el2/database 0711 system system", "mkdir /data/service/el1/public/notification 0711 foundation system", "mkdir /data/service/el1/public/database 0711 ddms ddms", "mkdir /data/service/el1/public/database/bundle_manager_service 02770 foundation ddms", @@ -13,10 +13,10 @@ "mkdir /data/service/el1/public/database/form_storage 02770 foundation ddms", "chown radio system /sys/power/wake_lock", "chown radio system /sys/power/wake_unlock", - "chmod 0664 /sys/power/wake_count" + "chmod 0664 /sys/power/wakeup_count" ] },{ - "name": "service:restartfoundation", + "name": "services:restartfoundation", "cmds": [ "reset appspawn", "reset accountmgr" @@ -32,8 +32,8 @@ "permission": [ "ohos.permission.INPUT_MONITORING", "ohos.permission.PERMISSION_USED_STATS", - "ohos.permission.DISTRIBUTED_DOFTBUS_CENTER", - "ohos.permission.DISTRIBUTE_DATASYNC", + "ohos.permission.DISTRIBUTED_SOFTBUS_CENTER", + "ohos.permission.DISTRIBUTED_DATASYNC", "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", "ohos.permission.INSTALL_BUNDLE", "ohos.permission.MICROPHONE" diff --git a/localCoverage/resident_service/config/bms/bms.xml b/localCoverage/resident_service/config/bms/bms.xml index a26af2f..6086c22 100644 --- a/localCoverage/resident_service/config/bms/bms.xml +++ b/localCoverage/resident_service/config/bms/bms.xml @@ -12,7 +12,7 @@ 1301 60000 true - false + false 1 CoreStartPhase diff --git a/localCoverage/resident_service/config/bms/foundation.xml b/localCoverage/resident_service/config/bms/foundation.xml index a2d8122..845b3c3 100644 --- a/localCoverage/resident_service/config/bms/foundation.xml +++ b/localCoverage/resident_service/config/bms/foundation.xml @@ -26,7 +26,7 @@ true false 1 - CoreStartPhase + CoreStartPhase 4607 @@ -36,7 +36,7 @@ true false 1 - CoreStartPhase + CoreStartPhase 3299 @@ -96,7 +96,7 @@ 180 - /system/lib64/libabiliyms.z.so + /system/lib64/libabilityms.z.so true diff --git a/localCoverage/resident_service/config/call/call.cfg b/localCoverage/resident_service/config/call/call.cfg index 7120b82..1d9a890 100644 --- a/localCoverage/resident_service/config/call/call.cfg +++ b/localCoverage/resident_service/config/call/call.cfg @@ -3,9 +3,9 @@ "name": "services:call", "cmds": [ "mkdir /data/service/el1/public/AbilityManagerService 0711 foundation system", - "mkdir /data/service/el1/bundle 0711 system system", - "mkdir /data/service/el2/base 0711 system system", - "mkdir /data/service/el2/database 0711 system system", + "mkdir /data/storage/el1/bundle 0711 system system", + "mkdir /data/storage/el2/base 0711 system system", + "mkdir /data/storage/el2/database 0711 system system", "mkdir /data/service/el1/public/notification 0711 foundation system", "mkdir /data/service/el1/public/database 0711 ddms ddms", "mkdir /data/service/el1/public/database/bundle_manager_service 02770 foundation ddms", @@ -13,10 +13,10 @@ "mkdir /data/service/el1/public/database/form_storage 02770 foundation ddms", "chown radio system /sys/power/wake_lock", "chown radio system /sys/power/wake_unlock", - "chmod 0664 /sys/power/wake_count" + "chmod 0664 /sys/power/wakeup_count" ] },{ - "name": "service:restartfoundation", + "name": "services:restartfoundation", "cmds": [ "reset appspawn", "reset accountmgr" @@ -32,8 +32,8 @@ "permission": [ "ohos.permission.INPUT_MONITORING", "ohos.permission.PERMISSION_USED_STATS", - "ohos.permission.DISTRIBUTED_DOFTBUS_CENTER", - "ohos.permission.DISTRIBUTE_DATASYNC", + "ohos.permission.DISTRIBUTED_SOFTBUS_CENTER", + "ohos.permission.DISTRIBUTED_DATASYNC", "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", "ohos.permission.INSTALL_BUNDLE", "ohos.permission.MICROPHONE" diff --git a/localCoverage/resident_service/config/call/call.xml b/localCoverage/resident_service/config/call/call.xml index 78853b6..e8d279d 100644 --- a/localCoverage/resident_service/config/call/call.xml +++ b/localCoverage/resident_service/config/call/call.xml @@ -12,7 +12,7 @@ libtel_call_manager.z.so true false - 1 + 1 \ No newline at end of file diff --git a/localCoverage/resident_service/config/call/foundation.xml b/localCoverage/resident_service/config/call/foundation.xml index 5783d0a..de92b80 100644 --- a/localCoverage/resident_service/config/call/foundation.xml +++ b/localCoverage/resident_service/config/call/foundation.xml @@ -18,13 +18,13 @@ 401 - /system/lib64/libfms.z.so + /system/lib64/libbms.z.so 1301 60000 true false 1 - CoreStartPhase + CoreStartPhase 4606 @@ -34,7 +34,7 @@ true false 1 - CoreStartPhase + CoreStartPhase 4607 @@ -44,7 +44,7 @@ true false 1 - CoreStartPhase + CoreStartPhase 3299 @@ -88,13 +88,6 @@ false 1 - - 4005 - libtel_call_manager.z.so - true - false - 1 - 4009 libtel_state_registry.z.so diff --git a/localCoverage/resident_service/config/fms/fms.cfg b/localCoverage/resident_service/config/fms/fms.cfg index e2d9f98..fa67a1c 100644 --- a/localCoverage/resident_service/config/fms/fms.cfg +++ b/localCoverage/resident_service/config/fms/fms.cfg @@ -3,9 +3,9 @@ "name": "services:fms", "cmds": [ "mkdir /data/service/el1/public/AbilityManagerService 0711 foundation system", - "mkdir /data/service/el1/bundle 0711 system system", - "mkdir /data/service/el2/base 0711 system system", - "mkdir /data/service/el2/database 0711 system system", + "mkdir /data/storage/el1/bundle 0711 system system", + "mkdir /data/storage/el2/base 0711 system system", + "mkdir /data/storage/el2/database 0711 system system", "mkdir /data/service/el1/public/notification 0711 foundation system", "mkdir /data/service/el1/public/database 0711 ddms ddms", "mkdir /data/service/el1/public/database/bundle_manager_service 02770 foundation ddms", @@ -13,10 +13,10 @@ "mkdir /data/service/el1/public/database/form_storage 02770 foundation ddms", "chown radio system /sys/power/wake_lock", "chown radio system /sys/power/wake_unlock", - "chmod 0664 /sys/power/wake_count" + "chmod 0664 /sys/power/wakeup_count" ] },{ - "name": "service:restartfoundation", + "name": "services:restartfoundation", "cmds": [ "reset appspawn", "reset accountmgr" @@ -32,8 +32,8 @@ "permission": [ "ohos.permission.INPUT_MONITORING", "ohos.permission.PERMISSION_USED_STATS", - "ohos.permission.DISTRIBUTED_DOFTBUS_CENTER", - "ohos.permission.DISTRIBUTE_DATASYNC", + "ohos.permission.DISTRIBUTED_SOFTBUS_CENTER", + "ohos.permission.DISTRIBUTED_DATASYNC", "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", "ohos.permission.INSTALL_BUNDLE", "ohos.permission.MICROPHONE" diff --git a/localCoverage/resident_service/config/fms/fms.xml b/localCoverage/resident_service/config/fms/fms.xml index 647c234..865ec4d 100644 --- a/localCoverage/resident_service/config/fms/fms.xml +++ b/localCoverage/resident_service/config/fms/fms.xml @@ -12,7 +12,7 @@ /system/lib64/libfms.z.so true - false + false 1 diff --git a/localCoverage/resident_service/config/fms/foundation.xml b/localCoverage/resident_service/config/fms/foundation.xml index 7c7ade1..aae2385 100644 --- a/localCoverage/resident_service/config/fms/foundation.xml +++ b/localCoverage/resident_service/config/fms/foundation.xml @@ -25,7 +25,7 @@ true false 1 - CoreStartPhase + CoreStartPhase 4606 @@ -35,7 +35,7 @@ true false 1 - CoreStartPhase + CoreStartPhase 4607 @@ -45,7 +45,7 @@ true false 1 - CoreStartPhase + CoreStartPhase 3299 @@ -105,7 +105,7 @@ 180 - /system/lib64/libabiliyms.z.so + /system/lib64/libabilityms.z.so true diff --git a/localCoverage/resident_service/config/notification/foundation.xml b/localCoverage/resident_service/config/notification/foundation.xml index 37c63c6..ffcb838 100644 --- a/localCoverage/resident_service/config/notification/foundation.xml +++ b/localCoverage/resident_service/config/notification/foundation.xml @@ -23,7 +23,7 @@ true false 1 - CoreStartPhase + CoreStartPhase 4606 @@ -33,7 +33,7 @@ true false 1 - CoreStartPhase + CoreStartPhase 4607 @@ -43,17 +43,7 @@ true false 1 - CoreStartPhase - - - 3203 - libans.z.so - 1301 - 3299 - 5000 - true - false - 1 + CoreStartPhase 3302 @@ -94,7 +84,7 @@ 180 - /system/lib64/libabiliyms.z.so + /system/lib64/libabilityms.z.so true diff --git a/localCoverage/resident_service/config/notification/notificatoin.cfg b/localCoverage/resident_service/config/notification/notification.cfg similarity index 79% rename from localCoverage/resident_service/config/notification/notificatoin.cfg rename to localCoverage/resident_service/config/notification/notification.cfg index 27d93e6..19528f2 100644 --- a/localCoverage/resident_service/config/notification/notificatoin.cfg +++ b/localCoverage/resident_service/config/notification/notification.cfg @@ -3,9 +3,9 @@ "name": "services:notification", "cmds": [ "mkdir /data/service/el1/public/AbilityManagerService 0711 foundation system", - "mkdir /data/service/el1/bundle 0711 system system", - "mkdir /data/service/el2/base 0711 system system", - "mkdir /data/service/el2/database 0711 system system", + "mkdir /data/storage/el1/bundle 0711 system system", + "mkdir /data/storage/el2/base 0711 system system", + "mkdir /data/storage/el2/database 0711 system system", "mkdir /data/service/el1/public/notification 0711 foundation system", "mkdir /data/service/el1/public/database 0711 ddms ddms", "mkdir /data/service/el1/public/database/bundle_manager_service 02770 foundation ddms", @@ -13,10 +13,10 @@ "mkdir /data/service/el1/public/database/form_storage 02770 foundation ddms", "chown radio system /sys/power/wake_lock", "chown radio system /sys/power/wake_unlock", - "chmod 0664 /sys/power/wake_count" + "chmod 0664 /sys/power/wakeup_count" ] },{ - "name": "service:restartfoundation", + "name": "services:restartfoundation", "cmds": [ "reset appspawn", "reset accountmgr" @@ -32,8 +32,8 @@ "permission": [ "ohos.permission.INPUT_MONITORING", "ohos.permission.PERMISSION_USED_STATS", - "ohos.permission.DISTRIBUTED_DOFTBUS_CENTER", - "ohos.permission.DISTRIBUTE_DATASYNC", + "ohos.permission.DISTRIBUTED_SOFTBUS_CENTER", + "ohos.permission.DISTRIBUTED_DATASYNC", "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", "ohos.permission.INSTALL_BUNDLE", "ohos.permission.MICROPHONE" diff --git a/localCoverage/resident_service/config/notification/notification.xml b/localCoverage/resident_service/config/notification/notification.xml index d22e44b..259bc9e 100644 --- a/localCoverage/resident_service/config/notification/notification.xml +++ b/localCoverage/resident_service/config/notification/notification.xml @@ -13,7 +13,7 @@ true - false + false 1 @@ -23,7 +23,7 @@ 3299 5000 true - false + false 1 diff --git a/localCoverage/resident_service/config/power/foundation.xml b/localCoverage/resident_service/config/power/foundation.xml index b2a9a24..8df55e1 100644 --- a/localCoverage/resident_service/config/power/foundation.xml +++ b/localCoverage/resident_service/config/power/foundation.xml @@ -22,7 +22,7 @@ true false 1 - CoreStartPhase + CoreStartPhase 4606 @@ -32,7 +32,7 @@ true false 1 - CoreStartPhase + CoreStartPhase 4607 @@ -42,7 +42,7 @@ true false 1 - CoreStartPhase + CoreStartPhase 3299 @@ -79,7 +79,7 @@ 180 - /system/lib64/libabiliyms.z.so + /system/lib64/libabilityms.z.so true diff --git a/localCoverage/resident_service/config/power/power.cfg b/localCoverage/resident_service/config/power/power.cfg index 50c6a57..216fd27 100644 --- a/localCoverage/resident_service/config/power/power.cfg +++ b/localCoverage/resident_service/config/power/power.cfg @@ -3,9 +3,9 @@ "name": "services:power", "cmds": [ "mkdir /data/service/el1/public/AbilityManagerService 0711 foundation system", - "mkdir /data/service/el1/bundle 0711 system system", - "mkdir /data/service/el2/base 0711 system system", - "mkdir /data/service/el2/database 0711 system system", + "mkdir /data/storage/el1/bundle 0711 system system", + "mkdir /data/storage/el2/base 0711 system system", + "mkdir /data/storage/el2/database 0711 system system", "mkdir /data/service/el1/public/notification 0711 foundation system", "mkdir /data/service/el1/public/database 0711 ddms ddms", "mkdir /data/service/el1/public/database/bundle_manager_service 02770 foundation ddms", @@ -13,10 +13,10 @@ "mkdir /data/service/el1/public/database/form_storage 02770 foundation ddms", "chown radio system /sys/power/wake_lock", "chown radio system /sys/power/wake_unlock", - "chmod 0664 /sys/power/wake_count" + "chmod 0664 /sys/power/wakeup_count" ] },{ - "name": "service:restartfoundation", + "name": "services:restartfoundation", "cmds": [ "reset appspawn", "reset accountmgr" @@ -32,8 +32,8 @@ "permission": [ "ohos.permission.INPUT_MONITORING", "ohos.permission.PERMISSION_USED_STATS", - "ohos.permission.DISTRIBUTED_DOFTBUS_CENTER", - "ohos.permission.DISTRIBUTE_DATASYNC", + "ohos.permission.DISTRIBUTED_SOFTBUS_CENTER", + "ohos.permission.DISTRIBUTED_DATASYNC", "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", "ohos.permission.INSTALL_BUNDLE", "ohos.permission.MICROPHONE" diff --git a/localCoverage/resident_service/config/power/power.xml b/localCoverage/resident_service/config/power/power.xml index f5187c9..2db90c5 100644 --- a/localCoverage/resident_service/config/power/power.xml +++ b/localCoverage/resident_service/config/power/power.xml @@ -7,7 +7,7 @@ libdisplaymgrservice.z.so libpowermgrservice.z.so libthermalservice.z.so - libbatrterystats_service.z.so + libbatterystats_service.z.so @@ -15,35 +15,35 @@ 3302 libbatteryservice.z.so true - false + false 1 3308 libdisplaymgrservice.z.so true - false + false 1 3301 libpowermgrservice.z.so true - false + false 1 3303 libthermalservice.z.so true - false + false 1 3304 libbatrterystats_service.z.so true - false + false 1 diff --git a/localCoverage/resident_service/config/state/foundation.xml b/localCoverage/resident_service/config/state/foundation.xml index 7153d28..d72b395 100644 --- a/localCoverage/resident_service/config/state/foundation.xml +++ b/localCoverage/resident_service/config/state/foundation.xml @@ -24,7 +24,7 @@ true false 1 - CoreStartPhase + CoreStartPhase 4606 @@ -34,7 +34,7 @@ true false 1 - CoreStartPhase + CoreStartPhase 4607 @@ -44,7 +44,7 @@ true false 1 - CoreStartPhase + CoreStartPhase 3299 @@ -97,7 +97,7 @@ 180 - /system/lib64/libabiliyms.z.so + /system/lib64/libabilityms.z.so true diff --git a/localCoverage/resident_service/config/state/state.cfg b/localCoverage/resident_service/config/state/state.cfg index 983a383..95c3172 100644 --- a/localCoverage/resident_service/config/state/state.cfg +++ b/localCoverage/resident_service/config/state/state.cfg @@ -3,9 +3,9 @@ "name": "services:state", "cmds": [ "mkdir /data/service/el1/public/AbilityManagerService 0711 foundation system", - "mkdir /data/service/el1/bundle 0711 system system", - "mkdir /data/service/el2/base 0711 system system", - "mkdir /data/service/el2/database 0711 system system", + "mkdir /data/storage/el1/bundle 0711 system system", + "mkdir /data/storage/el2/base 0711 system system", + "mkdir /data/storage/el2/database 0711 system system", "mkdir /data/service/el1/public/notification 0711 foundation system", "mkdir /data/service/el1/public/database 0711 ddms ddms", "mkdir /data/service/el1/public/database/bundle_manager_service 02770 foundation ddms", @@ -13,10 +13,10 @@ "mkdir /data/service/el1/public/database/form_storage 02770 foundation ddms", "chown radio system /sys/power/wake_lock", "chown radio system /sys/power/wake_unlock", - "chmod 0664 /sys/power/wake_count" + "chmod 0664 /sys/power/wakeup_count" ] },{ - "name": "service:restartfoundation", + "name": "services:restartfoundation", "cmds": [ "reset appspawn", "reset accountmgr" @@ -32,8 +32,8 @@ "permission": [ "ohos.permission.INPUT_MONITORING", "ohos.permission.PERMISSION_USED_STATS", - "ohos.permission.DISTRIBUTED_DOFTBUS_CENTER", - "ohos.permission.DISTRIBUTE_DATASYNC", + "ohos.permission.DISTRIBUTED_SOFTBUS_CENTER", + "ohos.permission.DISTRIBUTED_DATASYNC", "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", "ohos.permission.INSTALL_BUNDLE", "ohos.permission.MICROPHONE" diff --git a/localCoverage/resident_service/config/state/state.xml b/localCoverage/resident_service/config/state/state.xml index 5538a14..4fb86e2 100644 --- a/localCoverage/resident_service/config/state/state.xml +++ b/localCoverage/resident_service/config/state/state.xml @@ -11,7 +11,7 @@ 4009 libtel_state_registry.z.so true - false + false 1 diff --git a/localCoverage/resident_service/config/wms/foundation.xml b/localCoverage/resident_service/config/wms/foundation.xml index 2ebd10a..f653b6f 100644 --- a/localCoverage/resident_service/config/wms/foundation.xml +++ b/localCoverage/resident_service/config/wms/foundation.xml @@ -26,17 +26,7 @@ true false 1 - CoreStartPhase - - - 4606 - libwms.z.so - - - true - false - 1 - CoreStartPhase + CoreStartPhase 3299 @@ -96,7 +86,7 @@ 180 - /system/lib64/libabiliyms.z.so + /system/lib64/libabilityms.z.so true diff --git a/localCoverage/resident_service/config/wms/wms.cfg b/localCoverage/resident_service/config/wms/wms.cfg index f8ef584..8c8ccfc 100644 --- a/localCoverage/resident_service/config/wms/wms.cfg +++ b/localCoverage/resident_service/config/wms/wms.cfg @@ -3,9 +3,9 @@ "name": "services:wms", "cmds": [ "mkdir /data/service/el1/public/AbilityManagerService 0711 foundation system", - "mkdir /data/service/el1/bundle 0711 system system", - "mkdir /data/service/el2/base 0711 system system", - "mkdir /data/service/el2/database 0711 system system", + "mkdir /data/storage/el1/bundle 0711 system system", + "mkdir /data/storage/el2/base 0711 system system", + "mkdir /data/storage/el2/database 0711 system system", "mkdir /data/service/el1/public/notification 0711 foundation system", "mkdir /data/service/el1/public/database 0711 ddms ddms", "mkdir /data/service/el1/public/database/bundle_manager_service 02770 foundation ddms", @@ -13,10 +13,10 @@ "mkdir /data/service/el1/public/database/form_storage 02770 foundation ddms", "chown radio system /sys/power/wake_lock", "chown radio system /sys/power/wake_unlock", - "chmod 0664 /sys/power/wake_count" + "chmod 0664 /sys/power/wakeup_count" ] },{ - "name": "service:restartfoundation", + "name": "services:restartfoundation", "cmds": [ "reset appspawn", "reset accountmgr" @@ -32,8 +32,8 @@ "permission": [ "ohos.permission.INPUT_MONITORING", "ohos.permission.PERMISSION_USED_STATS", - "ohos.permission.DISTRIBUTED_DOFTBUS_CENTER", - "ohos.permission.DISTRIBUTE_DATASYNC", + "ohos.permission.DISTRIBUTED_SOFTBUS_CENTER", + "ohos.permission.DISTRIBUTED_DATASYNC", "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", "ohos.permission.INSTALL_BUNDLE", "ohos.permission.MICROPHONE" diff --git a/localCoverage/resident_service/config/wms/wms.xml b/localCoverage/resident_service/config/wms/wms.xml index 94265fa..e74b72e 100644 --- a/localCoverage/resident_service/config/wms/wms.xml +++ b/localCoverage/resident_service/config/wms/wms.xml @@ -13,17 +13,17 @@ true - false + false 1 CoreStartPhase 4607 - libwms.z.so + libdms.z.so true - false + false 1 CoreStartPhase diff --git a/localCoverage/resident_service/init_gcov.py b/localCoverage/resident_service/init_gcov.py index 604ba41..e580c82 100644 --- a/localCoverage/resident_service/init_gcov.py +++ b/localCoverage/resident_service/init_gcov.py @@ -62,8 +62,8 @@ def modify_init_file(developer_path, device_sn, device_ip): else: print("init.cfg file not exists") return - print(hdc_str + "shell mount -o rw,remount / > /dev/null 2&1") - subprocess.Popen(hdc_str + "shell mount -o rw,remount / > /dev/null 2&1", + print(hdc_str + "shell mount -o rw,remount / > /dev/null 2>&1") + subprocess.Popen(hdc_str + "shell mount -o rw,remount / > /dev/null 2>&1", shell=True).communicate() print(hdc_str + "file send %s %s" % (cfg_file_path, "/etc/")) subprocess.Popen(hdc_str + "file send %s %s" % (cfg_file_path, "/etc/"), @@ -171,9 +171,9 @@ def split_foundation_services(developer_path, device_sn, device_ip, process_xml_path, "/system/profile/"), shell=True).communicate() process_cfg_path = os.path.join(config_path, process_str, process_str + ".cfg") - print(hdc_str + "file send %s %s" % (process_cfg_path, "/system/init/")) + print(hdc_str + "file send %s %s" % (process_cfg_path, "/etc/init/")) subprocess.Popen(hdc_str + "file send %s %s" % ( - process_cfg_path, "/system/init/"), shell=True).communicate() + process_cfg_path, "/etc/init/"), shell=True).communicate() if flag: print(hdc_str + "shell reboot") subprocess.Popen(hdc_str + "shell reboot", shell=True).communicate() @@ -185,10 +185,10 @@ def split_foundation_services(developer_path, device_sn, device_ip, subprocess.Popen(hdc_str + "shell mount -o rw,remount /", shell=True).communicate() - subprocess.Popen(hdc_str + 'shell "rm -rf %s"' % ("/data/gcov" + home_path), + subprocess.Popen(hdc_str + 'shell "rm -fr %s"' % ("/data/gcov" + home_path), shell=True).communicate() subprocess.Popen(hdc_str + 'shell "chmod 777 /data/gcov - R"', shell=True).communicate() - subprocess.Popen(hdc_str + "shell mount -o rw,remount /", shell=True).communicate() + subprocess.Popen(hdc_str + "shell getenforce", shell=True).communicate() return diff --git a/localCoverage/resident_service/public_method.py b/localCoverage/resident_service/public_method.py index 352cfef..01f188e 100644 --- a/localCoverage/resident_service/public_method.py +++ b/localCoverage/resident_service/public_method.py @@ -36,7 +36,7 @@ def get_config_ip(filepath): data_dic[sub.tag] = sub.text if sub.text else "" ip_config = data_dic.get("ip", "") except ET.ParseError as xml_exception: - print("occurs exception:{}".format(xml_exception.agrs)) + print("occurs exception:{}".format(xml_exception.args)) return ip_config @@ -59,14 +59,14 @@ def get_sn_list(command): def get_all_part_service(): current_path = os.getcwd() - developer_path = current_path.split("/test/testfwk/developer_test")[0] + developer_path = current_path.split("/developer_test/src")[0] system_part_service_path = os.path.join( developer_path, "developer_test/localCoverage/resident_service/system_part_service.json") if os.path.exists(system_part_service_path): with open(system_part_service_path, "r") as system_text: system_text_json = json.load(system_text) system_info_dict = system_text_json["system_info_dict"] - services_component_dict = system_text_json["service_component_dict"] + services_component_dict = system_text_json["services_component_dict"] component_gcda_dict = system_text_json["component_gcda_dict"] return system_info_dict, services_component_dict, component_gcda_dict else: @@ -74,7 +74,7 @@ def get_all_part_service(): def get_system_dict_to_server_name(server_name: str, system_info_dict): - for system, server_list in system_info_dict.ites(): + for system, server_list in system_info_dict.items(): if server_name in server_list: system_info_dict_after = { system: [server_name] @@ -121,7 +121,7 @@ def get_server_dict(command): component_gcda_dict_after = { server_name: component_gcda_dict.get(server_name) } - elif " ss " in command: + elif " -ss " in command: system_name = command.split(" -ss ")[-1].split(" ")[0] server_list = system_info_dict.get(system_name) system_info_dict_after = { diff --git a/localCoverage/resident_service/pull_service_gcda.py b/localCoverage/resident_service/pull_service_gcda.py index 7a005cf..601d820 100644 --- a/localCoverage/resident_service/pull_service_gcda.py +++ b/localCoverage/resident_service/pull_service_gcda.py @@ -33,9 +33,9 @@ def attach_pid(device_ip, device_sn, process_str, component_gcda_dict, print(hdc_str + "shell chmod 777 /data/gcov -R") subprocess.Popen(hdc_str + "shell chmod 777 /data/gcov -R", shell=True).communicate() subprocess.Popen(hdc_str + "shell mount -o rw,remount /", shell=True).communicate() - locah_sh_path = os.path.join(resident_service_path, "resources", "gcov_flush.sh") - print(hdc_str + "file send %s %s" % (locah_sh_path, "/data/")) - subprocess.Popen(hdc_str + "file send %s %s" % (locah_sh_path, "/data/"), + local_sh_path = os.path.join(resident_service_path, "resources", "gcov_flush.sh") + print(hdc_str + "file send %s %s" % (local_sh_path, "/data/")) + subprocess.Popen(hdc_str + "file send %s %s" % (local_sh_path, "/data/"), shell=True).communicate() subprocess.Popen(hdc_str + "shell chmod 777 /data/gcov_flush.sh", shell=True).communicate() @@ -49,7 +49,7 @@ def attach_pid(device_ip, device_sn, process_str, component_gcda_dict, def get_gcda_file(device_ip, device_sn, process_str, component_gcda_dict, - developer_path, services_str): + developertest_path, services_str): hdc_str = "hdc -s %s:8710 -t %s" % (device_ip, device_sn) root_path = current_path.split("/test/testfwk/developer_test")[0] home_path = '/'.join(root_path.split("/")[:3]) @@ -66,7 +66,7 @@ def get_gcda_file(device_ip, device_sn, process_str, component_gcda_dict, obj_gcda_path = component_gcda_path.split("baltimore")[-1].strip("/") local_gcda_path = os.path.dirname( - os.path.join(developer_path, "reports/coverage/data/cxx", + os.path.join(developertest_path, "reports/coverage/data/cxx", services_str + "_service", obj_gcda_path)) if not os.path.exists(local_gcda_path): diff --git a/localCoverage/resident_service/system_part_service.json b/localCoverage/resident_service/system_part_service.json index 37df1f0..eb80d95 100644 --- a/localCoverage/resident_service/system_part_service.json +++ b/localCoverage/resident_service/system_part_service.json @@ -5,15 +5,15 @@ "multimedia": ["media_service", "av_session"], "resourceschedule": ["device_usage_st", "resource_schedu", "bgtaskmgr_servi"], "account": ["accountmgr"], - "telephone": ["telephone|riladapter_host"], + "telephony": ["telephony|riladapter_host"], "communication": ["netmanager", "samgr"], - "deviceprofile": ["distribuatedsche"], + "deviceprofile": ["distributedsche"], "bundlemanager": ["bms"], - "distributeddatamgr": ["pastedboard_serv"], - "filemanagement": ["com.ohos.medialibrary.medialibrarydata.entry:FileExtensionablity", "com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility"], + "distributeddatamgr": ["pasteboard_serv"], + "filemanagement": ["com.ohos.medialibrary.medialibrarydata.entry:FileExtensionAblity", "com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility"], "miscservices": ["inputmethod_ser"], "hdf": [ - "hdf_devmgr|input_host|audio_host|sample_host|fingerprint_auth_host|user_auth_host|pin_auth_host|face_auth_host|nfc_host|codec_host|wifi_host|motion_host|sensor_host|riladapter_host|hwc_host|gralloc_host|camera_host|usb_host|blue_host|audio_hdi_server_host|power_host|a2dp_host|location_host|daudio_host" + "hdf_devmgr|input_host|audio_host|sample_host|fingerprint_auth_host|user_auth_host|pin_auth_host|face_auth_host|nfc_host|codec_host|wifi_host|motion_host|sensor_host|riladapter_host|hwc_host|gralloc_host|camera_host|usb_host|blue_host|audio_hdi_server_host|power_host|a2dp_host|location_host|dcamera_host|daudio_host" ], "notification": ["ans"], "graphic": ["render_service"], @@ -30,22 +30,22 @@ "power_mgr": ["power"], "data_share": ["com.ohos.medialibrary.medialibrarydata"], "dinput": ["dinput"], - "dsoftbus": ["dsoftbus_service"] + "dsoftbus": ["dsoftbus_server"] }, "services_component_dict": { "wms": ["window_manager"], "bms": ["bundle_framework"], - "power": ["battery_manager", "battery_statistics", "display_manager", "thermal_manager"], - "huks_service": ["huks_service"], + "power": ["battery_manager", "battery_statistics", "display_manager", "power_manager", "thermal_manager"], + "huks_service": ["huks_standard"], "dlp_permission": ["dlp_permission_service"], "media_service": ["multimedia_player_framework"], "device_usage_st": ["device_usage_statistics"], "accountmgr": ["os_account"], "av_session": ["multimedia_av_session"], "accesstoken_ser|privacy_service|token_sync_ser": ["access_token"], - "telephone|raladapter_host": [ + "telephony|riladapter_host": [ "call_manager", "cellular_call", "cellular_data", "core_service","data_storage", - "ril_adapter", "state_register", "ims", "sms_mms" + "ril_adapter", "state_registry", "ims", "sms_mms" ], "netmanager": ["netmanager_base", "netmanager_ext", "netstack"], "samgr": ["samgr"], @@ -53,10 +53,10 @@ "resource_schedu": ["efficiency_manager"], "bgtaskmgr_servi": ["background_task_mgr"], "pasteboard_serv": ["pasteboard"], - "com.ohos.medialibrary.medialibrarydata.entry:FileExtensionablity|com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility": ["filemanagement"], + "com.ohos.medialibrary.medialibrarydata.entry:FileExtensionAblity|com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility": ["filemanagement"], "com.ohos.medialibrary.medialibrarydata": ["data_share"], "inputmethod_ser": ["imf"], - "hdf_devmgr|input_host|audio_host|sample_host|fingerprint_auth_host|user_auth_host|pin_auth_host|face_auth_host|nfc_host|codec_host|wifi_host|motion_host|sensor_host|riladapter_host|hwc_host|gralloc_host|camera_host|usb_host|blue_host|audio_hdi_server_host|power_host|a2dp_host|location_host|daudio_host": [ + "hdf_devmgr|input_host|audio_host|sample_host|fingerprint_auth_host|user_auth_host|pin_auth_host|face_auth_host|nfc_host|codec_host|wifi_host|motion_host|sensor_host|riladapter_host|hwc_host|gralloc_host|camera_host|usb_host|blue_host|audio_hdi_server_host|power_host|a2dp_host|location_host|dcamera_host|daudio_host": [ "drivers_peripheral_battery", "drivers_peripheral_motion", "drivers_peripheral_sensor", "drivers_peripheral_thermal", "hdf", "hdf_core", "hidl_adapter","drivers_peripheral_input", "drivers_peripheral_power" @@ -70,12 +70,12 @@ "msdp": ["algorithm", "geofence", "movement", "timeline", "spatialawareness_manager_native", "msdp"], "screenlock_serv": ["screenlock"], "dlp_credential_service_sa": ["dlp_credential_service"], - "wallpaper": ["theme", "wallpaper_mgr"], - "hilogd|hidumper_service": ["hiviewfdx"], - "dinput": ["distributed_input_sourcemanager_test", "distribute_input_sourcetrans_test"], + "wallpaper_servi": ["theme", "wallpaper_mgr"], + "hilogd|hidumper_service": ["hiviewdfx"], + "dinput": ["distributed_input_sourcemanager_test", "distributed_input_sourcetrans_test"], "softbus_server": [ - "BusCenterHeartbeatSdkTest", "BusCenterMetaModeSdkTest", "BusCenterSdkTest", - "BusCenterServerTest", "ClientBusCenterMgrTest", "ClientBusMangerTest, SetDataChangeTest" + "BusCenterHeartbeatSdkTest", "BusCenterMetaNodeSdkTest", "BusCenterSdkTest", + "BusCenterServerTest", "ClientBusCenterMgrTest", "ClientBusMangerTest", "SetDataChangeTest" ] }, "component_gcda_dict": { @@ -84,10 +84,10 @@ "dlp_permission": ["out/baltimore/obj/base/security/dlp_permission_service"], "media_service": ["out/baltimore/obj/foundation/multimedia/player_framework"], "device_usage_st": ["out/baltimore/obj/foundation/resourceschedule"], - "accountmgr": ["out/baltimore/obj/base/os_account"], + "accountmgr": ["out/baltimore/obj/base/account/os_account"], "av_session": ["out/baltimore/obj/foundation/multimedia/av_session"], "accesstoken_ser|privacy_service|token_sync_ser": ["out/baltimore/obj/base/security/access_token"], - "telephone|riladaper_host": ["out/baltimore/obj/base/telephone"], + "telephony|riladapter_host": ["out/baltimore/obj/base/telephony"], "netmanager": ["out/baltimore/obj/foundation/communication"], "samgr": ["out/baltimore/obj/foundation/systemabilitymgr"], "distributedsche": ["out/baltimore/obj/foundation/ability/dmsfwk", "out/baltimore/obj/foundation/deviceprofile"], @@ -95,9 +95,9 @@ "bgtaskmgr_servi": ["out/baltimore/obj/foundation/resourceschedule/background_task_mgr"], "bms": ["out/baltimore/obj/foundation/bundlemanager/bundle_framework"], "pasteboard_serv": ["out/baltimore/obj/foundation/distributeddatamgr"], - "com.ohos.medialibrary.medialibrarydata.entry:FileExtensionablity|com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility": ["out/baltimore/obj/foundation/multimedia", "out/baltimore/obj/foundation/filemanagement"], + "com.ohos.medialibrary.medialibrarydata.entry:FileExtensionAblity|com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility": ["out/baltimore/obj/foundation/multimedia", "out/baltimore/obj/foundation/filemanagement"], "inputmethod_ser": ["out/baltimore/obj/base/inputmethod/imf"], - "hdf_devmgr|input_host|audio_host|sample_host|fingerprint_auth_host|user_auth_host|pin_auth_host|face_auth_host|nfc_host|codec_host|wifi_host|motion_host|sensor_host|riladapter_host|hwc_host|gralloc_host|camera_host|usb_host|blue_host|audio_hdi_server_host|power_host|a2dp_host|location_host|daudio_host": [ + "hdf_devmgr|input_host|audio_host|sample_host|fingerprint_auth_host|user_auth_host|pin_auth_host|face_auth_host|nfc_host|codec_host|wifi_host|motion_host|sensor_host|riladapter_host|hwc_host|gralloc_host|camera_host|usb_host|blue_host|audio_hdi_server_host|power_host|a2dp_host|location_host|dcamera_host|daudio_host": [ "out/baltimore/obj/drivers" ], "ans": ["out/baltimore/obj/base/notification/distributed_notification_service"], @@ -113,7 +113,7 @@ "hilogd|hidumper_service": ["out/baltimore/obj/base/hiviewdfx"], "power": ["out/baltimore/obj/base/powermgr"], "com.ohos.medialibrary.medialibrarydata": ["out/baltimore/obj/foundation/distributeddatamgr/data_share"], - "dinput": ["out/baltimore/obj/foundation/distributedhardware/distribute_input"], + "dinput": ["out/baltimore/obj/foundation/distributedhardware/distributed_input"], "softbus_server": ["out/baltimore/obj/foundation/communication/dsoftbus"] } } \ No newline at end of file diff --git a/localCoverage/restore_comment/after_lcov_branch.py b/localCoverage/restore_comment/after_lcov_branch.py index 56d689d..3f24363 100644 --- a/localCoverage/restore_comment/after_lcov_branch.py +++ b/localCoverage/restore_comment/after_lcov_branch.py @@ -30,7 +30,7 @@ def get_file_list(find_path, postfix=""): file_list.append(fn) else: file_list.append(fn) - return + return file_list def get_file_list_by_postfix(path, postfix=""): @@ -63,7 +63,7 @@ def recover_source_file(cpp_arr_list, keys): write_fp.write(line.strip("\n").strip("\n\r").replace("//LCOV_EXCL_BR_LINE", "")) write_fp.write("\n") else: - write_fp.write("\n") + write_fp.write(line) os.remove(path) subprocess.Popen("mv %s %s" % (path.split(".")[0] + "_bk.html", path), @@ -76,5 +76,5 @@ if __name__ == '__main__': root_path = current_path.split("/test/testfwk/developer_test")[0] html_path = os.path.join( root_path, "test/testfwk/developer_test/localCoverage/codeCoverage/results/coverage/reports/cxx/html") - cpp_arr_list = get_file_list(html_path, ".html") + cpp_arr_list = get_file_list_by_postfix(html_path, ".html") recover_source_file(cpp_arr_list, keys=["//LCOV_EXCL_BR_LINE"]) diff --git a/localCoverage/restore_comment/build_befrore_lcov_branch.py b/localCoverage/restore_comment/build_befrore_lcov_branch.py index 11bc943..727bb5c 100644 --- a/localCoverage/restore_comment/build_befrore_lcov_branch.py +++ b/localCoverage/restore_comment/build_befrore_lcov_branch.py @@ -99,7 +99,7 @@ def rewrite_source_file(source_path_list: list): print("[********** End Rewrite Source File **********]") -def add_locv(subsystem_config_path): +def add_lcov(subsystem_config_path): try: with open(subsystem_config_path, "r", encoding="utf-8", errors="ignore") as fp: data_dict = json.load(fp) @@ -161,4 +161,4 @@ if __name__ == '__main__': get_part_config_json(part_name_list, all_system_info_path, part_info_path) # 执行修改 - add_locv(part_info_path) + add_lcov(part_info_path) -- Gitee From 8f199a30091d0e3763cb026cedf335c4b882d061 Mon Sep 17 00:00:00 2001 From: caojiale1 Date: Mon, 20 Feb 2023 18:32:47 +0800 Subject: [PATCH 04/14] Signed-off-by:caojiale1 --- .../codeCoverage/codeCoverage_gcov_lcov.py | 17 ++++++++--------- localCoverage/codeCoverage/llvm-gcov.sh | 2 +- localCoverage/coverage_tools.py | 4 ++-- localCoverage/resident_service/init_gcov.py | 6 +++--- .../resident_service/public_method.py | 10 +++++----- .../resident_service/pull_service_gcda.py | 6 +++--- .../resident_service/resources/gcov_flush.sh | 18 ++++++++++++++++-- .../resident_service/system_part_service.json | 8 ++++---- .../restore_comment/after_lcov_branch.py | 4 ++-- ...v_branch.py => build_before_lcov_branch.py} | 0 10 files changed, 44 insertions(+), 31 deletions(-) rename localCoverage/restore_comment/{build_befrore_lcov_branch.py => build_before_lcov_branch.py} (100%) diff --git a/localCoverage/codeCoverage/codeCoverage_gcov_lcov.py b/localCoverage/codeCoverage/codeCoverage_gcov_lcov.py index e70b144..02fbb1c 100644 --- a/localCoverage/codeCoverage/codeCoverage_gcov_lcov.py +++ b/localCoverage/codeCoverage/codeCoverage_gcov_lcov.py @@ -141,8 +141,8 @@ def get_gcno_files(cov_path, dir_name): gcda_list = get_files_from_dir(dir_name, ".gcda") for file_name in gcda_list: gcno_name = os.path.splitext(file_name)[0] + ".gcno" - gcno_path = os.path.join(os.path.join(CODEPATH, OUTPUT), - gcda_strip_path, gcno_name) + gcno_path = os.path.join( + os.path.join(CODEPATH, OUTPUT), gcda_strip_path, gcno_name) if os.path.exists(gcno_path): if os.path.exists(gcno_path): shutil.copy(gcno_path, dir_name) @@ -157,12 +157,12 @@ def get_module_gcno_files(cov_path, dir_name): def gen_subsystem_trace_info(subsystem, data_dir, test_dir): src_dir = os.path.join(CODEPATH, OUTPUT) - single_info_path = os.path.join(CODEPATH, REPORT_PATH, - "single_test", test_dir) + single_info_path = os.path.join( + CODEPATH, REPORT_PATH, "single_test", test_dir) if not os.path.exists(single_info_path): os.makedirs(single_info_path) - output_name = os.path.join(CODEPATH, single_info_path, - subsystem +"_output.info") + output_name = os.path.join( + CODEPATH, single_info_path, subsystem +"_output.info") if not os.path.exists(src_dir): print("Sours path %s not exist!", src_dir) return @@ -255,9 +255,8 @@ def merge_info(report_dir): for subsystem in subsystem_name_list: trace_file_name = os.path.join(report_dir, subsystem) trace_file_list.append(trace_file_name) - cmd = "lcov -a {} -o {}".format(" -a ".join(trace_file_list), - os.path.join( - report_dir, "ohos_codeCoverage.info")) + cmd = "lcov -a {} -o {}".format( + " -a ".join(trace_file_list), os.path.join(report_dir, "ohos_codeCoverage.info")) execute_command(cmd) diff --git a/localCoverage/codeCoverage/llvm-gcov.sh b/localCoverage/codeCoverage/llvm-gcov.sh index 4045480..89814ab 100644 --- a/localCoverage/codeCoverage/llvm-gcov.sh +++ b/localCoverage/codeCoverage/llvm-gcov.sh @@ -1,4 +1,4 @@ -# !/bin/bash +#! /bin/bash # # Copyright (c) 2023 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/localCoverage/coverage_tools.py b/localCoverage/coverage_tools.py index 1d54e4e..bacc5b7 100644 --- a/localCoverage/coverage_tools.py +++ b/localCoverage/coverage_tools.py @@ -112,7 +112,7 @@ def get_subsystem_name(test_part_list): subsystem_list = [] for part in test_part_list: for key in subsystem_info.keys(): - if part in subsystem_info.keys() and key not in subsystem_list: + if part in subsystem_info.get(key) and key not in subsystem_list: subsystem_list.append(key) subsystem_str = ','.join(list(map(str, subsystem_list))) return subsystem_str @@ -172,7 +172,7 @@ if __name__ == '__main__': # 源代码还原 after_lcov_branch_path = os.path.join( - root_path, "test/testfwk/developer_test/localCoverage/restore_comment/after_locv_branch.py") + root_path, "test/testfwk/developer_test/localCoverage/restore_comment/after_lcov_branch.py") subprocess.run("python3 %s " % after_lcov_branch_path, shell=True) restore_source_code_path = os.path.join( root_path, "test/testfwk/developer_test/localCoverage/restore_comment/restore_source_code.py") diff --git a/localCoverage/resident_service/init_gcov.py b/localCoverage/resident_service/init_gcov.py index e580c82..44b6fbf 100644 --- a/localCoverage/resident_service/init_gcov.py +++ b/localCoverage/resident_service/init_gcov.py @@ -30,7 +30,7 @@ def modify_init_file(developer_path, device_sn, device_ip): """ hdc_str = "hdc -s %s:8710 -t %s" % (device_ip, device_sn) recv_path = os.path.join(developer_path, "localCoverage/resident_service/resources") - print() + print(hdc_str + "file recv /etc/init.cfg %s" % recv_path) subprocess.Popen(hdc_str + "file recv /etc/init.cfg %s" % recv_path, shell=True).communicate() recv_restores_path = os.path.join(recv_path, "restores_environment") @@ -95,7 +95,7 @@ def modify_faultloggerd_file(developer_path, device_sn, device_ip): shell=True).communicate() subprocess.Popen(hdc_str + "file send %s %s" % (so_path, "/system/lib64/"), shell=True).communicate() - subprocess.Popen(hdc_str + "shell sed -i 's/enforcing/permissive/g' /system/etc.selinux/config", + subprocess.Popen(hdc_str + "shell sed -i 's/enforcing/permissive/g' /system/etc/selinux/config", shell=True).communicate() recv_path = os.path.join(developer_path, "localCoverage/resident_service/resources") @@ -178,7 +178,7 @@ def split_foundation_services(developer_path, device_sn, device_ip, print(hdc_str + "shell reboot") subprocess.Popen(hdc_str + "shell reboot", shell=True).communicate() while True: - after_sn_list = get_sn_list("hdc -s" + device_ip + ":8710 list targets") + after_sn_list = get_sn_list("hdc -s %s:8710 list targets" % device_ip) time.sleep(10) if device_sn in after_sn_list: break diff --git a/localCoverage/resident_service/public_method.py b/localCoverage/resident_service/public_method.py index 01f188e..bd40bbe 100644 --- a/localCoverage/resident_service/public_method.py +++ b/localCoverage/resident_service/public_method.py @@ -116,11 +116,11 @@ def get_server_dict(command): } server_name = server break - if server_name: - system_info_dict_after = get_system_dict_to_server_name(server_name, system_info_dict) - component_gcda_dict_after = { - server_name: component_gcda_dict.get(server_name) - } + if server_name: + system_info_dict_after = get_system_dict_to_server_name(server_name, system_info_dict) + component_gcda_dict_after = { + server_name: component_gcda_dict.get(server_name) + } elif " -ss " in command: system_name = command.split(" -ss ")[-1].split(" ")[0] server_list = system_info_dict.get(system_name) diff --git a/localCoverage/resident_service/pull_service_gcda.py b/localCoverage/resident_service/pull_service_gcda.py index 601d820..a8a1278 100644 --- a/localCoverage/resident_service/pull_service_gcda.py +++ b/localCoverage/resident_service/pull_service_gcda.py @@ -98,10 +98,10 @@ def get_service_list(device_ip, device_sn, system_info_dict, services_component_ return if len(service_list) > 0: for process_str in service_list: - service_list = process_str.split("|") - for service_str in service_list: + services_list = process_str.split("|") + for services_str in services_list: attach_pid(device_ip, device_sn, process_str, component_gcda_dict, - developer_path, resident_service_path, service_str) + developer_path, resident_service_path, services_str) return diff --git a/localCoverage/resident_service/resources/gcov_flush.sh b/localCoverage/resident_service/resources/gcov_flush.sh index d8a5c9e..6a65181 100644 --- a/localCoverage/resident_service/resources/gcov_flush.sh +++ b/localCoverage/resident_service/resources/gcov_flush.sh @@ -1,7 +1,21 @@ -#!/bin/sh +#! /bin/bash +# +# Copyright (c) 2023 Huawei Device Co., Ltd. +# 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. +# + SERVER_NAME=$1 -# pid=`pgrep -l $SERVER_NAME |awk '{print $1}'` ip_addrs=`pgrep -f $SERVER_NAME` echo $ip_addrs kill -SIGUSR2 $ip_addrs \ No newline at end of file diff --git a/localCoverage/resident_service/system_part_service.json b/localCoverage/resident_service/system_part_service.json index eb80d95..700db72 100644 --- a/localCoverage/resident_service/system_part_service.json +++ b/localCoverage/resident_service/system_part_service.json @@ -10,7 +10,7 @@ "deviceprofile": ["distributedsche"], "bundlemanager": ["bms"], "distributeddatamgr": ["pasteboard_serv"], - "filemanagement": ["com.ohos.medialibrary.medialibrarydata.entry:FileExtensionAblity", "com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility"], + "filemanagement": ["com.ohos.medialibrary.medialibrarydata.entry:FileExtensionAbility", "com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility"], "miscservices": ["inputmethod_ser"], "hdf": [ "hdf_devmgr|input_host|audio_host|sample_host|fingerprint_auth_host|user_auth_host|pin_auth_host|face_auth_host|nfc_host|codec_host|wifi_host|motion_host|sensor_host|riladapter_host|hwc_host|gralloc_host|camera_host|usb_host|blue_host|audio_hdi_server_host|power_host|a2dp_host|location_host|dcamera_host|daudio_host" @@ -30,7 +30,7 @@ "power_mgr": ["power"], "data_share": ["com.ohos.medialibrary.medialibrarydata"], "dinput": ["dinput"], - "dsoftbus": ["dsoftbus_server"] + "dsoftbus": ["softbus_server"] }, "services_component_dict": { "wms": ["window_manager"], @@ -53,7 +53,7 @@ "resource_schedu": ["efficiency_manager"], "bgtaskmgr_servi": ["background_task_mgr"], "pasteboard_serv": ["pasteboard"], - "com.ohos.medialibrary.medialibrarydata.entry:FileExtensionAblity|com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility": ["filemanagement"], + "com.ohos.medialibrary.medialibrarydata.entry:FileExtensionAbility|com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility": ["filemanagement"], "com.ohos.medialibrary.medialibrarydata": ["data_share"], "inputmethod_ser": ["imf"], "hdf_devmgr|input_host|audio_host|sample_host|fingerprint_auth_host|user_auth_host|pin_auth_host|face_auth_host|nfc_host|codec_host|wifi_host|motion_host|sensor_host|riladapter_host|hwc_host|gralloc_host|camera_host|usb_host|blue_host|audio_hdi_server_host|power_host|a2dp_host|location_host|dcamera_host|daudio_host": [ @@ -95,7 +95,7 @@ "bgtaskmgr_servi": ["out/baltimore/obj/foundation/resourceschedule/background_task_mgr"], "bms": ["out/baltimore/obj/foundation/bundlemanager/bundle_framework"], "pasteboard_serv": ["out/baltimore/obj/foundation/distributeddatamgr"], - "com.ohos.medialibrary.medialibrarydata.entry:FileExtensionAblity|com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility": ["out/baltimore/obj/foundation/multimedia", "out/baltimore/obj/foundation/filemanagement"], + "com.ohos.medialibrary.medialibrarydata.entry:FileExtensionAbility|com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility": ["out/baltimore/obj/foundation/multimedia", "out/baltimore/obj/foundation/filemanagement"], "inputmethod_ser": ["out/baltimore/obj/base/inputmethod/imf"], "hdf_devmgr|input_host|audio_host|sample_host|fingerprint_auth_host|user_auth_host|pin_auth_host|face_auth_host|nfc_host|codec_host|wifi_host|motion_host|sensor_host|riladapter_host|hwc_host|gralloc_host|camera_host|usb_host|blue_host|audio_hdi_server_host|power_host|a2dp_host|location_host|dcamera_host|daudio_host": [ "out/baltimore/obj/drivers" diff --git a/localCoverage/restore_comment/after_lcov_branch.py b/localCoverage/restore_comment/after_lcov_branch.py index 3f24363..2154ef8 100644 --- a/localCoverage/restore_comment/after_lcov_branch.py +++ b/localCoverage/restore_comment/after_lcov_branch.py @@ -60,7 +60,7 @@ def recover_source_file(cpp_arr_list, keys): with open(path.split(".")[0] + "_bk.html", "w") as write_fp: for line in code_lines: if key in line: - write_fp.write(line.strip("\n").strip("\n\r").replace("//LCOV_EXCL_BR_LINE", "")) + write_fp.write(line.strip("\n").strip("\n\r").replace(" //LCOV_EXCL_BR_LINE", "")) write_fp.write("\n") else: write_fp.write(line) @@ -77,4 +77,4 @@ if __name__ == '__main__': html_path = os.path.join( root_path, "test/testfwk/developer_test/localCoverage/codeCoverage/results/coverage/reports/cxx/html") cpp_arr_list = get_file_list_by_postfix(html_path, ".html") - recover_source_file(cpp_arr_list, keys=["//LCOV_EXCL_BR_LINE"]) + recover_source_file(cpp_arr_list, keys=[" //LCOV_EXCL_BR_LINE"]) diff --git a/localCoverage/restore_comment/build_befrore_lcov_branch.py b/localCoverage/restore_comment/build_before_lcov_branch.py similarity index 100% rename from localCoverage/restore_comment/build_befrore_lcov_branch.py rename to localCoverage/restore_comment/build_before_lcov_branch.py -- Gitee From b6aad95e2c61bcc4cce468b8c40f43e1cdf5ee35 Mon Sep 17 00:00:00 2001 From: caojiale1 Date: Mon, 20 Feb 2023 19:21:43 +0800 Subject: [PATCH 05/14] Signed-off-by:caojiale1 --- localCoverage/resident_service/config/ams/foundation.xml | 2 -- localCoverage/resident_service/config/call/foundation.xml | 2 +- localCoverage/resident_service/config/fms/fms.xml | 2 +- localCoverage/resident_service/config/power/power.xml | 2 +- localCoverage/resident_service/resources/sign.cpp | 2 +- src/core/command/run.py | 4 ++-- 6 files changed, 6 insertions(+), 8 deletions(-) diff --git a/localCoverage/resident_service/config/ams/foundation.xml b/localCoverage/resident_service/config/ams/foundation.xml index 4ba1cf5..6b8da40 100644 --- a/localCoverage/resident_service/config/ams/foundation.xml +++ b/localCoverage/resident_service/config/ams/foundation.xml @@ -40,8 +40,6 @@ 4607 libwms.z.so - 1301 - 60000 true false 1 diff --git a/localCoverage/resident_service/config/call/foundation.xml b/localCoverage/resident_service/config/call/foundation.xml index de92b80..a8e632c 100644 --- a/localCoverage/resident_service/config/call/foundation.xml +++ b/localCoverage/resident_service/config/call/foundation.xml @@ -97,7 +97,7 @@ 180 - /system/lib64/libabiliyms.z.so + /system/lib64/libabilityms.z.so true diff --git a/localCoverage/resident_service/config/fms/fms.xml b/localCoverage/resident_service/config/fms/fms.xml index 865ec4d..abecd76 100644 --- a/localCoverage/resident_service/config/fms/fms.xml +++ b/localCoverage/resident_service/config/fms/fms.xml @@ -3,7 +3,7 @@ foundation - /system/lib64/libbms.z.so + /system/lib64/libfms.z.so diff --git a/localCoverage/resident_service/config/power/power.xml b/localCoverage/resident_service/config/power/power.xml index 2db90c5..a9f99c8 100644 --- a/localCoverage/resident_service/config/power/power.xml +++ b/localCoverage/resident_service/config/power/power.xml @@ -41,7 +41,7 @@ 3304 - libbatrterystats_service.z.so + libbatterystats_service.z.so true false 1 diff --git a/localCoverage/resident_service/resources/sign.cpp b/localCoverage/resident_service/resources/sign.cpp index 98948d1..619b0f8 100644 --- a/localCoverage/resident_service/resources/sign.cpp +++ b/localCoverage/resident_service/resources/sign.cpp @@ -26,7 +26,7 @@ void ctor() sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; for (i = 0; i < sizeof (sigs)/ sizeof (sigs[0]); ++i){ - if (sigaction(sigs[i], &sa, NULL == -1)){ + if (sigaction(sigs[i], &sa, NULL) == -1){ cout << "Could not set signal handler" << endl; } } diff --git a/src/core/command/run.py b/src/core/command/run.py index ccd6757..67cd37e 100644 --- a/src/core/command/run.py +++ b/src/core/command/run.py @@ -189,7 +189,7 @@ class Run(object): LOG.error("The test file list is empty.") return if options.coverage and platform.system() != "Windows": - coverage_path = os.path.join(sys.framework_root_dir, "reports/coverage.py") + coverage_path = os.path.join(sys.framework_root_dir, "reports/coverage") if os.path.exists(coverage_path): coverage_process = subprocess.Popen("rm -rf %s" % coverage_path, shell=True) coverage_process.communicate() @@ -279,7 +279,7 @@ class Run(object): sys.framework_root_dir, "localCoverage/resident_service/pull_service_gcda.py") if os.path.exists(pull_service_gcov_path): subprocess.run("python3 %s command_str=%s" % ( - get_build_output_path, current_raw_cmd), shell=True) + pull_service_gcov_path, current_raw_cmd), shell=True) else: print(f"{pull_service_gcov_path} not exists.") -- Gitee From abb5f5bfbf5a6e52c1bbbbde09fc3e9719611609 Mon Sep 17 00:00:00 2001 From: caojiale1 Date: Mon, 20 Feb 2023 19:32:24 +0800 Subject: [PATCH 06/14] Signed-off-by:caojiale1 --- src/core/driver/drivers.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/core/driver/drivers.py b/src/core/driver/drivers.py index f7a4771..c13d37f 100644 --- a/src/core/driver/drivers.py +++ b/src/core/driver/drivers.py @@ -407,13 +407,15 @@ class ResultManager(object): "exec")) target_name = "obj" + tests_path = self.config.testcases_path + test_type = self.testsuite_path.split(tests_path)[1].strip(os.sep).split(os.sep)[0] cxx_cov_path = os.path.abspath(os.path.join( self.result_rootpath, "..", "coverage", "data", "cxx", - self.testsuite_name + '_' + self.config.testtype[0])) + self.testsuite_name + '_' + test_type)) if self.is_exist_target_in_device(DEFAULT_TEST_PATH, target_name): if not os.path.exists(cxx_cov_path): @@ -429,8 +431,8 @@ class ResultManager(object): os.remove(tar_path) else: subprocess.Popen("tar -zxf %s -C %s > /dev/null 2>&1" % - (tar_path, cxx_cov_path), shell=True) - subprocess.Popen("rm -rf %s" % tar_path, shell=True) + (tar_path, cxx_cov_path), shell=True).communicate() + subprocess.Popen("rm -rf %s" % tar_path, shell=True).communicate() ############################################################################## -- Gitee From 87410a3a2399dbbd5e4abbbb4964ab27254b37dc Mon Sep 17 00:00:00 2001 From: caojiale1 Date: Wed, 22 Feb 2023 15:52:41 +0800 Subject: [PATCH 07/14] Signed-off-by:caojiale1 --- localCoverage/resident_service/init_gcov.py | 6 +++--- localCoverage/resident_service/pull_service_gcda.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/localCoverage/resident_service/init_gcov.py b/localCoverage/resident_service/init_gcov.py index 44b6fbf..e6b0cee 100644 --- a/localCoverage/resident_service/init_gcov.py +++ b/localCoverage/resident_service/init_gcov.py @@ -28,7 +28,7 @@ def modify_init_file(developer_path, device_sn, device_ip): """ /etc/init.cfg文件添加cmds """ - hdc_str = "hdc -s %s:8710 -t %s" % (device_ip, device_sn) + hdc_str = "hdc -s %s:8710 -t %s " % (device_ip, device_sn) recv_path = os.path.join(developer_path, "localCoverage/resident_service/resources") print(hdc_str + "file recv /etc/init.cfg %s" % recv_path) subprocess.Popen(hdc_str + "file recv /etc/init.cfg %s" % recv_path, @@ -76,7 +76,7 @@ def modify_init_file(developer_path, device_sn, device_ip): def modify_faultloggerd_file(developer_path, device_sn, device_ip): - hdc_str = "hdc -s %s:8710 -t %s" % (device_ip, device_sn) + hdc_str = "hdc -s %s:8710 -t %s " % (device_ip, device_sn) so_path = os.path.join( developer_path, "localCoverage/resident_service/resources/libgcov_dump_sign.z.so") _, system_lib = subprocess.getstatusoutput( @@ -142,7 +142,7 @@ def split_foundation_services(developer_path, device_sn, device_ip, resident_service_path, "resources", "restores_environment") xml_restores_path = os.path.join(restores_path, "foundation.xml") - hdc_str = "hdc -s %s:8710 -t %s" % (device_ip, device_sn) + hdc_str = "hdc -s %s:8710 -t %s " % (device_ip, device_sn) if not os.path.exists(xml_restores_path): print(hdc_str + "file recv /system/profile/foundation.xml %s" % restores_path) subprocess.Popen(hdc_str + "file recv /system/profile/foundation.xml %s" % restores_path, diff --git a/localCoverage/resident_service/pull_service_gcda.py b/localCoverage/resident_service/pull_service_gcda.py index a8a1278..0faf51c 100644 --- a/localCoverage/resident_service/pull_service_gcda.py +++ b/localCoverage/resident_service/pull_service_gcda.py @@ -29,7 +29,7 @@ def attach_pid(device_ip, device_sn, process_str, component_gcda_dict, 1. 在设备里ps -ef | grep SERVICE 获取进程号 2. kill - '信号' pid """ - hdc_str = "hdc -s %s:8710 -t %s" % (device_ip, device_sn) + hdc_str = "hdc -s %s:8710 -t %s " % (device_ip, device_sn) print(hdc_str + "shell chmod 777 /data/gcov -R") subprocess.Popen(hdc_str + "shell chmod 777 /data/gcov -R", shell=True).communicate() subprocess.Popen(hdc_str + "shell mount -o rw,remount /", shell=True).communicate() @@ -50,7 +50,7 @@ def attach_pid(device_ip, device_sn, process_str, component_gcda_dict, def get_gcda_file(device_ip, device_sn, process_str, component_gcda_dict, developertest_path, services_str): - hdc_str = "hdc -s %s:8710 -t %s" % (device_ip, device_sn) + hdc_str = "hdc -s %s:8710 -t %s " % (device_ip, device_sn) root_path = current_path.split("/test/testfwk/developer_test")[0] home_path = '/'.join(root_path.split("/")[:3]) gcda_path = "/data/gcov" + root_path -- Gitee From a5dcf02d3fdb138c789be9ef6808d27c8544be51 Mon Sep 17 00:00:00 2001 From: caojiale1 Date: Sat, 25 Feb 2023 17:02:35 +0800 Subject: [PATCH 08/14] Signed-off-by:caojiale1 --- .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 176 bytes localCoverage/all_subsystem_config.json | 4 +- .../codeCoverage/codeCoverage_gcov_lcov.py | 15 +- .../codeCoverage/mutilProcess_CodeCoverage.py | 41 +-- localCoverage/coverage_tools.py | 112 +++--- .../interfaceCoverage/get_innerkits_json.py | 10 +- .../interfaceCoverage_gcov_lcov.py | 26 +- localCoverage/interfaceCoverage/makeReport.py | 4 +- localCoverage/resident_service/init_gcov.py | 6 +- .../resident_service/public_method.py | 5 +- .../resident_service/pull_service_gcda.py | 14 +- .../resources/libgcov_dump_sign.z.so | 3 + .../resident_service/system_part_service.json | 74 ++-- ...cov_branch.py => build_before_generate.py} | 329 +++++++++--------- .../restore_comment/restore_source_code.py | 29 +- src/core/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 171 bytes src/core/__pycache__/common.cpython-37.pyc | Bin 0 -> 913 bytes src/core/__pycache__/constants.cpython-37.pyc | Bin 0 -> 3814 bytes src/core/__pycache__/exception.cpython-37.pyc | Bin 0 -> 2607 bytes src/core/__pycache__/utils.cpython-37.pyc | Bin 0 -> 4969 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 179 bytes .../__pycache__/console.cpython-37.pyc | Bin 0 -> 11633 bytes .../__pycache__/display.cpython-37.pyc | Bin 0 -> 9406 bytes .../distribute_execute.cpython-37.pyc | Bin 0 -> 1781 bytes .../command/__pycache__/gen.cpython-37.pyc | Bin 0 -> 1815 bytes .../__pycache__/parameter.cpython-37.pyc | Bin 0 -> 2034 bytes .../command/__pycache__/run.cpython-37.pyc | Bin 0 -> 10229 bytes src/core/command/run.py | 10 +- .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 178 bytes .../__pycache__/config_manager.cpython-37.pyc | Bin 0 -> 10086 bytes .../parse_parts_config.cpython-37.pyc | Bin 0 -> 2592 bytes .../resource_manager.cpython-37.pyc | Bin 0 -> 7385 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 178 bytes .../driver/__pycache__/drivers.cpython-37.pyc | Bin 0 -> 26772 bytes .../__pycache__/lite_driver.cpython-37.pyc | Bin 0 -> 15834 bytes .../driver/__pycache__/parser.cpython-37.pyc | Bin 0 -> 1188 bytes src/core/driver/drivers.py | 7 +- .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 180 bytes .../testcase_manager.cpython-37.pyc | Bin 0 -> 7243 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 179 bytes .../__pycache__/kit_lite.cpython-37.pyc | Bin 0 -> 4605 bytes src/main/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 294 bytes .../_init_global_config.cpython-37.pyc | Bin 0 -> 2236 bytes 43 files changed, 338 insertions(+), 351 deletions(-) create mode 100644 localCoverage/__pycache__/__init__.cpython-37.pyc create mode 100644 localCoverage/resident_service/resources/libgcov_dump_sign.z.so rename localCoverage/restore_comment/{build_before_lcov_branch.py => build_before_generate.py} (97%) create mode 100644 src/core/__pycache__/__init__.cpython-37.pyc create mode 100644 src/core/__pycache__/common.cpython-37.pyc create mode 100644 src/core/__pycache__/constants.cpython-37.pyc create mode 100644 src/core/__pycache__/exception.cpython-37.pyc create mode 100644 src/core/__pycache__/utils.cpython-37.pyc create mode 100644 src/core/command/__pycache__/__init__.cpython-37.pyc create mode 100644 src/core/command/__pycache__/console.cpython-37.pyc create mode 100644 src/core/command/__pycache__/display.cpython-37.pyc create mode 100644 src/core/command/__pycache__/distribute_execute.cpython-37.pyc create mode 100644 src/core/command/__pycache__/gen.cpython-37.pyc create mode 100644 src/core/command/__pycache__/parameter.cpython-37.pyc create mode 100644 src/core/command/__pycache__/run.cpython-37.pyc create mode 100644 src/core/config/__pycache__/__init__.cpython-37.pyc create mode 100644 src/core/config/__pycache__/config_manager.cpython-37.pyc create mode 100644 src/core/config/__pycache__/parse_parts_config.cpython-37.pyc create mode 100644 src/core/config/__pycache__/resource_manager.cpython-37.pyc create mode 100644 src/core/driver/__pycache__/__init__.cpython-37.pyc create mode 100644 src/core/driver/__pycache__/drivers.cpython-37.pyc create mode 100644 src/core/driver/__pycache__/lite_driver.cpython-37.pyc create mode 100644 src/core/driver/__pycache__/parser.cpython-37.pyc create mode 100644 src/core/testcase/__pycache__/__init__.cpython-37.pyc create mode 100644 src/core/testcase/__pycache__/testcase_manager.cpython-37.pyc create mode 100644 src/core/testkit/__pycache__/__init__.cpython-37.pyc create mode 100644 src/core/testkit/__pycache__/kit_lite.cpython-37.pyc create mode 100644 src/main/__pycache__/__init__.cpython-37.pyc create mode 100644 src/main/__pycache__/_init_global_config.cpython-37.pyc diff --git a/localCoverage/__pycache__/__init__.cpython-37.pyc b/localCoverage/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f2ff5b3e8eb9c6a6eb7ce3a3042999fe4e53d007 GIT binary patch literal 176 zcmZ?b<>g`kg7YW7CWGk5AOZ#$feZ&AE@lA|DGb33nv8xc8Hzx{2;x_yvsFxJacWU< zjAKe}W?p7-Nl{`+eo>4|YH@Z+enCuHd3H%^aY+n_0J7s#Qp-|v@(WUn;z1(uhA}z$ q$%#46`DLj^iRq~^@$o=2O5)@73My}L*yQG?l;)(`fvo%t#0&s!{xSOi literal 0 HcmV?d00001 diff --git a/localCoverage/all_subsystem_config.json b/localCoverage/all_subsystem_config.json index b4a2285..f49b1ca 100644 --- a/localCoverage/all_subsystem_config.json +++ b/localCoverage/all_subsystem_config.json @@ -1084,8 +1084,8 @@ "foundation/ability/dmsfwk_lite" ] }, - "window": { - "name": "window", + "window_manager": { + "name": "window_manager", "path": [ "foundation/window/window_manager" ] diff --git a/localCoverage/codeCoverage/codeCoverage_gcov_lcov.py b/localCoverage/codeCoverage/codeCoverage_gcov_lcov.py index 02fbb1c..4718570 100644 --- a/localCoverage/codeCoverage/codeCoverage_gcov_lcov.py +++ b/localCoverage/codeCoverage/codeCoverage_gcov_lcov.py @@ -22,7 +22,9 @@ import json import shutil import shlex import subprocess - +import sys +sys.path.append("..") +from localCoverage.coverage_tools import generate_product_name # 代码根目录 root_path = os.getcwd() @@ -36,7 +38,7 @@ REPORT_PATH = "test/localCoverage/codeCoverage/results/coverage/reports/cxx" # llvm-gcov.sh LLVM_GCOV = "test/localCoverage/codeCoverage/llvm-gcov.sh" # 编译生成的out路径 -OUTPUT = "out/baltimore" +OUTPUT = "out/{}".format(generate_product_name(CODEPATH)) # 屏蔽列表 FILTEROUT_DIRS = ["unittest", "third_party", "test"] @@ -166,9 +168,8 @@ def gen_subsystem_trace_info(subsystem, data_dir, test_dir): if not os.path.exists(src_dir): print("Sours path %s not exist!", src_dir) return - cmd = "lcov -c -b {} -d {} --gcov-tool {} -o {} --ignore-errors source,gcov" \ - .format(src_dir, data_dir, os.path.join( - CODEPATH, LLVM_GCOV), output_name) + cmd = "lcov -c -b {} -d {} --gcov-tool {} -o {} --ignore-errors source,gcov".format( + src_dir, data_dir, os.path.join(CODEPATH, LLVM_GCOV), output_name) print("single_test**" + cmd) execute_command(cmd) @@ -270,8 +271,8 @@ def gen_html(cov_path): if not os.path.exists(tracefile): print("Error: the trace file %s not exist", tracefile) return - cmd = "genhtml --branch-coverage --demangle-cpp -o {} -p {} --ignore-errors source {}"\ - .format(os.path.join(CODEPATH, REPORT_PATH, "html"), CODEPATH, tracefile) + cmd = "genhtml --branch-coverage --demangle-cpp -o {} -p {} --ignore-errors source {}".format( + os.path.join(CODEPATH, REPORT_PATH, "html"), CODEPATH, tracefile) execute_command(cmd) diff --git a/localCoverage/codeCoverage/mutilProcess_CodeCoverage.py b/localCoverage/codeCoverage/mutilProcess_CodeCoverage.py index 69a4e34..32af2b4 100644 --- a/localCoverage/codeCoverage/mutilProcess_CodeCoverage.py +++ b/localCoverage/codeCoverage/mutilProcess_CodeCoverage.py @@ -22,8 +22,10 @@ import shutil import shlex import subprocess import multiprocessing +import sys from multiprocessing import Process - +sys.path.append("..") +from localCoverage.coverage_tools import generate_product_name # 根代码目录 root_path = os.getcwd() @@ -37,7 +39,7 @@ REPORT_PATH = "test/testfwk/developer_test/localCoverage/codeCoverage/results/co # llvm-gcov.sh LLVM_GCOV = "test/testfwk/developer_test/localCoverage/codeCoverage/llvm-gcov.sh" # 编译生成的out路径 -OUTPUT = "out/baltimore" +OUTPUT = "out/{}".format(generate_product_name(CODEPATH)) # 屏蔽列表 FILTEROUT_DIRS = ["unittest", "third_party", "test"] # 测试套划分步长 @@ -187,10 +189,9 @@ def gen_subsystem_trace_info(subsystem, data_dir, test_dir, lcovrc_path): print(f"Sours path {src_dir} not exists!") return - cmd = "lcov -c -b {} -d {} --gcov-tool {} --config-file {} -o {} --ignore-errors" \ - "source,gcov".format(src_dir, data_dir, os.path.join( - CODEPATH, LLVM_GCOV), lcovrc_path, output_name) - print("single_test**##father_pid:%s##child_pid:%s cmd:%s config file:%s"%( + cmd = "lcov -c -b {} -d {} --gcov-tool {} --config-file {} -o {} --ignore-errors source,gcov".format( + src_dir, data_dir, os.path.join(CODEPATH, LLVM_GCOV), lcovrc_path, output_name) + print("single_test**##father_pid:%s##child_pid:%s cmd:%s config file:%s" % ( os.getpid(), os.getppid(), cmd, lcovrc_path )) execute_command(cmd) @@ -335,9 +336,8 @@ def gen_html(cov_path): print(f"Error: the trace file {tracefile} not exists!") return - cmd = "genhtml --branch-coverage --demangle-cpp -o {} -p {} --ignore-errors " \ - "source {}".format(os.path.join(CODEPATH, REPORT_PATH, "html"), - CODEPATH, tracefile) + cmd = "genhtml --branch-coverage --demangle-cpp -o {} -p {} --ignore-errors source {}".format( + os.path.join(CODEPATH, REPORT_PATH, "html"), CODEPATH, tracefile) execute_command(cmd) @@ -353,7 +353,7 @@ if __name__ == '__main__': Tag = False process_list = [] for i in range(len(caseLst)): - lcovrc_path = LCOVRC_SET + "/" + "lcovrc_cov" + str(i) + lcovrc_path = LCOVRC_SET + "/" + "lcovrc_cov_" + str(i) print(lcovrc_path) if os.path.exists(lcovrc_path): print(lcovrc_path + "@" * 20 + "yes") @@ -382,24 +382,3 @@ if __name__ == '__main__': merge_all_test_subsystem_info(subsystem_list=get_subsystem_name_list()) merge_all_subsystem_info() gen_final_report(os.path.join(CODEPATH, COVERAGE_GCDA_RESULTS)) - - - - - - - - - - - - - - - - - - - - - diff --git a/localCoverage/coverage_tools.py b/localCoverage/coverage_tools.py index bacc5b7..670d34b 100644 --- a/localCoverage/coverage_tools.py +++ b/localCoverage/coverage_tools.py @@ -25,14 +25,12 @@ import subprocess from shutil import copyfile -def get_subsystem_config(test_part_list): +def get_subsystem_config(test_part_list, developer_path): all_system_info_path = os.path.join( - developer_path, - "developer_test/localCoverage/all_subsystem_config.json" + developer_path, "localCoverage/all_subsystem_config.json" ) system_info_path = os.path.join( - developer_path, - "developer_test/localCoverage/codeCoverage/subsystem_config.json" + developer_path, "localCoverage/codeCoverage/subsystem_config.json" ) if os.path.exists(all_system_info_path): new_json_text = {} @@ -51,14 +49,11 @@ def get_subsystem_config(test_part_list): print("%s not exists.", all_system_info_path) -def copy_coverage(): +def copy_coverage(developer_path): print("[*************** Start TO Get Coverage Report ***************]") - coverage_path = os.path.join( - developer_path, "developer_test/reports/coverage" - ) + coverage_path = os.path.join(developer_path, "reports/coverage") code_path = os.path.join( - developer_path, - "developer_test/localCoverage/codeCoverage/results/coverage" + developer_path, "localCoverage/codeCoverage/results/coverage" ) if os.path.exists(code_path): shutil.rmtree(code_path) @@ -67,8 +62,7 @@ def copy_coverage(): def generate_coverage_rc(developer_path): coverage_rc_path = os.path.join( - developer_path, - "developer_test/localCoverage/codeCoverage/coverage_rc" + developer_path, "localCoverage/codeCoverage/coverage_rc" ) lcovrc_cov_template_path = os.path.join(coverage_rc_path, "lcovrc_cov_template") for num in range(16): @@ -87,44 +81,53 @@ def generate_coverage_rc(developer_path): f.write(f"lcov_tmp_dir = {tmp_cov_path}") -def execute_code_cov_tools(): +def execute_code_cov_tools(developer_path): llvm_gcov_path = os.path.join( - developer_path, - "developer_test/localCoverage/codeCoverage/llvm-gcov.sh" + developer_path, "localCoverage/codeCoverage/llvm-gcov.sh" ) subprocess.Popen("dos2unix %s" % llvm_gcov_path, shell=True).communicate() tools_path = os.path.join( - developer_path, - "developer_test/localCoverage/codeCoverage/mutilProcess_CodeCoverage.py" + developer_path, "localCoverage/codeCoverage/mutilProcess_CodeCoverage.py" ) code_coverage_process = subprocess.Popen("python3 %s" % tools_path, shell=True) code_coverage_process.communicate() -def get_subsystem_name(test_part_list): - testfwk_json_path = os.path.join( - root_path, "out/baltimore/build_configs/infos_for_testfwk.json" - ) - if os.path.exists(testfwk_json_path): - with open(testfwk_json_path, "r", encoding="utf-8") as json_text: - system_json = json.load(json_text) - subsystem_info = system_json.get("phone").get("subsystem_infos") - subsystem_list = [] - for part in test_part_list: - for key in subsystem_info.keys(): - if part in subsystem_info.get(key) and key not in subsystem_list: - subsystem_list.append(key) - subsystem_str = ','.join(list(map(str, subsystem_list))) - return subsystem_str +def get_subsystem_name(test_part_list, product_name): + if product_name: + testfwk_json_path = os.path.join( + root_path, "out", product_name, "build_configs/infos_for_testfwk.json" + ) + if os.path.exists(testfwk_json_path): + with open(testfwk_json_path, "r", encoding="utf-8") as json_text: + system_json = json.load(json_text) + subsystem_info = system_json.get("phone").get("subsystem_infos") + subsystem_list = [] + for part in test_part_list: + for key in subsystem_info.keys(): + if part in subsystem_info.get(key) and key not in subsystem_list: + subsystem_list.append(key) + subsystem_str = ','.join(list(map(str, subsystem_list))) + return subsystem_str + else: + print("%s not exists.", testfwk_json_path) else: - print("%s not exists.", testfwk_json_path) + print("product_name is not null") + +def generate_product_name(root_path): + # 获取产品形态 + out_path = os.path.join(root_path, "out") + _, gcno_path = subprocess.getstatusoutput("find %s -name '*.gcno' | head -n 1" % out_path) + product_name = gcno_path.split(out_path)[1].strip("/").split("/")[0] + return product_name -def execute_interface_cov_tools(subsystem_str): + +def execute_interface_cov_tools(subsystem_str, developer_path): print("[*************** Start TO Get Interface Coverage Report ***************]") innerkits_json_path = os.path.join( developer_path, - "developer_test/localCoverage/interfaceCoverage/get_innerkits_json.py" + "localCoverage/interfaceCoverage/get_innerkits_json.py" ) interface_coverage_process = subprocess.Popen( "python3 %s" % innerkits_json_path, shell=True @@ -133,9 +136,9 @@ def execute_interface_cov_tools(subsystem_str): interface_path = os.path.join( developer_path, - "developer_test/localCoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py" + "localCoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py" ) - subprocess.run("python2 %s %s" % (interface_path, subsystem_str), shell=True) + subprocess.run("python3 %s %s" % (interface_path, subsystem_str), shell=True) if __name__ == '__main__': @@ -146,37 +149,30 @@ if __name__ == '__main__': current_path = os.getcwd() root_path = current_path.split("/test/testfwk/developer_test")[0] - developer_path = current_path.split("/developer_test/src")[0] + developer_path = os.path.join(root_path, "test/testfwk/developer_test") + + # 获取产品形态 + product_name = generate_product_name(root_path) # copy gcda数据到覆盖率工具指定位置 - copy_coverage() + copy_coverage(developer_path) generate_coverage_rc(developer_path) # 获取部件位置信息config if len(test_part_list) > 0: - get_subsystem_config(test_part_list) + get_subsystem_config(test_part_list, developer_path) # 执行代码覆盖率 - execute_code_cov_tools() - - # 执行接口覆盖率 - if subsystem_args_str: - subsystem_str = subsystem_args_str - else: - subsystem_str = get_subsystem_name(test_part_list) - - if subsystem_str: - execute_interface_cov_tools(subsystem_str) - else: - print("subsystem or part without!") + execute_code_cov_tools(developer_path) # 源代码还原 after_lcov_branch_path = os.path.join( - root_path, "test/testfwk/developer_test/localCoverage/restore_comment/after_lcov_branch.py") - subprocess.run("python3 %s " % after_lcov_branch_path, shell=True) + developer_path, "localCoverage/restore_comment/after_lcov_branch.py") + if os.path.exists(after_lcov_branch_path): + subprocess.run("python3 %s " % after_lcov_branch_path, shell=True) restore_source_code_path = os.path.join( - root_path, "test/testfwk/developer_test/localCoverage/restore_comment/restore_source_code.py") + developer_path, "localCoverage/restore_comment/restore_source_code.py") subprocess.run("python3 %s" % restore_source_code_path, shell=True) - - + print(r"See the code coverage report in: " + r"\test\testfwk\developer_test\localCoverage\codeCoverage\results\coverage\reports\cxx\html") diff --git a/localCoverage/interfaceCoverage/get_innerkits_json.py b/localCoverage/interfaceCoverage/get_innerkits_json.py index 8ab3378..3c05c92 100644 --- a/localCoverage/interfaceCoverage/get_innerkits_json.py +++ b/localCoverage/interfaceCoverage/get_innerkits_json.py @@ -20,6 +20,10 @@ import os import json import subprocess +import sys + +sys.path.append("..") +from localCoverage.coverage_tools import generate_product_name def genPartsInfoJSON(folder_list, output_json_path): @@ -53,13 +57,13 @@ def getPartsJson(path): if __name__ == "__main__": current_path = os.getcwd() root_path = current_path.split("/test/testfwk/developer_test")[0] + product_name = generate_product_name(root_path) part_info_path = os.path.join( - root_path, "out/baltimore/innerkits/ohos-arm64" + root_path, "out", product_name, "innerkits/ohos-arm64" ) output_json_path = os.path.join( - root_path, "out/baltimore/packages/phone/innerkits/ohos-arm64" + root_path, "out", product_name, "packages/phone/innerkits/ohos-arm64" ) subprocess.Popen("mkdir -p " + output_json_path, shell=True) folder_list = getPartsJson(part_info_path) genPartsInfoJSON(folder_list, output_json_path) - diff --git a/localCoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py b/localCoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py index 66c77e8..4270d23 100644 --- a/localCoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py +++ b/localCoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py @@ -25,20 +25,22 @@ import subprocess import CppHeaderParser import get_innerkits_json import makeReport +sys.path.append("..") +from localCoverage.coverage_tools import generate_product_name root_path = os.getcwd() CODEPATH = root_path.split("/test/testfwk/developer_test")[0] -PATH_INFO_PATH = "out/baltimore/innerkits/ohos-arm64" -OUTPUT_JSON_PATH = "out/baltimore/packages/phone/innerkits/ohos-arm64" -KIT_MODULES_INFO = "out/baltimore/packages/phone/innerkits/ohos-arm64/kits_modules_info.json" +product_name = generate_product_name(CODEPATH) +PATH_INFO_PATH = "out/{}/innerkits/ohos-arm64".format(product_name) +OUTPUT_JSON_PATH = "out/{}/packages/phone/innerkits/ohos-arm64".format(product_name) +KIT_MODULES_INFO = "out/{}/packages/phone/innerkits/ohos-arm64/kits_modules_info.json".format(product_name) SUB_SYSTEM_INFO_PATH = os.path.join( CODEPATH, "test/testfwk/developer_test/localCoverage/codeCoverage/results/coverage/reports/cxx") OUTPUT_REPORT_PATH = os.path.join( CODEPATH, "test/testfwk/developer_test/localCoverage/interfaceCoverage/results/coverage/interface_kits" ) - filter_file_name_list = [ "appexecfwk/libjnikit/include/jni.h", ] @@ -54,7 +56,7 @@ def create_coverage_result_outpath(filepath): def get_subsystem_part_list(project_rootpath): subsystme_part_dict = {} subsystem_part_config_filepath = os.path.join( - project_rootpath, "out/baltimore/build_configs", "infos_for_testfwk.json") + project_rootpath, "out", product_name, "build_configs/infos_for_testfwk.json") print(subsystem_part_config_filepath) if os.path.exists(subsystem_part_config_filepath): try: @@ -65,7 +67,7 @@ def get_subsystem_part_list(project_rootpath): if not data: print("subsystem_part config file error.") else: - subsystme_part_dict= data.get("phone", "").get("subsystem_infos", "") + subsystme_part_dict = data.get("phone", "").get("subsystem_infos", "") return subsystme_part_dict else: print("subsystem_part_config_filepath not exists.") @@ -139,7 +141,7 @@ def get_pubilc_func_list_from_headfile(cxx_header_filepath): continue if class_name == func_name: destructor = func["destructor"] - if destructor == True: + if destructor: func_name = "~" + func_name func_returntype = "" debug = func["debug"].replace("KVSTORE_API", "") @@ -156,7 +158,7 @@ def get_pubilc_func_list_from_headfile(cxx_header_filepath): if debug.startswith("virtual"): continue template = func["template"] - if template != False: + if template: continue param_type_list = [t["type"] for t in func["parameters"]] pubilc_func_list.append((cxx_header_filepath, class_name, @@ -169,7 +171,7 @@ def get_pubilc_func_list_from_headfile(cxx_header_filepath): if func_name.isupper(): continue template = func["template"] - if template != False: + if template: continue debug = func["debug"].replace("KVSTORE_API", "") debug = debug.replace(" ", "") @@ -194,7 +196,7 @@ def get_sdk_interface_func_list(part_name): if sub_path == "": return interface_func_list - sdk_path = os.path.join(CODEPATH, "out", "baltimore", sub_path) + sdk_path = os.path.join(CODEPATH, "out", product_name, sub_path) if os.path.exists(sdk_path): file_list = get_file_list_by_postfix(sdk_path, ".h") for file in file_list: @@ -303,7 +305,6 @@ def get_covered_result_data(public_interface_func_list, covered_func_list, subsy coverage_result_list = [] for item in public_interface_func_list: data_list = list(item) - file_path = data_list[0] class_name = data_list[1] func_name = data_list[2] para_list = data_list[3] @@ -320,7 +321,6 @@ def get_covered_result_data(public_interface_func_list, covered_func_list, subsy fun_string = fun_string.strip() fun_string = filter_para_sub_string(fun_string) - find_string = "" if class_name != "": find_string = "::" + class_name + "::" + func_name + "(" else: @@ -442,7 +442,7 @@ def make_interface_coverage_result(): subsystem_part_dict = get_subsystem_part_list(CODEPATH) for subsystem_name in subsystem_name_list: coverage_result_list = get_interface_coverage_result_list( - subsystem_name,subsystem_part_dict) + subsystem_name, subsystem_part_dict) interface_data_list.append([subsystem_name, coverage_result_list]) make_coverage_result_file(interface_data_list, OUTPUT_REPORT_PATH, "Inner Interface") diff --git a/localCoverage/interfaceCoverage/makeReport.py b/localCoverage/interfaceCoverage/makeReport.py index a9e5056..d72d6da 100644 --- a/localCoverage/interfaceCoverage/makeReport.py +++ b/localCoverage/interfaceCoverage/makeReport.py @@ -19,8 +19,8 @@ import sys import datetime +from importlib import reload reload(sys) -sys.setdefaultencoding("utf-8") g_html_head = """ @@ -79,7 +79,7 @@ g_html_ended = """ def sort_by_field_element(elem): - return int(elem[3][:-1]) #@######value是浮点数,如1.0,那么需要先转float再转int + return int(float(elem[3][:-1])) # @######value是浮点数,如1.0,那么需要先转float再转int def sort_by_field_element_data(elem): diff --git a/localCoverage/resident_service/init_gcov.py b/localCoverage/resident_service/init_gcov.py index e6b0cee..4a32854 100644 --- a/localCoverage/resident_service/init_gcov.py +++ b/localCoverage/resident_service/init_gcov.py @@ -185,9 +185,6 @@ def split_foundation_services(developer_path, device_sn, device_ip, subprocess.Popen(hdc_str + "shell mount -o rw,remount /", shell=True).communicate() - subprocess.Popen(hdc_str + 'shell "rm -fr %s"' % ("/data/gcov" + home_path), - shell=True).communicate() - subprocess.Popen(hdc_str + 'shell "chmod 777 /data/gcov - R"', shell=True).communicate() subprocess.Popen(hdc_str + "shell getenforce", shell=True).communicate() return @@ -227,8 +224,7 @@ if __name__ == '__main__': command_str = command_args.split("command_str=")[1].replace(",", " ") current_path = os.getcwd() root_path = current_path.split("/test/testfwk/developer_test")[0] - developer_path = os.path.join( - current_path.split("/developer_test/src")[0], "developer_test") + developer_path = os.path.join(root_path, "test/testfwk/developer_test") home_path = '/'.join(root_path.split("/")[:3]) # 获取user_config中的device ip diff --git a/localCoverage/resident_service/public_method.py b/localCoverage/resident_service/public_method.py index bd40bbe..df9cd67 100644 --- a/localCoverage/resident_service/public_method.py +++ b/localCoverage/resident_service/public_method.py @@ -59,9 +59,10 @@ def get_sn_list(command): def get_all_part_service(): current_path = os.getcwd() - developer_path = current_path.split("/developer_test/src")[0] + root_path = current_path.split("/test/testfwk/developer_test")[0] + developer_path = os.path.join(root_path, "test/testfwk/developer_test") system_part_service_path = os.path.join( - developer_path, "developer_test/localCoverage/resident_service/system_part_service.json") + developer_path, "localCoverage/resident_service/system_part_service.json") if os.path.exists(system_part_service_path): with open(system_part_service_path, "r") as system_text: system_text_json = json.load(system_text) diff --git a/localCoverage/resident_service/pull_service_gcda.py b/localCoverage/resident_service/pull_service_gcda.py index 0faf51c..0652c7c 100644 --- a/localCoverage/resident_service/pull_service_gcda.py +++ b/localCoverage/resident_service/pull_service_gcda.py @@ -19,8 +19,9 @@ import os import subprocess import sys - from public_method import get_server_dict, get_config_ip, get_sn_list +sys.path.append("..") +from localCoverage.coverage_tools import generate_product_name def attach_pid(device_ip, device_sn, process_str, component_gcda_dict, @@ -34,6 +35,7 @@ def attach_pid(device_ip, device_sn, process_str, component_gcda_dict, subprocess.Popen(hdc_str + "shell chmod 777 /data/gcov -R", shell=True).communicate() subprocess.Popen(hdc_str + "shell mount -o rw,remount /", shell=True).communicate() local_sh_path = os.path.join(resident_service_path, "resources", "gcov_flush.sh") + subprocess.Popen("dos2unix %s" % local_sh_path, shell=True).communicate() print(hdc_str + "file send %s %s" % (local_sh_path, "/data/")) subprocess.Popen(hdc_str + "file send %s %s" % (local_sh_path, "/data/"), shell=True).communicate() @@ -56,7 +58,7 @@ def get_gcda_file(device_ip, device_sn, process_str, component_gcda_dict, gcda_path = "/data/gcov" + root_path for component_gcda_path in component_gcda_dict[process_str]: - gcov_root = os.path.join(gcda_path, component_gcda_path) + gcov_root = os.path.join(gcda_path, 'out', product_name, component_gcda_path) gcda_file_name = os.path.basename(gcov_root) gcda_file_path = os.path.dirname(gcov_root) print(hdc_str + "shell 'cd %s; tar -czf %s.tar.gz %s'" % ( @@ -64,10 +66,9 @@ def get_gcda_file(device_ip, device_sn, process_str, component_gcda_dict, subprocess.Popen(hdc_str + "shell 'cd %s; tar -czf %s.tar.gz %s'" % ( gcda_file_path, gcda_file_name, gcda_file_name), shell=True).communicate() - obj_gcda_path = component_gcda_path.split("baltimore")[-1].strip("/") local_gcda_path = os.path.dirname( os.path.join(developertest_path, "reports/coverage/data/cxx", - services_str + "_service", obj_gcda_path)) + services_str + "_service", component_gcda_path)) if not os.path.exists(local_gcda_path): os.makedirs(local_gcda_path) @@ -109,11 +110,12 @@ if __name__ == '__main__': command_args = sys.argv[1] command_str = command_args.split("command_str=")[1].replace(",", " ") current_path = os.getcwd() - developer_path = os.path.join( - current_path.split("/developer_test/src")[0], "developer_test") + root_path = current_path.split("/test/testfwk/developer_test")[0] + developer_path = os.path.join(root_path, "test/testfwk/developer_test") resident_service_path = os.path.join( developer_path, "localCoverage/resident_service") config_path = os.path.join(resident_service_path, "config") + product_name = generate_product_name(root_path) # 获取子系统部件与服务的关系 system_info_dict, services_component_dict, component_gcda_dict = get_server_dict(command_str) diff --git a/localCoverage/resident_service/resources/libgcov_dump_sign.z.so b/localCoverage/resident_service/resources/libgcov_dump_sign.z.so new file mode 100644 index 0000000..67b079a --- /dev/null +++ b/localCoverage/resident_service/resources/libgcov_dump_sign.z.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:529b7070f9673820dc28c1b40eb539c3c331307fbff2d3ea105b5d6494bc8b21 +size 22392 diff --git a/localCoverage/resident_service/system_part_service.json b/localCoverage/resident_service/system_part_service.json index 700db72..a016457 100644 --- a/localCoverage/resident_service/system_part_service.json +++ b/localCoverage/resident_service/system_part_service.json @@ -36,7 +36,7 @@ "wms": ["window_manager"], "bms": ["bundle_framework"], "power": ["battery_manager", "battery_statistics", "display_manager", "power_manager", "thermal_manager"], - "huks_service": ["huks_standard"], + "huks_service": ["huks"], "dlp_permission": ["dlp_permission_service"], "media_service": ["multimedia_player_framework"], "device_usage_st": ["device_usage_statistics"], @@ -63,13 +63,12 @@ ], "ans": ["distributed_notification_service"], "render_service": ["graphic", "graphic_standard"], - "dlp_credential_": ["dlp_credential_service"], + "dlp_credential_|dlp_credential_service_sa": ["dlp_credential_service"], "locationhub": ["location"], "time_service": ["time_service"], - "sensors": ["sensors"], + "sensors": ["sensor"], "msdp": ["algorithm", "geofence", "movement", "timeline", "spatialawareness_manager_native", "msdp"], "screenlock_serv": ["screenlock"], - "dlp_credential_service_sa": ["dlp_credential_service"], "wallpaper_servi": ["theme", "wallpaper_mgr"], "hilogd|hidumper_service": ["hiviewdfx"], "dinput": ["distributed_input_sourcemanager_test", "distributed_input_sourcetrans_test"], @@ -79,41 +78,40 @@ ] }, "component_gcda_dict": { - "wms": ["out/baltimore/obj/foundation/window/window_manager"], - "huks_service": ["out/baltimore/obj/base/security/huks"], - "dlp_permission": ["out/baltimore/obj/base/security/dlp_permission_service"], - "media_service": ["out/baltimore/obj/foundation/multimedia/player_framework"], - "device_usage_st": ["out/baltimore/obj/foundation/resourceschedule"], - "accountmgr": ["out/baltimore/obj/base/account/os_account"], - "av_session": ["out/baltimore/obj/foundation/multimedia/av_session"], - "accesstoken_ser|privacy_service|token_sync_ser": ["out/baltimore/obj/base/security/access_token"], - "telephony|riladapter_host": ["out/baltimore/obj/base/telephony"], - "netmanager": ["out/baltimore/obj/foundation/communication"], - "samgr": ["out/baltimore/obj/foundation/systemabilitymgr"], - "distributedsche": ["out/baltimore/obj/foundation/ability/dmsfwk", "out/baltimore/obj/foundation/deviceprofile"], - "resource_schedu": ["out/baltimore/obj/foundation/resourceschedule/efficiency_manager"], - "bgtaskmgr_servi": ["out/baltimore/obj/foundation/resourceschedule/background_task_mgr"], - "bms": ["out/baltimore/obj/foundation/bundlemanager/bundle_framework"], - "pasteboard_serv": ["out/baltimore/obj/foundation/distributeddatamgr"], - "com.ohos.medialibrary.medialibrarydata.entry:FileExtensionAbility|com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility": ["out/baltimore/obj/foundation/multimedia", "out/baltimore/obj/foundation/filemanagement"], - "inputmethod_ser": ["out/baltimore/obj/base/inputmethod/imf"], + "wms": ["obj/foundation/window/window_manager"], + "huks_service": ["obj/base/security/huks"], + "dlp_permission": ["obj/base/security/dlp_permission_service"], + "media_service": ["obj/foundation/multimedia/player_framework"], + "device_usage_st": ["obj/foundation/resourceschedule"], + "accountmgr": ["obj/base/account/os_account"], + "av_session": ["obj/foundation/multimedia/av_session"], + "accesstoken_ser|privacy_service|token_sync_ser": ["obj/base/security/access_token"], + "telephony|riladapter_host": ["obj/base/telephony"], + "netmanager": ["obj/foundation/communication"], + "samgr": ["obj/foundation/systemabilitymgr"], + "distributedsche": ["obj/foundation/ability/dmsfwk", "obj/foundation/deviceprofile"], + "resource_schedu": ["obj/foundation/resourceschedule/efficiency_manager"], + "bgtaskmgr_servi": ["obj/foundation/resourceschedule/background_task_mgr"], + "bms": ["obj/foundation/bundlemanager/bundle_framework"], + "pasteboard_serv": ["obj/foundation/distributeddatamgr"], + "com.ohos.medialibrary.medialibrarydata.entry:FileExtensionAbility|com.ohos.UserFile.ExternalFileManager.entry:FileExtensionAbility": ["obj/foundation/multimedia", "obj/foundation/filemanagement"], + "inputmethod_ser": ["obj/base/inputmethod/imf"], "hdf_devmgr|input_host|audio_host|sample_host|fingerprint_auth_host|user_auth_host|pin_auth_host|face_auth_host|nfc_host|codec_host|wifi_host|motion_host|sensor_host|riladapter_host|hwc_host|gralloc_host|camera_host|usb_host|blue_host|audio_hdi_server_host|power_host|a2dp_host|location_host|dcamera_host|daudio_host": [ - "out/baltimore/obj/drivers" + "obj/drivers" ], - "ans": ["out/baltimore/obj/base/notification/distributed_notification_service"], - "render_service": ["out/baltimore/obj/foundation/graphic/graphic_2d"], - "dlp_credential_": ["out/baltimore/obj/base/security/dlp_credential_service"], - "locationhub": ["out/baltimore/obj/base/location/services"], - "time_service": ["out/baltimore/obj/base/time/time_service"], - "sensors": ["out/baltimore/obj/base/sensors"], - "msdp": ["out/baltimore/obj/base/msdp"], - "screenlock_serv": ["out/baltimore/obj/base/theme/screenlock_mgr/services"], - "dlp_credential_service_sa": ["out/baltimore/obj/base/security/dlp_credential_service"], - "wallpaper_servi": ["out/baltimore/obj/base/theme/wallpaper_mgr"], - "hilogd|hidumper_service": ["out/baltimore/obj/base/hiviewdfx"], - "power": ["out/baltimore/obj/base/powermgr"], - "com.ohos.medialibrary.medialibrarydata": ["out/baltimore/obj/foundation/distributeddatamgr/data_share"], - "dinput": ["out/baltimore/obj/foundation/distributedhardware/distributed_input"], - "softbus_server": ["out/baltimore/obj/foundation/communication/dsoftbus"] + "ans": ["obj/base/notification/distributed_notification_service"], + "render_service": ["obj/foundation/graphic/graphic_2d"], + "dlp_credential_|dlp_credential_service_sa": ["obj/base/security/dlp_credential_service"], + "locationhub": ["obj/base/location/services"], + "time_service": ["obj/base/time/time_service"], + "sensors": ["obj/base/sensors"], + "msdp": ["obj/base/msdp"], + "screenlock_serv": ["obj/base/theme/screenlock_mgr/services"], + "wallpaper_servi": ["obj/base/theme/wallpaper_mgr"], + "hilogd|hidumper_service": ["obj/base/hiviewdfx"], + "power": ["obj/base/powermgr"], + "com.ohos.medialibrary.medialibrarydata": ["obj/foundation/distributeddatamgr/data_share"], + "dinput": ["obj/foundation/distributedhardware/distributed_input"], + "softbus_server": ["obj/foundation/communication/dsoftbus"] } } \ No newline at end of file diff --git a/localCoverage/restore_comment/build_before_lcov_branch.py b/localCoverage/restore_comment/build_before_generate.py similarity index 97% rename from localCoverage/restore_comment/build_before_lcov_branch.py rename to localCoverage/restore_comment/build_before_generate.py index 727bb5c..8aaa61d 100644 --- a/localCoverage/restore_comment/build_before_lcov_branch.py +++ b/localCoverage/restore_comment/build_before_generate.py @@ -1,164 +1,165 @@ -#!/usr/bin/env python3 -# coding=utf-8 - -# -# Copyright (c) 2020-2023 Huawei Device Co., Ltd. -# 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. -# - -import os -import subprocess -import traceback -import json - - -def get_file_list(find_path, postfix=""): - file_names = os.listdir(find_path) - file_list = [] - if len(file_names) > 0: - for fn in file_names: - if postfix != "": - if fn.find(postfix) != -1 and fn[-len(postfix):] == postfix: - file_list.append(fn) - else: - file_list.append(fn) - return - - -def get_file_list_by_postfix(path, postfix=""): - file_list = [] - for dirs in os.walk(path): - files = get_file_list(find_path=dirs[0], postfix=postfix) - for file_name in files: - if "" != file_name and -1 == file_name.find(__file__): - file_name = os.path.join(dirs[0], file_name) - if os.path.isfile(file_name): - file_list.append(file_name) - return file_list - - -def get_source_file_list(path): - """ - 获取path路径下源文件路径列表 - """ - file_path_list = [] - file_path_list_append = file_path_list.append - for root, dirs, files in os.walk(path): - if files: - for file_name in files: - file_path = os.path.join(root, file_name) - _, suffix = os.path.splitext(file_name) - if suffix in [".c", ".h", ".cpp"]: - file_path_list_append(file_path) - return file_path_list - - -def rewrite_source_file(source_path_list: list): - """ - 源文件加“//LCOV_EXCL_BR_LINE” - """ - keys = ["if", "while", "switch", "case", "for", "try", "catch"] - if not source_path_list: - print("no any source file here") - return - - print("[********** Start Rewrite Source File **********]") - for path in source_path_list: - if not os.path.exists(path) or "test" in path: - continue - with open(path, "r", encoding="utf-8", errors="ignore") as read_fp: - code_lines = read_fp.readlines() - source_dir, suffix_name = os.path.splitext(path) - with open(source_dir + f"_bk.{suffix_name}", "w", - encoding="utf-8", errors="ignore") as write_fp: - - for line in code_lines: - for key in keys: - if key in line and line.strip().startswith(key): - write_fp.write(line) - elif " //LCOV_EXCL_BR_LINE" not in line and not line.strip().endswith("\\"): - write_fp.write(line.strip("\n").strip("\n\r") + " //LCOV_EXCL_BR_LINE") - write_fp.write("\n") - else: - write_fp.write(line) - break - - os.remove(path) - subprocess.Popen("mv %s %s" % (source_dir + f"_bk.{suffix_name}", path), - shell=True).communicate() - print("[********** End Rewrite Source File **********]") - - -def add_lcov(subsystem_config_path): - try: - with open(subsystem_config_path, "r", encoding="utf-8", errors="ignore") as fp: - data_dict = json.load(fp) - for key, value in data_dict.items(): - if "path" in value.keys(): - for path_str in value["path"]: - file_path = os.path.join(root_path, path_str) - if os.path.exists(file_path): - subprocess.Popen("cp -r %s %s" % ( - file_path, file_path + "_primal"), shell=True).communicate() - source_file_path = get_source_file_list(file_path) - rewrite_source_file(source_file_path) - else: - print("The directory does not exist.", file_path) - except: - print(traceback.format_exc()) - - -def get_part_config_json(part_name_list, all_system_info_path, part_info_path): - if os.path.exists(all_system_info_path): - new_json_text = {} - for part in part_name_list: - with open(all_system_info_path, "r") as system_text: - system_text_json = json.load(system_text) - if part in system_text_json: - new_json_text[part] = system_text_json[part] - else: - print("part not in all_subsystem_config.json") - new_json = json.dumps(new_json_text, indent=4) - with open(part_info_path, "w") as out_file: - out_file.write(new_json) - else: - print("%s not exists.", all_system_info_path) - - -if __name__ == '__main__': - while True: - print("For example: run -tp partname\n" - " run -tp partname1 partname2") - - # 获取用户输入命令 - part_name = input("Please enter your command: ") - if part_name == "": - continue - if " -tp " in part_name: - part_name_list = part_name.strip().split(" -tp ")[1].split() - break - else: - continue - - current_path = os.getcwd() - root_path = current_path.split("/test/testfwk/developer_test")[0] - all_system_info_path = os.path.join( - root_path, "test/testfwk/developer_test/localCoverage/all_subsystem_config.json") - part_info_path = os.path.join( - root_path, "test/testfwk/developer_test/localCoverage/restore_comment/part_config.json") - - # 获取要修改的源代码的部件信息 - get_part_config_json(part_name_list, all_system_info_path, part_info_path) - - # 执行修改 - add_lcov(part_info_path) +#!/usr/bin/env python3 +# coding=utf-8 + +# +# Copyright (c) 2020-2023 Huawei Device Co., Ltd. +# 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. +# + +import os +import subprocess +import traceback +import json + + +def get_file_list(find_path, postfix=""): + file_names = os.listdir(find_path) + file_list = [] + if len(file_names) > 0: + for fn in file_names: + if postfix != "": + if fn.find(postfix) != -1 and fn[-len(postfix):] == postfix: + file_list.append(fn) + else: + file_list.append(fn) + return + + +def get_file_list_by_postfix(path, postfix=""): + file_list = [] + for dirs in os.walk(path): + files = get_file_list(find_path=dirs[0], postfix=postfix) + for file_name in files: + if "" != file_name and -1 == file_name.find(__file__): + file_name = os.path.join(dirs[0], file_name) + if os.path.isfile(file_name): + file_list.append(file_name) + return file_list + + +def get_source_file_list(path): + """ + 获取path路径下源文件路径列表 + """ + file_path_list = [] + file_path_list_append = file_path_list.append + for root, dirs, files in os.walk(path): + if files: + for file_name in files: + file_path = os.path.join(root, file_name) + _, suffix = os.path.splitext(file_name) + if suffix in [".c", ".h", ".cpp"]: + file_path_list_append(file_path) + return file_path_list + + +def rewrite_source_file(source_path_list: list): + """ + 源文件加“//LCOV_EXCL_BR_LINE” + """ + keys = ["if", "while", "switch", "case", "for", "try", "catch"] + if not source_path_list: + print("no any source file here") + return + + print("[********** Start Rewrite Source File **********]") + for path in source_path_list: + if not os.path.exists(path) or "test" in path: + continue + with open(path, "r", encoding="utf-8", errors="ignore") as read_fp: + code_lines = read_fp.readlines() + source_dir, suffix_name = os.path.splitext(path) + with open(source_dir + f"_bk.{suffix_name}", "w", + encoding="utf-8", errors="ignore") as write_fp: + + for line in code_lines: + for key in keys: + if key in line and line.strip().startswith(key): + write_fp.write(line) + elif " //LCOV_EXCL_BR_LINE" not in line and not line.strip().endswith("\\"): + write_fp.write(line.strip("\n").strip("\n\r") + " //LCOV_EXCL_BR_LINE") + write_fp.write("\n") + else: + write_fp.write(line) + break + + os.remove(path) + subprocess.Popen("mv %s %s" % (source_dir + f"_bk.{suffix_name}", path), + shell=True).communicate() + print("[********** End Rewrite Source File **********]") + + +def add_lcov(subsystem_config_path): + try: + with open(subsystem_config_path, "r", encoding="utf-8", errors="ignore") as fp: + data_dict = json.load(fp) + for key, value in data_dict.items(): + if "path" in value.keys(): + for path_str in value["path"]: + file_path = os.path.join(root_path, path_str) + if os.path.exists(file_path): + subprocess.Popen("cp -r %s %s" % ( + file_path, file_path + "_primal"), shell=True).communicate() + source_file_path = get_source_file_list(file_path) + rewrite_source_file(source_file_path) + else: + print("The directory does not exist.", file_path) + except: + print(traceback.format_exc()) + + +def get_part_config_json(part_name_list, all_system_info_path, part_info_path): + if os.path.exists(all_system_info_path): + new_json_text = {} + for part in part_name_list: + with open(all_system_info_path, "r") as system_text: + system_text_json = json.load(system_text) + if part in system_text_json: + new_json_text[part] = system_text_json[part] + else: + print("part not in all_subsystem_config.json") + new_json = json.dumps(new_json_text, indent=4) + with open(part_info_path, "w") as out_file: + out_file.write(new_json) + else: + print("%s not exists.", all_system_info_path) + + +if __name__ == '__main__': + part_name_list = [] + while True: + print("For example: run -tp partname\n" + " run -tp partname1 partname2") + + # 获取用户输入命令 + part_name = input("Please enter your command: ") + if part_name == "": + continue + if " -tp " in part_name: + part_name_list = part_name.strip().split(" -tp ")[1].split() + break + else: + continue + + current_path = os.getcwd() + root_path = current_path.split("/test/testfwk/developer_test")[0] + all_system_info_path = os.path.join( + root_path, "test/testfwk/developer_test/localCoverage/all_subsystem_config.json") + part_info_path = os.path.join( + root_path, "test/testfwk/developer_test/localCoverage/restore_comment/part_config.json") + + # 获取要修改的源代码的部件信息 + get_part_config_json(part_name_list, all_system_info_path, part_info_path) + + # 执行修改 + add_lcov(part_info_path) diff --git a/localCoverage/restore_comment/restore_source_code.py b/localCoverage/restore_comment/restore_source_code.py index 999c6a4..fcdfb32 100644 --- a/localCoverage/restore_comment/restore_source_code.py +++ b/localCoverage/restore_comment/restore_source_code.py @@ -28,18 +28,21 @@ if __name__ == '__main__': root_path = current_path.split("/test/testfwk/developer_test")[0] subsystem_config_path = os.path.join( root_path, "test/testfwk/developer_test/localCoverage/restore_comment/part_config.json") - with open(subsystem_config_path, "r", encoding="utf-8", errors="ignore") as fp: - data_dict = json.load(fp) - for key, value in data_dict.items(): - if "path" in value.keys(): - for path_str in value["path"]: - file_path = os.path.join(root_path, path_str) - if os.path.exists(file_path): - if os.path.exists(file_path + "_primal"): - subprocess.Popen("rm -rf %s" % file_path, shell=True).communicate() - subprocess.Popen("mv %s %s" % ( - file_path + "_primal", file_path), shell=True).communicate() - else: - print("The directory does not exist.", file_path) + if not os.path.exists(subsystem_config_path): + print("part_config.json not exist.") + else: + with open(subsystem_config_path, "r", encoding="utf-8", errors="ignore") as fp: + data_dict = json.load(fp) + for key, value in data_dict.items(): + if "path" in value.keys(): + for path_str in value["path"]: + file_path = os.path.join(root_path, path_str) + if os.path.exists(file_path): + if os.path.exists(file_path + "_primal"): + subprocess.Popen("rm -rf %s" % file_path, shell=True).communicate() + subprocess.Popen("mv %s %s" % ( + file_path + "_primal", file_path), shell=True).communicate() + else: + print("The directory does not exist.", file_path) except: print(traceback.format_exc()) diff --git a/src/core/__pycache__/__init__.cpython-37.pyc b/src/core/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4628ba8c5aaed9f2404b02a084836cdeb757d427 GIT binary patch literal 171 zcmZ?b<>g`kg7YW7Cbu&&FgylvV1N2KczG$)edCaXCP((0KcLzl>h($ literal 0 HcmV?d00001 diff --git a/src/core/__pycache__/common.cpython-37.pyc b/src/core/__pycache__/common.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3399ecb5981c866b9df14fb5b347c8a6969c7930 GIT binary patch literal 913 zcmZuw!A=xG5bf%j9fk$gjT(Yiyf_?ymFQtZj0z#12oaQIGNiLkwY$U4?kwHCf@Joj z9|A}J#GCiNdh!FjaI$(b7{yk1zSGa5g>|4xqr#(uiZ_22|vlIRsu z$PjWCGvr-}0X_7;vY2BHIjtTBI76$Cu+O6K7x}YY`=~38(8XA#Qlte+p^CzYQOERB za2_;#k{ZbtiEfiZK#pG5o50yh3ES*wdBP1lh6`S@l3((PSM9vgy9Culf1jN+4;j`d zY_NM?UtRk!&T?GUJzJ|#JUdd-A)^m=BH!{tTi>N%{o^7V+CZLV+UUqvE{*tJ+LLKt z3_AlUayqbnX5=8QPtES$H>PIE^XlzZJ9($2(#b0vWJB^*9aE@eTk5_kM#;z1zLDA_ zP7xL;KgqlpNhO>`v=Xh-BrTLAH5e4b)zN3WlNipCw1E@m-<{<<%N46U_ zUBf(*ip?DYB_kd;OF-yz)!bu*c%SR#5-u1z2A?2IV2>Fn;R~pzg!r*{;g@hp_LJa{ zZVjyhkoQTKsBURuy zHC0RFhtz=KHN}5V^nZETMe4#Gel3cstDlAV_kqz=t|d{eqQK4w(aCcmrmVQ)s^fpY d?%s`ZU$EikfU?TviwCsRA*qlDUN{#v{s85C*Ny-H literal 0 HcmV?d00001 diff --git a/src/core/__pycache__/constants.cpython-37.pyc b/src/core/__pycache__/constants.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe41ac3b4862890852f7feb8064b502f58d71a33 GIT binary patch literal 3814 zcmb7HOLH5?5yp!oxF9Xak{|IaQ&7n!92$^SsftU9Q-VN{L<9i}9#&~X*VYm<0G3+p zu4iTifr(D`pUFSTE%&|Vm~$>U<(t8S3y@4v%i7^Qdb_{=x@V^GWOvs{;Q8l2{?q^Z zy+q<)YOr`R=sdv%NvF*{>MAi2O&hXH28G1tY0b=>2 z(R++nJV3(|W|Ah%6iu3GnldvqZEmnlfZF&a@pIDLLSF+wKRYwdllbiXoUC#pf;qU<$u{eW>x z%~;=_2;M*G`<$TxL$)VHDVRn(lnw0Am6imt1%)exCXqV-Wa*1yxD*$A2Y+(a*0U$| zW~EziHH%5EeAe#Fnk#=goD^mi=l zr_griD_fRD{k~=K4Fy1Dag+_XVnn6qMOL7EpwY0G)uR2#^umAXioQc=nk@Bm#Yv&nGtgX-Ne=cbkgYb@Zvkcz zj!)M%UMVK`4k+?*6vws3^J`LLM^UiA@m&nZXX`lPf=w{E17W_a8XQy!t^#PTSnV9Q zUht1EP5-%9@2(0q>Yc8+LfcWTY2Jx@@I$TLL4NbRGW9Ffe5#tOvPlKuH+aSSXtGJ< z(#7AkS#)G{3zPK3XMW1;ruI1JsJU@?3+$?bv z^62hiyYj47Z8Z<;N7iAzQF~tL9$%9@AFO+60X;i{nngC>U%NF*SAOvh@b2_Fwf4=> zizIJjPqZs=BoXmqWV2vaTm?ne)vDCtyn8aoGZ> zC7v${0tgk3ASwq5d(&ruB#uXL#s;oqdoVt6*a7hL z?Ngw1?FsQYv4@;tP5KJ&ggeslhWkYL139rdgJG&_5$80ND`d^RAn-XZ;KK`#6e=B3 z?-a^*E*!tCP=7*x+)zoIwY0mOY*edJlH1;R3Rqp zO~4g?fOHg%Ob4#R6xGWxkpY&~SOl!^44gjv@`j;3WMt^$0`=eyK_M`9gt|)w;86f_ zov|Zz^(JB&undg>gFcsgg>qRRn`KpGm4=>EC>qAR2=PN1gwhIZ#PxepxW5;hD2jq% z=!5c1SfS@g_5B`X1nzjI3mS+N$zM@eUZ`8>x|mrQfY`_mEYvhQ!CgOFW%-*cz1BYDW6aS=kY9=-w$zBO)kW!=Xi8hxm54C|<=Pk5_ad-l9h>DI2fQ*X~| zgrSG~9Xk&3{+l|y=RX-fj~%(COOnmv=K7tbD*aj2^p)yebwMbQ&y@}J12g+|CdJhZ zbVaD?ZP!Jqzv-WzvA)!mx-Ok{m80dZQW<6cFxx+WRCkV0*Jvu4N^WNIxAX7k@B9yi CgYu97 literal 0 HcmV?d00001 diff --git a/src/core/__pycache__/exception.cpython-37.pyc b/src/core/__pycache__/exception.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..32fa5b558d5b53adb0e8c16e301e485b618bb14f GIT binary patch literal 2607 zcmcgu&2AJ&5bmCz-Py$kg84}xF#}2~hxY#8y{`&Aw`m{~R z-ze0>gUu>T{U@XjfZVaN z&$~}ZbSwqUv*A`d{WEL?i76+s^M-6tPPwxe#4dNaw?|^{4e?0q!+pQ#K1x(FT2o4@ z)T!>{Z=9%4pN7Sd*W@jIM<{tkUlHbT0(WUYatmKi#zGYVW5axC7%MsgRk4wN7CD8d zMYf?Z3=u6ljHOwkHDm9|zw5m_gLN&G9^B(2xT=jxj8uaMLT?#49&GGv8KKPp7uYi{ zwnZl4DTXKP#z3odkV+*6VmB3IGnDzt_@zRN&!E-#CZSzAU26PWsf|o2euaU*(a|1E zjW}{}?>RY(?m7MG@#gNG@E0A?$`$3qpDIARS_0S=ZN|U}#(n@n+ep&ssYU@jZa+sY z3|5|u1O%(g*hun8hWiD^UQCj#{9+wZ9n`y6g)J3X##r+zSkpoa@NtEXAW+utfG&9U zB!!dNz|i103OUaHF*M?V*dC^$C-YpS=4*+fFe0T_mJUuC!;%`MBQ~Da8#HwpO`V~5 zalRo(M)drAJ)cF_LU9>Qs*qituc$#;A)VAQTo!OapR5+Oh`Ski4#0REKK%r z8OEg&!oD)!NsH-s^h zL$j&mP9E-Tiag{tc|#>OCR*q)3DZ)`ioNp{6~9U3!rxA^iHNFH{tld~$$T)CZ`NV4 zG`M=WH%Df~<-_$=Aa$GrF;fyEkPf{E^0GBD$=r79klkntqd={&C z;CfiJ@$3L)(4URQ>Ogi0qJ79_@yVC&>kv=tmjJTvCQ>wTg+H7-8zINNvQFD zO^#6PigW@T3uO+JsW@bkEupOvBW0M${8?yZs721hq0yn7nDN9^yxQMjao&&8O+o{50tT3%DP>m1!)S|{B_^s^fzuT6KM<+Y>XW=7qybhB9 literal 0 HcmV?d00001 diff --git a/src/core/__pycache__/utils.cpython-37.pyc b/src/core/__pycache__/utils.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7dbd5be086b5faabe4792c8bfe88de723c5e3b27 GIT binary patch literal 4969 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 literal 0 HcmV?d00001 diff --git a/src/core/command/__pycache__/__init__.cpython-37.pyc b/src/core/command/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ebbd52117eb44c237abfe39624682cc8106aa83c GIT binary patch literal 179 zcmZ?b<>g`kg7YW7CU-M2FgylvV1N1KIi+h#3HJNHg33 literal 0 HcmV?d00001 diff --git a/src/core/command/__pycache__/console.cpython-37.pyc b/src/core/command/__pycache__/console.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d2b3d46ff1b7f75a8f688d02a828fed94d5a9ebc GIT binary patch literal 11633 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 M;#W2Ln=0u43(*eh%>V!Z literal 0 HcmV?d00001 diff --git a/src/core/command/__pycache__/display.cpython-37.pyc b/src/core/command/__pycache__/display.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9a775a9b8eafe007c0b6498bdac8500377091528 GIT binary patch literal 9406 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 Pjvu~;j@CqeIzRqD%%qmn literal 0 HcmV?d00001 diff --git a/src/core/command/__pycache__/distribute_execute.cpython-37.pyc b/src/core/command/__pycache__/distribute_execute.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1155bceb32e2d131e44115c89983447fa606469e GIT binary patch literal 1781 zcmZ`(OK%)S5bmD$&aUG}jFksMAjJ`LSxA&q1SsG|AS4zf5+RKiwIfY zvnTt9*hl^Xzkn0m`^qUlfD0$8dc9s_g&B2qb#-@5)mLB5S8HoAf#=WP|ITmq2>A;a z%f|!d2@Lfe2u?UHNxGP6N@4AkPUWU9MVniCm7n@n_sXCO(~y#H2={q#N_ZgXG&*t9 z9;ZK%Bzz10$T*>9Z6sb5x%fV-vjZW)5RVF_W$}Eb1*~r6Qe;{%QMLLFlS0i(&Gw5@ zJ^PWE3PYKUWk0(8d3D^WJBkPI#C!9>Y? zk~dO-sH&{y6Ml&o6GtKk+=lHN6EOzfHDm9?R~6Qg(10FqU&(d2Jd#t~h6m@%q#waT zL&;AlB^r{SIwuH$3z|FiK=Z8@9H2Gi2ux&wamU72LO*Mb`-105&-kq@YAw;T1;m69 zIF>sNe*E@_@z)QGUuDx~xqN8)S$!aC%}Pvd4X!0rMtB<`TnOZ>9Dw)`hO!K%ku#t% z9nj;=t645WA-Tl>4x=Nih^_1&pmcOjJ7?}_0twkfF)*w^`od+BMo;uTwj_x}XThHJgUlMTO!XbK_!x0ZlXZM(-_Ibph{3V%ibzz^j-Z-@VGLYd+rHM##}+8`<`7#wOAtlcVN!4ZKEJ|A*eY zu=P0%g`GpLHSf~JIC13`Y_CKTV)r9#jG36Rs^PN|^#NlqXIZ(}k$t>`(aC!#@MBj{ zvYlp|%!iG;FcdaUL?bVX;`bz4lUVM+WTF}TX%LL`&I(aJ#2-{s4=;M%wtxE3)dMSi vxKb@6)7vYMz#Td;;H}fBc=?YY_4m zE>@of%p({Q2_uZAB&=r|(rRsl2FylkPOZ?Qgj>wKprL(07;u+_ncTTBLzmH~B(PtA z7t#x;UZ1708suUcrTK8kg*Fd(mf-H{Gl6*oL+%0L1W$vLC^IfeXfl&oFk9SaHghfs zoaitYPVfZUB?b`uaKPqTnKnr?_UbJvI`vSRDtUwf`&(i)}O?$xfE5j-1bCxlo<^vKzSCOnIigl{4)w z4YmKDM{R!f^?|mz5V_D>D33rZ8uE;bSdH>5FtjCkI?!%D!?paKh;@kjpToxw`_Cj7 zvi~`ojViLw#yd2Zm2uMsXJkp?izPHKsNgL7CQ=X22*irVB%v zV++dzOM}^0&bguNg~OcEs4-G*X)yP~`0b-}voseT^ANd`il0v3F6k5U-Z)&l&Hyg8m5z?2b}{9^73(!7Q3{Fds#8_G z_1!V=)WQx5JA+Zmp+eO0Lx5M)6M^MZIJ@`d?t6aVYa^H1!hLOx^HHWvc_#I%GM|ft zLoOMQM4qb%H3W9Bwno_?*A`%cRU+nD5-YCl6ERXeu*Dkagv}daX%9m{`_LU`5iYc& zVlm{ZDv6pPO8O397Tqwdl;4FNxe0{O7W{1(2qlhU2VuO;=p`H-u&sLY7hq}}R~TMd zfZ#Q<&};UUac(MS;WE24mzd(dS3UgL_+>Nh(DfcEe^Jbro#bxQ<)9%fS8zwP=CShcF~w zofw;RbBS!*@BrI3ty{Em^zzfvgD1+1B7E4QNc&MV&DlIfz7<8!=W$x^h*!X`xCcZx zlQfoc%GGhss)KI?gO8HH;;Wu?%!R~q@u=7In()w939Qog4v4jT3hg*bxWG5R?guA7 d8uLU|_P06K-Y0d0pCQx|a}M6AXS58@_!mHc-dq3x literal 0 HcmV?d00001 diff --git a/src/core/command/__pycache__/parameter.cpython-37.pyc b/src/core/command/__pycache__/parameter.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f914b2dfdb99441afc0102a7739b96154997172c GIT binary patch literal 2034 zcma)7OOM<{5blRxJDCKMEP=cvD*~aBk`aMDAcUfXL>mb$n}`HOvL-Ud-8=D)$M$yj zCc7igDft%>((I872Yv-N?tSIN58#p$Rqfr$E&@bbU9K)yRabXaeg5k7=^lac+pmA- zb)S&mad9*}U~a?INCXkIBvYDDiaaaXlqcNry!57i;!`52@Ltj+xKD&Hf>%TYGJMIC zNQ95bAo>HmkO8&tG-YPCYBf#EdOVg2M5{W_s#NbbO|4AYs9Nmi2ILpkRW_9`YBjlA zS6jvSo2<&f!iKQabt!Xnc{DgMw_)n*KqN`1APJLPP{Cdi2+ISW3(xU>7hn=}q1ly( z8SZ4H${ASW2x0m#@50o-0BNb96Q=rtK7#Y3D|9mU=d7g*BEkc@ph)LjM00O%z2*1F z(_3@D_2KIZ$dO|QL?@y*_Y7Zn;?x1$=0no@Et`aD?X3(o9+I84CvfZYp!L+xdmlP~ zS5Ei~UW4sx*!xF54|ZNXA#Kn_0yY8Md4JOqOFyynrlp@+`kAF`Z|L>MZ)m(e`}pxQ z85^lhDWA(S-miCKS-}NJ5f?fxs=QW8=4LqXt*?zL8hABjVQg4vQH+7%8xQW=@I|Jo zq8blE%kxqvJ#?8mpUD~bN+)tZEemaIuUjLZ^zvsipQKx5Hnv`2A7NXPdqU=JrjM>M6A}pdFJ44@P9__&cE1(RdJ>UY6 zcJgzuo_(||r{RD2UY1$_?w6%j!D3A2Owg7>QG9R6OR}H`WX|`#ZK*3Mul2By=3dJe zy!8Y*U|1G{Od_>myoE0q78ZJe;$n*czVV9$Wjj}%kgDf=hTws<49djYwEWJ-#_Y7n zOorLttSdQG6e1Z!3Sq!rz;n3U%rhg$wc1aMYOA(B^ei+ahtKL9D5~?Q9b_P_gnbXK zva(E17!3lo3R=mE*>7Z58E2g9<@&G|mR6$3)dh6yVT7(II`RPu&mP6LwErB$`VtTV zd5Kt;uRi1qbH(T?NM@H$<_H5=+AlMMn1a)RfB~kZ+W>!)NUu5$0pXgV3)bDZ-~bJf zw{1S*>Yn2~YlMz%4`79>riF}yx5nxEN4f&rINVf-MzgEfvWMu1 z0D7`f*Jls#`;9V&3XgB(@v_Ku4DedjCYF29J8@=W1B(APGyq|2im4p_Z;W_62<)k2 zfgLM_2ro9zw6rV8x!zJ2;WPtoJuS;E8`g~}0MBjzc;o#&$>%$~P`g#SJlEIYMq>#O zx{9e~tB~FR-hGN~=&{+=w@Lm7`%M6?C`~IkaGKg)noi-zQzG9_)1BR{Jp6JhFEg#- z_wcM1E_QVd_EZBT2vEleMx(HwvHCPJ5$#{?pL4R!!HNy{0G*0lD*Vsb9-`84*A%5z zSZDT<6Xfo1H|$<1AQt}hTqC-hwL$&EHej=JdTetSi))GK%kC(*upM;-q)*{t5&sL& CUMy?? literal 0 HcmV?d00001 diff --git a/src/core/command/__pycache__/run.cpython-37.pyc b/src/core/command/__pycache__/run.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b5aa3305bc8f7dd73b1832ae8da01a061bfe53e GIT binary patch literal 10229 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 literal 0 HcmV?d00001 diff --git a/src/core/config/__pycache__/config_manager.cpython-37.pyc b/src/core/config/__pycache__/config_manager.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e98356e8247a9fee0593bd394fe5975fcbe545b GIT binary patch literal 10086 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 literal 0 HcmV?d00001 diff --git a/src/core/config/__pycache__/parse_parts_config.cpython-37.pyc b/src/core/config/__pycache__/parse_parts_config.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf842ba202fc301c6b3b1339befac497d118bf68 GIT binary patch literal 2592 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 U*G^zeOn3Z5lV&J#Bhuvj7fKR8rvLx| literal 0 HcmV?d00001 diff --git a/src/core/driver/__pycache__/__init__.cpython-37.pyc b/src/core/driver/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4d5deb2970b62529461cb8889784749a503f768 GIT binary patch literal 178 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 D$GOh> literal 0 HcmV?d00001 diff --git a/src/core/driver/__pycache__/lite_driver.cpython-37.pyc b/src/core/driver/__pycache__/lite_driver.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1146cc5c39a98fab9767ef1f0379eac7533959a0 GIT binary patch literal 15834 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 literal 0 HcmV?d00001 diff --git a/src/core/driver/__pycache__/parser.cpython-37.pyc b/src/core/driver/__pycache__/parser.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4757c7d1c7cb52d095c6d5dc9bbf2014a941f6c3 GIT binary patch literal 1188 zcmZ`&&2H2%5VrHP$!4>wQho%21J@u_35gRzXv=nss-jS_Du^hO6~%6q-DI=aNfC%! z`!c)H}~=NM$DJwro`#`OA20&v?F>dD-uK1jdi=ztVR$AwO}k92N*em?{F` zgwvc9G@=w`BR2{&GC?-E#qC2gvR)D1;r0pPwlI&)$QBed4mUw#9vjCr>NFacTcEKT zjl;VW5_qRzp9EBQc~T{5o+t$iYdo(D?Tr#8-U?OcmF`XItXeL-RyiuUNb&k|P!NVN z)dK)QBFaf*a2lE1h%64z;#LID1h*a8fg{=A&)J#8Tc-^eAccXWUB>1~AsEvhV@1j9 z9A%%ek9Crt?>PJ6ZusVXsGZ6FXf&QobZ2{W=k<6C6uUcnd*iKdM6Q9s27Z4SJ&X61 zkSgBfMK;e=C6lU@@s?1ts$9eepJtU%Rg3^KMK=Y&Lk zZUA47#DdTyY}ndPkuDtgN9!Y)Y8~J!nL>%oy5$;3)F*J4hJm5GO&G|X_A|xOvRLGz z5*(AQM1F8dmAnCFv&Ts@8T`23W%)P zZK!wKEYyX(kNemrZH(82hmJR3ssX@icwyk`-bKR-B{4nP6415MMA2a^$#ce9{;_u2 aIIi)d-REtKy}+a>%%M+x!!y^M^}%0U(gn@{ literal 0 HcmV?d00001 diff --git a/src/core/driver/drivers.py b/src/core/driver/drivers.py index c13d37f..b6378ac 100644 --- a/src/core/driver/drivers.py +++ b/src/core/driver/drivers.py @@ -21,6 +21,7 @@ import os import re import shutil import subprocess +import sys import time import platform import zipfile @@ -535,7 +536,11 @@ class CppTestDriver(IDriver): test_para) else: coverage_outpath = self.config.coverage_outpath - strip_num = len(coverage_outpath.strip("/").split("/")) + if coverage_outpath: + strip_num = len(coverage_outpath.strip("/").split("/")) + else: + root_path = (sys.framework_root_dir.split("test/testfwk/developer_test")[0]) + strip_num = root_path.strip("/").split("/") if "fuzztest" == self.config.testtype[0]: self._push_corpus_cov_if_exist(suite_file) command = f"cd {self.config.target_test_path}; tar zxf {filename}_corpus.tar.gz; \ diff --git a/src/core/testcase/__pycache__/__init__.cpython-37.pyc b/src/core/testcase/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69d4d26aedd37bf8b170f9b6a6b0f8b70f41c06d GIT binary patch literal 180 zcmZ?b<>g`kg7YW7CU-M2FgylvV1NTZlX-=vg$lA|9%m4taEHqjG literal 0 HcmV?d00001 diff --git a/src/core/testcase/__pycache__/testcase_manager.cpython-37.pyc b/src/core/testcase/__pycache__/testcase_manager.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac8fadc3eb468e88fe279d431e5ce7eead0f9d9f GIT binary patch literal 7243 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 literal 0 HcmV?d00001 diff --git a/src/core/testkit/__pycache__/kit_lite.cpython-37.pyc b/src/core/testkit/__pycache__/kit_lite.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dadff8bc98d2144a0cc5670d63c0dd39c4a53953 GIT binary patch literal 4605 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 literal 0 HcmV?d00001 diff --git a/src/main/__pycache__/__init__.cpython-37.pyc b/src/main/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..55b9c8a1ec4056e27e19672ff31d6e42ce5054c8 GIT binary patch literal 294 zcmYLDu};G<5IrX;L8zU|7qDfi#EK9C%FF^Rk)>0x-6*QA@qOJ7o z4w{3VU}GbuB@TW_*jsw+EGqJwq2IBTwR%lHk~N`Xe%s6@2sx)cRus%ik#n8bJpWBo zjo4X>_y(b7>ksVj*Jtt}nh@ocb{rQ|=n@5aW8yZ^C^s+LWMYyTct>rXjiu29%ojYB gF(~P}!At!87FXlzba?JaKUs6JeoQrw+4W~#_aR2}S literal 0 HcmV?d00001 diff --git a/src/main/__pycache__/_init_global_config.cpython-37.pyc b/src/main/__pycache__/_init_global_config.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..128f26e19ecb1909175b6a3c62733251a33313f2 GIT binary patch literal 2236 zcmZuy&63#g$4?Kmr8^_5viq3?;l{?W|{PYa(g? zQub*n4m?Gc8*jpm3nyPW?E`S(M7QkSILUfSQtRul)sni^^Z9VtBk=w8=f8_=Ovpbt zx&9akpF-0gLKl;m{z5_$v)F-=#%|n!kqL4^DEW~HW=9r#-;$}n01NxM(4&V((Dbhq z)}b*;Nm-Ayqy=5EmyYe-x;LFmiob$zuOOiHV~|(gC8OkR_Uks*Drm8~U>V?^WB1av z+FonT-WzMaVs~N>EIez`Z!CNm`?p#Iare@(+(E-dFN0gT{TuGE;iAp(RxY4+)vbn! znfZyi9Ukx$;QrD+n1xIXVr!&AB;}`4whG*p1?7V}y!MuN<7aX>y>i zFxXRCy|WaCYk8~|f-ht&xRTQFO=ONh*?khJBsxfio=(8wxvrQ5U#PA8=s?#(oTxm? zL=|v;n52U9aQjdJa4OZB!!9`xDi3xklnKYLRMr#f+?7o7u-}{v>EYh>M4TCs>qO=j z?!mc)HdgL8$Ep=a*%8+Zm26DgyAs-}192woKEnP&DluEgER(tF;&trZdU}Odr|>mQ zUDZcm+E`gs05oJ`L@i?bw8v{8|fYW`U0wUL|o;prN8JjV`X4$%{- z+z7?(K|Y$p1$ub4PU16AW9(=`C+o0ZO*HmTku`*tiOYf(0~S=0UbLdcR=qs z1L{%+zaAak$gj_DH0)Z!F>nGlKs&Hfd$8^TQwcvjun*1FgcA^&nn3MHOLq2iK^~Kz zo|TSag@dp6!YN%VyH@TL9W^Oj{qXsu!0G|DsDKxH$R^~HmEPIAg$MS#bEovnp!5s+ z(k+5ZO3CvlPs#JiQ>bQGrS=tW36l)7j`PaOn0TDOaNpPO>x#~%ovNE;8>tNBc;#=_ z%VU$Il@CcC8Kc5M0`GulGCqc!4u>_hnNPc6u!$DyXeqS12foyObm%u2DA!BtyOz*% zIOOdGE6OVuahn=-hoP!=+ce(1**R$R1Uef;d-VedCxbSiBdXp5&1EfpGp? z69{6k;IbvXfGe|@Q`VT_ouwD!6mvyiQB?Dh{H7wX_YjtPI(Bo5* z-*t%@ne9Wi?y27?{J~K21IgJla(>tDXAG%93um=eula_>-)##UYF3AOx)YADs?9`x zk|>#HA~*I@!hQ=02bP16X`PtRzZQlT&Y~Q`sdO0JNPVl=L<$}))X93R7l~DJf@J?% zsEb8C3m+Vad~uXTYCTf|Q*3qv@EX7c8?sj;;rMM%weyY5zkO-Gl*f7eg;G*g{jY7> z+DSO9D_P?Q3J@0S(8bafc5hY;y_)uBwoP~{qZrBth;HzL1-1jJB9{nG` CzDo)K literal 0 HcmV?d00001 -- Gitee From 9e4c8c71f3eb0157e956a282aba8d5300499beca Mon Sep 17 00:00:00 2001 From: caojiale1 Date: Sat, 25 Feb 2023 17:11:02 +0800 Subject: [PATCH 09/14] Signed-off-by:caojiale1 --- .../__pycache__/__init__.cpython-37.pyc | Bin 176 -> 0 bytes .../coverage_rc/lcovrc_cov_template | 175 ------------------ src/core/__pycache__/__init__.cpython-37.pyc | Bin 171 -> 0 bytes src/core/__pycache__/common.cpython-37.pyc | Bin 913 -> 0 bytes src/core/__pycache__/constants.cpython-37.pyc | Bin 3814 -> 0 bytes src/core/__pycache__/exception.cpython-37.pyc | Bin 2607 -> 0 bytes src/core/__pycache__/utils.cpython-37.pyc | Bin 4969 -> 0 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 179 -> 0 bytes .../__pycache__/console.cpython-37.pyc | Bin 11633 -> 0 bytes .../__pycache__/display.cpython-37.pyc | Bin 9406 -> 0 bytes .../distribute_execute.cpython-37.pyc | Bin 1781 -> 0 bytes .../command/__pycache__/gen.cpython-37.pyc | Bin 1815 -> 0 bytes .../__pycache__/parameter.cpython-37.pyc | Bin 2034 -> 0 bytes .../command/__pycache__/run.cpython-37.pyc | Bin 10229 -> 0 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 178 -> 0 bytes .../__pycache__/config_manager.cpython-37.pyc | Bin 10086 -> 0 bytes .../parse_parts_config.cpython-37.pyc | Bin 2592 -> 0 bytes .../resource_manager.cpython-37.pyc | Bin 7385 -> 0 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 178 -> 0 bytes .../driver/__pycache__/drivers.cpython-37.pyc | Bin 26772 -> 0 bytes .../__pycache__/lite_driver.cpython-37.pyc | Bin 15834 -> 0 bytes .../driver/__pycache__/parser.cpython-37.pyc | Bin 1188 -> 0 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 180 -> 0 bytes .../testcase_manager.cpython-37.pyc | Bin 7243 -> 0 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 179 -> 0 bytes .../__pycache__/kit_lite.cpython-37.pyc | Bin 4605 -> 0 bytes src/main/__pycache__/__init__.cpython-37.pyc | Bin 294 -> 0 bytes .../_init_global_config.cpython-37.pyc | Bin 2236 -> 0 bytes 28 files changed, 175 deletions(-) delete mode 100644 localCoverage/__pycache__/__init__.cpython-37.pyc delete mode 100644 localCoverage/codeCoverage/coverage_rc/lcovrc_cov_template delete mode 100644 src/core/__pycache__/__init__.cpython-37.pyc delete mode 100644 src/core/__pycache__/common.cpython-37.pyc delete mode 100644 src/core/__pycache__/constants.cpython-37.pyc delete mode 100644 src/core/__pycache__/exception.cpython-37.pyc delete mode 100644 src/core/__pycache__/utils.cpython-37.pyc delete mode 100644 src/core/command/__pycache__/__init__.cpython-37.pyc delete mode 100644 src/core/command/__pycache__/console.cpython-37.pyc delete mode 100644 src/core/command/__pycache__/display.cpython-37.pyc delete mode 100644 src/core/command/__pycache__/distribute_execute.cpython-37.pyc delete mode 100644 src/core/command/__pycache__/gen.cpython-37.pyc delete mode 100644 src/core/command/__pycache__/parameter.cpython-37.pyc delete mode 100644 src/core/command/__pycache__/run.cpython-37.pyc delete mode 100644 src/core/config/__pycache__/__init__.cpython-37.pyc delete mode 100644 src/core/config/__pycache__/config_manager.cpython-37.pyc delete mode 100644 src/core/config/__pycache__/parse_parts_config.cpython-37.pyc delete mode 100644 src/core/config/__pycache__/resource_manager.cpython-37.pyc delete mode 100644 src/core/driver/__pycache__/__init__.cpython-37.pyc delete mode 100644 src/core/driver/__pycache__/drivers.cpython-37.pyc delete mode 100644 src/core/driver/__pycache__/lite_driver.cpython-37.pyc delete mode 100644 src/core/driver/__pycache__/parser.cpython-37.pyc delete mode 100644 src/core/testcase/__pycache__/__init__.cpython-37.pyc delete mode 100644 src/core/testcase/__pycache__/testcase_manager.cpython-37.pyc delete mode 100644 src/core/testkit/__pycache__/__init__.cpython-37.pyc delete mode 100644 src/core/testkit/__pycache__/kit_lite.cpython-37.pyc delete mode 100644 src/main/__pycache__/__init__.cpython-37.pyc delete mode 100644 src/main/__pycache__/_init_global_config.cpython-37.pyc diff --git a/localCoverage/__pycache__/__init__.cpython-37.pyc b/localCoverage/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index f2ff5b3e8eb9c6a6eb7ce3a3042999fe4e53d007..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmZ?b<>g`kg7YW7CWGk5AOZ#$feZ&AE@lA|DGb33nv8xc8Hzx{2;x_yvsFxJacWU< zjAKe}W?p7-Nl{`+eo>4|YH@Z+enCuHd3H%^aY+n_0J7s#Qp-|v@(WUn;z1(uhA}z$ q$%#46`DLj^iRq~^@$o=2O5)@73My}L*yQG?l;)(`fvo%t#0&s!{xSOi diff --git a/localCoverage/codeCoverage/coverage_rc/lcovrc_cov_template b/localCoverage/codeCoverage/coverage_rc/lcovrc_cov_template deleted file mode 100644 index 0f99e76..0000000 --- a/localCoverage/codeCoverage/coverage_rc/lcovrc_cov_template +++ /dev/null @@ -1,175 +0,0 @@ -# -# Copyright (c) 2023 Huawei Device Co., Ltd. -# 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. -# -# -# /etc/lcovrc - system-wide defaults for LCOV -# -# To change settings for a single user, place a customized copy of this file -# at location ~/.lcovrc -# - -# Specify an external style sheet file (same as -css-file option of genhtml) -# genhtml_css_file = gcov.css - -# Specify coverage rate limits (in %) for classifying file entries -# HI: hi_limit <= rate <= 100 graph color: green -# MED: med_limit <= rate < hi_limit graph color: orange -# LO: 0 <= rate < med_limit graph color: red -genhtml_hi_limit = 90 -genhtml_med_limit = 75 - -# Width of line coverage field in source code view -genhtml_line_field_width = 12 - -# Width of branch coverage field in source code view -genhtml_branch_field_width = 16 - -# Width of overview image (used by --frames option of genhtml) -genhtml_overview_width = 80 - -# Resolution of overview navigation: this number specifies the maximum -# difference in lines between the position a user selected from the overview -# and the position the source code window is scrolled to (used by --frames -# option of genhtml) -genhtml_nav_resolution = 4 - -# Clicking a line in the overview image should show the source code view at -# a position a bit further up so that the requested line is not the first -# line in the window. This number specifies that offset in lines (used by -# --frames option of genhtml) -genhtml_nav_offset = 10 - -# Do not remove unused test descriptions if non-zero (same as -# --keep-descriptions option of genhtml) -genhtml_keep_descriptions = 0 - -# Do not remove prefix from directory names if non-zero (same as --no-prefix -# option of genhtml) -genhtml_no_prefix = 0 - -# Do not create source code view if non-zero (same as --no-source option of -# genhtml) -genhtml_no_source = 0 - -# Replace tabs with number of spaces in source view (same as --num-spaces -# option of genhtml) -genhtml_num_spaces = 8 - -# Highlight lines with converted-only data if non-zero (same as --highlight -# option of genhtml) -genhtml_highlight = 0 - -# Include color legend in HTML output if non-zero (same as --legend option of -# genhtml) -genhtml_legend = 0 - -# Use FILE as HTML prolog for generated pages (same as --html-prolog option of -# genhtml) -# genhtml_html_prolog = FILE - -# Use FILE as HTML epilog for generated pages (same as --html-epilog option of -# genhtml) -# genhtml_html_epilog = FILE - -# Use custom filename extension for pages (same as --html-extension option of -# genhtml) -# genhtml_html_extension = html - -# Compress all generated html files with gzip. -# genhtml_html_gzip = 1 - -# Include sorted overview pages (can be disabled by the --no-sort option of -# genhtml) -genhtml_sort = 1 - -# Include function coverage data display (can be disabled by the -# --no-func-coverage option of genhtml) -# genhtml_function_coverage = 1 - -# Include branch coverage data display (can be disabled by the -# --no-branch-coverage option of genhtml) -# genhtml_branch_coverage = 1 - -# Specify the character set of all generated HTML pages -genhtml_charset=UTF-8 - -# Allow HTML markup in test case description text if non-zero -genhtml_desc_html = 0 - -# Specify the precision for coverage rates -# genhtml_precision = 1 - -# Location of the gcov tool (same as --gcov-info option of geninfo) -# geninfo_gcov_tool = gcov - -# Adjust test names to include operating system information if non-zero -# geninfo_adjust_testname = 0 - -# Calculate checksum for each source code line if non-zero (same as --checksum -# option of geninfo if non-zero, same as --no-checksum if zero) -# geninfo_checksum = 1 - -# Specify whether to capture coverage data for external source files (can -# be overridden by the --external and --no-external options of geninfo/lcov) -# geninfo_external = 1 - -# Enable libtool compatibility mode if non-zero (same as --compat-libtool option -# of geninfo if non-zero, same as --no-compat-libtool if zero) -# geninfo_compat_libtool = 0 - -# Specify compatiblity modes (same as --compat option of geninfo). -# geninfo_compat = libtool = on, hammer=auto, split_crc=auto - -# Adjust path to source files by removing or changing path components that -# match the specified pattern (Perl regular expression format) -# geninfo_adjust_src_path = /tmp/build => /usr/src - -# Specify if geninfo should try to automatically determine the base-directory -# when collecting coverage data. -geninfo_auto_base = 1 - -# Directory containing gcov kernel files -# lcov_gcov_dir = /proc/gcov - -# Location of the insmod tool -lcov_insmod_tool = /sbin/insmod - -# Location of the modprobe tool -lcov_modprobe_tool = /sbin/modprobe - -# Location of the rmmod tool -lcov_rmmod_tool = /sbin/rmmod - -# Show full paths during list operation if non-zero (same as --list-full-path -# option of lcov) -lcov_list_full_path = 0 - -# Specify the maximum width for list output. This value is ignored when -# lcov_list_full_path is non-zero. -lcov_list_width = 80 - -# Specify the maximum percentage of file names which may be truncated when -# choosing a directory prefix in list output. This value is ignored when -# lcov_list_full_path is non-zero. -lcov_list_truncate_max = 20 - -# Specify if function coverage data should be collected and processed. -lcov_function_coverage = 1 - -# Specify if branch coverage data should be collected and processed. -lcov_branch_coverage = 1 - -# Specify the regular expression of lines to exclude from branch coveragel -# Default is 'LCOV_EXCL_BR_LINE'. -lcov_excl_br_line = LCOV_EXCL_BR_LINE \ No newline at end of file diff --git a/src/core/__pycache__/__init__.cpython-37.pyc b/src/core/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 4628ba8c5aaed9f2404b02a084836cdeb757d427..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmZ?b<>g`kg7YW7Cbu&&FgylvV1N2KczG$)edCaXCP((0KcLzl>h($ diff --git a/src/core/__pycache__/common.cpython-37.pyc b/src/core/__pycache__/common.cpython-37.pyc deleted file mode 100644 index 3399ecb5981c866b9df14fb5b347c8a6969c7930..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 913 zcmZuw!A=xG5bf%j9fk$gjT(Yiyf_?ymFQtZj0z#12oaQIGNiLkwY$U4?kwHCf@Joj z9|A}J#GCiNdh!FjaI$(b7{yk1zSGa5g>|4xqr#(uiZ_22|vlIRsu z$PjWCGvr-}0X_7;vY2BHIjtTBI76$Cu+O6K7x}YY`=~38(8XA#Qlte+p^CzYQOERB za2_;#k{ZbtiEfiZK#pG5o50yh3ES*wdBP1lh6`S@l3((PSM9vgy9Culf1jN+4;j`d zY_NM?UtRk!&T?GUJzJ|#JUdd-A)^m=BH!{tTi>N%{o^7V+CZLV+UUqvE{*tJ+LLKt z3_AlUayqbnX5=8QPtES$H>PIE^XlzZJ9($2(#b0vWJB^*9aE@eTk5_kM#;z1zLDA_ zP7xL;KgqlpNhO>`v=Xh-BrTLAH5e4b)zN3WlNipCw1E@m-<{<<%N46U_ zUBf(*ip?DYB_kd;OF-yz)!bu*c%SR#5-u1z2A?2IV2>Fn;R~pzg!r*{;g@hp_LJa{ zZVjyhkoQTKsBURuy zHC0RFhtz=KHN}5V^nZETMe4#Gel3cstDlAV_kqz=t|d{eqQK4w(aCcmrmVQ)s^fpY d?%s`ZU$EikfU?TviwCsRA*qlDUN{#v{s85C*Ny-H diff --git a/src/core/__pycache__/constants.cpython-37.pyc b/src/core/__pycache__/constants.cpython-37.pyc deleted file mode 100644 index fe41ac3b4862890852f7feb8064b502f58d71a33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3814 zcmb7HOLH5?5yp!oxF9Xak{|IaQ&7n!92$^SsftU9Q-VN{L<9i}9#&~X*VYm<0G3+p zu4iTifr(D`pUFSTE%&|Vm~$>U<(t8S3y@4v%i7^Qdb_{=x@V^GWOvs{;Q8l2{?q^Z zy+q<)YOr`R=sdv%NvF*{>MAi2O&hXH28G1tY0b=>2 z(R++nJV3(|W|Ah%6iu3GnldvqZEmnlfZF&a@pIDLLSF+wKRYwdllbiXoUC#pf;qU<$u{eW>x z%~;=_2;M*G`<$TxL$)VHDVRn(lnw0Am6imt1%)exCXqV-Wa*1yxD*$A2Y+(a*0U$| zW~EziHH%5EeAe#Fnk#=goD^mi=l zr_griD_fRD{k~=K4Fy1Dag+_XVnn6qMOL7EpwY0G)uR2#^umAXioQc=nk@Bm#Yv&nGtgX-Ne=cbkgYb@Zvkcz zj!)M%UMVK`4k+?*6vws3^J`LLM^UiA@m&nZXX`lPf=w{E17W_a8XQy!t^#PTSnV9Q zUht1EP5-%9@2(0q>Yc8+LfcWTY2Jx@@I$TLL4NbRGW9Ffe5#tOvPlKuH+aSSXtGJ< z(#7AkS#)G{3zPK3XMW1;ruI1JsJU@?3+$?bv z^62hiyYj47Z8Z<;N7iAzQF~tL9$%9@AFO+60X;i{nngC>U%NF*SAOvh@b2_Fwf4=> zizIJjPqZs=BoXmqWV2vaTm?ne)vDCtyn8aoGZ> zC7v${0tgk3ASwq5d(&ruB#uXL#s;oqdoVt6*a7hL z?Ngw1?FsQYv4@;tP5KJ&ggeslhWkYL139rdgJG&_5$80ND`d^RAn-XZ;KK`#6e=B3 z?-a^*E*!tCP=7*x+)zoIwY0mOY*edJlH1;R3Rqp zO~4g?fOHg%Ob4#R6xGWxkpY&~SOl!^44gjv@`j;3WMt^$0`=eyK_M`9gt|)w;86f_ zov|Zz^(JB&undg>gFcsgg>qRRn`KpGm4=>EC>qAR2=PN1gwhIZ#PxepxW5;hD2jq% z=!5c1SfS@g_5B`X1nzjI3mS+N$zM@eUZ`8>x|mrQfY`_mEYvhQ!CgOFW%-*cz1BYDW6aS=kY9=-w$zBO)kW!=Xi8hxm54C|<=Pk5_ad-l9h>DI2fQ*X~| zgrSG~9Xk&3{+l|y=RX-fj~%(COOnmv=K7tbD*aj2^p)yebwMbQ&y@}J12g+|CdJhZ zbVaD?ZP!Jqzv-WzvA)!mx-Ok{m80dZQW<6cFxx+WRCkV0*Jvu4N^WNIxAX7k@B9yi CgYu97 diff --git a/src/core/__pycache__/exception.cpython-37.pyc b/src/core/__pycache__/exception.cpython-37.pyc deleted file mode 100644 index 32fa5b558d5b53adb0e8c16e301e485b618bb14f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2607 zcmcgu&2AJ&5bmCz-Py$kg84}xF#}2~hxY#8y{`&Aw`m{~R z-ze0>gUu>T{U@XjfZVaN z&$~}ZbSwqUv*A`d{WEL?i76+s^M-6tPPwxe#4dNaw?|^{4e?0q!+pQ#K1x(FT2o4@ z)T!>{Z=9%4pN7Sd*W@jIM<{tkUlHbT0(WUYatmKi#zGYVW5axC7%MsgRk4wN7CD8d zMYf?Z3=u6ljHOwkHDm9|zw5m_gLN&G9^B(2xT=jxj8uaMLT?#49&GGv8KKPp7uYi{ zwnZl4DTXKP#z3odkV+*6VmB3IGnDzt_@zRN&!E-#CZSzAU26PWsf|o2euaU*(a|1E zjW}{}?>RY(?m7MG@#gNG@E0A?$`$3qpDIARS_0S=ZN|U}#(n@n+ep&ssYU@jZa+sY z3|5|u1O%(g*hun8hWiD^UQCj#{9+wZ9n`y6g)J3X##r+zSkpoa@NtEXAW+utfG&9U zB!!dNz|i103OUaHF*M?V*dC^$C-YpS=4*+fFe0T_mJUuC!;%`MBQ~Da8#HwpO`V~5 zalRo(M)drAJ)cF_LU9>Qs*qituc$#;A)VAQTo!OapR5+Oh`Ski4#0REKK%r z8OEg&!oD)!NsH-s^h zL$j&mP9E-Tiag{tc|#>OCR*q)3DZ)`ioNp{6~9U3!rxA^iHNFH{tld~$$T)CZ`NV4 zG`M=WH%Df~<-_$=Aa$GrF;fyEkPf{E^0GBD$=r79klkntqd={&C z;CfiJ@$3L)(4URQ>Ogi0qJ79_@yVC&>kv=tmjJTvCQ>wTg+H7-8zINNvQFD zO^#6PigW@T3uO+JsW@bkEupOvBW0M${8?yZs721hq0yn7nDN9^yxQMjao&&8O+o{50tT3%DP>m1!)S|{B_^s^fzuT6KM<+Y>XW=7qybhB9 diff --git a/src/core/__pycache__/utils.cpython-37.pyc b/src/core/__pycache__/utils.cpython-37.pyc deleted file mode 100644 index 7dbd5be086b5faabe4792c8bfe88de723c5e3b27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4969 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 diff --git a/src/core/command/__pycache__/__init__.cpython-37.pyc b/src/core/command/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index ebbd52117eb44c237abfe39624682cc8106aa83c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179 zcmZ?b<>g`kg7YW7CU-M2FgylvV1N1KIi+h#3HJNHg33 diff --git a/src/core/command/__pycache__/console.cpython-37.pyc b/src/core/command/__pycache__/console.cpython-37.pyc deleted file mode 100644 index d2b3d46ff1b7f75a8f688d02a828fed94d5a9ebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11633 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 M;#W2Ln=0u43(*eh%>V!Z diff --git a/src/core/command/__pycache__/display.cpython-37.pyc b/src/core/command/__pycache__/display.cpython-37.pyc deleted file mode 100644 index 9a775a9b8eafe007c0b6498bdac8500377091528..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9406 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 Pjvu~;j@CqeIzRqD%%qmn diff --git a/src/core/command/__pycache__/distribute_execute.cpython-37.pyc b/src/core/command/__pycache__/distribute_execute.cpython-37.pyc deleted file mode 100644 index 1155bceb32e2d131e44115c89983447fa606469e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1781 zcmZ`(OK%)S5bmD$&aUG}jFksMAjJ`LSxA&q1SsG|AS4zf5+RKiwIfY zvnTt9*hl^Xzkn0m`^qUlfD0$8dc9s_g&B2qb#-@5)mLB5S8HoAf#=WP|ITmq2>A;a z%f|!d2@Lfe2u?UHNxGP6N@4AkPUWU9MVniCm7n@n_sXCO(~y#H2={q#N_ZgXG&*t9 z9;ZK%Bzz10$T*>9Z6sb5x%fV-vjZW)5RVF_W$}Eb1*~r6Qe;{%QMLLFlS0i(&Gw5@ zJ^PWE3PYKUWk0(8d3D^WJBkPI#C!9>Y? zk~dO-sH&{y6Ml&o6GtKk+=lHN6EOzfHDm9?R~6Qg(10FqU&(d2Jd#t~h6m@%q#waT zL&;AlB^r{SIwuH$3z|FiK=Z8@9H2Gi2ux&wamU72LO*Mb`-105&-kq@YAw;T1;m69 zIF>sNe*E@_@z)QGUuDx~xqN8)S$!aC%}Pvd4X!0rMtB<`TnOZ>9Dw)`hO!K%ku#t% z9nj;=t645WA-Tl>4x=Nih^_1&pmcOjJ7?}_0twkfF)*w^`od+BMo;uTwj_x}XThHJgUlMTO!XbK_!x0ZlXZM(-_Ibph{3V%ibzz^j-Z-@VGLYd+rHM##}+8`<`7#wOAtlcVN!4ZKEJ|A*eY zu=P0%g`GpLHSf~JIC13`Y_CKTV)r9#jG36Rs^PN|^#NlqXIZ(}k$t>`(aC!#@MBj{ zvYlp|%!iG;FcdaUL?bVX;`bz4lUVM+WTF}TX%LL`&I(aJ#2-{s4=;M%wtxE3)dMSi vxKb@6)7vYMz#Td;;H}fBc=?YY_4m zE>@of%p({Q2_uZAB&=r|(rRsl2FylkPOZ?Qgj>wKprL(07;u+_ncTTBLzmH~B(PtA z7t#x;UZ1708suUcrTK8kg*Fd(mf-H{Gl6*oL+%0L1W$vLC^IfeXfl&oFk9SaHghfs zoaitYPVfZUB?b`uaKPqTnKnr?_UbJvI`vSRDtUwf`&(i)}O?$xfE5j-1bCxlo<^vKzSCOnIigl{4)w z4YmKDM{R!f^?|mz5V_D>D33rZ8uE;bSdH>5FtjCkI?!%D!?paKh;@kjpToxw`_Cj7 zvi~`ojViLw#yd2Zm2uMsXJkp?izPHKsNgL7CQ=X22*irVB%v zV++dzOM}^0&bguNg~OcEs4-G*X)yP~`0b-}voseT^ANd`il0v3F6k5U-Z)&l&Hyg8m5z?2b}{9^73(!7Q3{Fds#8_G z_1!V=)WQx5JA+Zmp+eO0Lx5M)6M^MZIJ@`d?t6aVYa^H1!hLOx^HHWvc_#I%GM|ft zLoOMQM4qb%H3W9Bwno_?*A`%cRU+nD5-YCl6ERXeu*Dkagv}daX%9m{`_LU`5iYc& zVlm{ZDv6pPO8O397Tqwdl;4FNxe0{O7W{1(2qlhU2VuO;=p`H-u&sLY7hq}}R~TMd zfZ#Q<&};UUac(MS;WE24mzd(dS3UgL_+>Nh(DfcEe^Jbro#bxQ<)9%fS8zwP=CShcF~w zofw;RbBS!*@BrI3ty{Em^zzfvgD1+1B7E4QNc&MV&DlIfz7<8!=W$x^h*!X`xCcZx zlQfoc%GGhss)KI?gO8HH;;Wu?%!R~q@u=7In()w939Qog4v4jT3hg*bxWG5R?guA7 d8uLU|_P06K-Y0d0pCQx|a}M6AXS58@_!mHc-dq3x diff --git a/src/core/command/__pycache__/parameter.cpython-37.pyc b/src/core/command/__pycache__/parameter.cpython-37.pyc deleted file mode 100644 index f914b2dfdb99441afc0102a7739b96154997172c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2034 zcma)7OOM<{5blRxJDCKMEP=cvD*~aBk`aMDAcUfXL>mb$n}`HOvL-Ud-8=D)$M$yj zCc7igDft%>((I872Yv-N?tSIN58#p$Rqfr$E&@bbU9K)yRabXaeg5k7=^lac+pmA- zb)S&mad9*}U~a?INCXkIBvYDDiaaaXlqcNry!57i;!`52@Ltj+xKD&Hf>%TYGJMIC zNQ95bAo>HmkO8&tG-YPCYBf#EdOVg2M5{W_s#NbbO|4AYs9Nmi2ILpkRW_9`YBjlA zS6jvSo2<&f!iKQabt!Xnc{DgMw_)n*KqN`1APJLPP{Cdi2+ISW3(xU>7hn=}q1ly( z8SZ4H${ASW2x0m#@50o-0BNb96Q=rtK7#Y3D|9mU=d7g*BEkc@ph)LjM00O%z2*1F z(_3@D_2KIZ$dO|QL?@y*_Y7Zn;?x1$=0no@Et`aD?X3(o9+I84CvfZYp!L+xdmlP~ zS5Ei~UW4sx*!xF54|ZNXA#Kn_0yY8Md4JOqOFyynrlp@+`kAF`Z|L>MZ)m(e`}pxQ z85^lhDWA(S-miCKS-}NJ5f?fxs=QW8=4LqXt*?zL8hABjVQg4vQH+7%8xQW=@I|Jo zq8blE%kxqvJ#?8mpUD~bN+)tZEemaIuUjLZ^zvsipQKx5Hnv`2A7NXPdqU=JrjM>M6A}pdFJ44@P9__&cE1(RdJ>UY6 zcJgzuo_(||r{RD2UY1$_?w6%j!D3A2Owg7>QG9R6OR}H`WX|`#ZK*3Mul2By=3dJe zy!8Y*U|1G{Od_>myoE0q78ZJe;$n*czVV9$Wjj}%kgDf=hTws<49djYwEWJ-#_Y7n zOorLttSdQG6e1Z!3Sq!rz;n3U%rhg$wc1aMYOA(B^ei+ahtKL9D5~?Q9b_P_gnbXK zva(E17!3lo3R=mE*>7Z58E2g9<@&G|mR6$3)dh6yVT7(II`RPu&mP6LwErB$`VtTV zd5Kt;uRi1qbH(T?NM@H$<_H5=+AlMMn1a)RfB~kZ+W>!)NUu5$0pXgV3)bDZ-~bJf zw{1S*>Yn2~YlMz%4`79>riF}yx5nxEN4f&rINVf-MzgEfvWMu1 z0D7`f*Jls#`;9V&3XgB(@v_Ku4DedjCYF29J8@=W1B(APGyq|2im4p_Z;W_62<)k2 zfgLM_2ro9zw6rV8x!zJ2;WPtoJuS;E8`g~}0MBjzc;o#&$>%$~P`g#SJlEIYMq>#O zx{9e~tB~FR-hGN~=&{+=w@Lm7`%M6?C`~IkaGKg)noi-zQzG9_)1BR{Jp6JhFEg#- z_wcM1E_QVd_EZBT2vEleMx(HwvHCPJ5$#{?pL4R!!HNy{0G*0lD*Vsb9-`84*A%5z zSZDT<6Xfo1H|$<1AQt}hTqC-hwL$&EHej=JdTetSi))GK%kC(*upM;-q)*{t5&sL& CUMy?? diff --git a/src/core/command/__pycache__/run.cpython-37.pyc b/src/core/command/__pycache__/run.cpython-37.pyc deleted file mode 100644 index 5b5aa3305bc8f7dd73b1832ae8da01a061bfe53e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10229 zcmb7KNpl-XcCHO8K@eO;QX3=+lBgD;r8V6>Y)R9tt<{StwU(B;S{gKjERrCxDXSn+ zh=M1g*zT%b9(X@u&zg_rU$c8y!#40XYG&QC zEnW4+>=^gO?Kr;^c7oqYJIU`ZRv)oPc!pWa)JN@6hOJt*K4yt8POdEKL8?+KyKbXgcTgFKS16kQy z$IvOaQf`#ocB|EtXp~LSu6Sr4tGcCH)pLfLX3*4ZIT+n+%gS(1>P}f=3m#K4a_wog zA+QImPKfAzwd^{#%8jz3b^L+r$g9o9YISYUm;(;iLE*Woi{{>S)LP-Nz`WaTRET%c z&jj!h9@j_VXe52Mv8LIkV+mat-)lI7m@tL)y=KSJ787x9O8`!YB*RI-DUoJ41$abc z7)}Eo6ddXc)n42cx z)J7WPM>aCT+BLcs*GGM8SC>z{?8cag`Ic|48Z(-Ri^MMtU29~$oNxV=CX#;*th(ln zZ)@F{AL~s3`y^J0dsBXVTNkNKL;lK}?#+nwF2)IP*N^)~Y0}$=k+a)+H{mCGbAadZ z?8oX!KZ*VWzScYFgKEHsF#oU^q4^AD`p{?}$`ZC2tzRGGokO{Y+H%}Bzo%`S+xG8i zqdnw@=1ro0WT-xc`q82KH0ldO^%>NU4b^Fc@xbwEGi7b>hUyq56KN@xUG$ z2RvZDfb)yQtsTQnGq(>ACy3kLsf|;;cXqXIN*wH_fhn~Oo^Dv;kdL=G{Hs`ZMC7Su zGmhC`i6cYs(IGhAO`~>V$B_Tz<-`KcSKByEG|~BQ-Sn13Dr(y{u4zv$bTc%<&&+Av z5zIK|XGCG2=8uTub5x$-^5mShYAGB$#jKZuIuKSK!i${P1sGUZSj`tGY21Xy>vE=s=UaYHQ-8(F4#fXcv z6LALPNBz-o{-~Niq&sIJy;-l=JL6}e0b~AH?=1M96RGZaRqIZyY2C@KEk6g|w7OH! zpQ(*=;vCBJ+a@^p$e%*bo$fSxrnzTY^`LfMfKTH5rUA-+!}WJjzW{Dh-;d_BeOhIz*=*|M7@uW4AyEw1Xr8inGH_~YPi5kCkz@G&t zr@C|AN4<~zS$}Sh?ZQs%nE^g%y(|7KG$rOW$f}u_L{YLiy#-+qH zz@Ky}d`XGxfNypWF?<8?r(J|H-ezYw4JdC+l$;hPK}^$%`q*v~800PJ3T zItQ)nF8B*OaW}_SV6cnN{3E+&_n4Af|Csn3*b4pH7pNUa?UrAFt-nRKo@>YZwUyp& zzra#<$Un}y|Czr4eqZUH@K1;pNX1FKZ{xk_-SLkBz5{BE?kWFN?@Qtg-go^)|0GTe zGKkteYTb!HlQ^Bjm~oUO(p%}>r}oCb-~^4*1DxAeBn9jd9{w+~_(*)|eZ66mH2V95 zwwc^X$XPz+yF_v0kAUTyK9)&I&E?EUVE`@1HuaM^o8XDi)zwr=?E zfRmTIr^VO)Y3N5n{?EVJ(zT&50*eXFEVTkdoGr4p40%JwF8>Rtl?&K-T z^KeJVx1zv1Uv=}<20}jRRJ>waP;4K>Ap`B27bLyx*&@AZwl^{{1U&Gm#Ojt35GmOMV^WyD1M;Zd*?)zk2k^+Qt?ee zJjvr4m~XD;Wx28DEO(~BiT+~Yuw{9auq_ax*_Gz&-4IK+>izKF_;rrp1aN!;1aEi zhQqkdS8zG2h6B0JX*{pWW}^F8cLIvVKd&e4m+ z#@{z8|4P5ynb~9gNV=VdSk8Ce{R1|-)vnbdgAH3P%4Dk#@0}FML&@_gS$qOvFgYoiH1SR`kGSueK&6EYNxRobxHIFra~#M~BAFF`U|CrC#5o*=GF zZeTPa!<51SikEIMu}b-u7frcYlFg>4&P}&q70gguv2gfPYyG8nmDb4X|JO9wU!Q?PadJ0W%lrdM7I;$@HY z9PbvAWFknojz>+wc$j!2O4&5HG6u|&vZ%=0UA=kz+Ji5y-<6bd2{O)>QvrK8YZLJC zY(WuuuBcYLV20QiH6bAvrt*R;4PgVxsl5PZG|JNve+R~ivBa?}(X4~W_4ev&%?V~o ziXr`l;H6-}gV-HP`2{0HQM*yCfI;>_$}AN_8jAx%SZaIKnk&!I<|uC@-=%`mOzfP3 z6sr;QHwnRCRS+3E*cn$QFfhoHb0_oUZc=hnX3=QJz{&?Ldn_a_GQ2jNMp<5i=M8em zr?vXCK&289-s>dGxH4`LyXcP z!SSIJNR*$tgiDUl`00@Qm8Ni%Qt~<$SqSwk5 zXYst82IhfRmN$qw*?w554jyJfmX$atd~9ywEV5GCyqC!0&AbW@`__V(Y7dM@Xz1Q1gF%|buf$R}QjxF{IBp8p z(xJ=|Ge$@tpi@L`fWVT%H$FZ-y(C1E_X^Rgx58Z$v2vMC=0jp`0{K=-bO$5K6SGIR zqe`vXa5zA-XI^tP&F2d91ol>{mmvid3UHhJny^2jg3`mP*hh;^h8vD721K;+0Xp1Y zP)w*F&?oeqp3&p_gpoDkfHHboxAeF{rKKm)lL1VBIem)%a)9>!O;NwWGmW%i0gt5{ z_)8kIz-O6BtTMwG=5@=+7>B48II_G#(ntcP_0m|6R;1OEsM8;i<}4du!v1kqhg$Q(8FZI*IE6eP&c(ILN};tCa%>6d?kV$lrDO3e*2p|dZs zw;vlAO(mCmrBQCvObDJ!>uJp4IQRk1gENW)Z?VOF4$x;3a*E6WGE~04p~)#v?_vL( zOT+#=6I`+Alg_Sz-N!cK^xZ+;^-U4O7l*s_9if(}C%gFU=v(2pgOqQATbM2Aq1$_M zrBl2b#`PR`RvT-l5sl`_80K+jfO~7vrGN|pyVd(aj6a~sZ$TNem@niMtMe5l`jnNH zH)+5FDxOfm%;%`54MTymrw?DH)mnK?-lG1WqX=f%r}6?tE@1-LjL3gLw>_rX`ot{8 z<=@fV1?n8fhq=A|!8p!s1DSw<=V3g-=w95fonH&sF3|Z=y9P}l%~O(3vQ4(4Gfi?l zw44&AJ!fcQGN0i^00MI9;Ur0tkvTNCj{7DuQHQz~vbz>?c`?uMV3xmupplj7r&SyLJ+D z*xSgzz`P*EmX-YCYxY!j(0y$n!4`H+c7p6#T<^^D-rpK1^%+0{OaTKk;1>YiP~(ng zKrA7UzPTBf>-ca2b(S|hYa`Z+bD8jxO2t{sEmG}gowxP-I@Eys8xwnGD&dZz0H;joQ#6J6ob$#}IgbKb7kUwMAvF9@B>pA&tx5zBQ zw=N}G{8c3hFPHMk#~UyeBy7e?Cx?_mm^0zaeQ_}@>8$a20|g1kkapgtD(fUMK#rlX zIRuCfo#RUv%F4Hj1@7@G1WfF()O-m?-896zy$%$r7DpsNTX8zF4!DQ=;)3CAdIg-*_Y`jGZ{RvN#qbOPqNtm4bAsq_P`;Go{kAcDcsc=aR}k zjBs`o|5~%&6mphU-lbxj3i8(Mu+%nL5J+$(orxrphR9@s_fgvymHp&&h)RsaX;I1ssGE11r>WcmYd!m-5yFVHM3{+aHrPAa zGyN9aCX4;lj>>i&-qSghxS*s9GPx?-aEM1mZmSpp{eX-#DVPsYQ7ng42#0i0#FoPV zTVYW>Lg`kg7YW7CU-M2FgylvV1N#K-FuRNmsS$<0qG%}KQbS^61>82~xAGjad` diff --git a/src/core/config/__pycache__/config_manager.cpython-37.pyc b/src/core/config/__pycache__/config_manager.cpython-37.pyc deleted file mode 100644 index 3e98356e8247a9fee0593bd394fe5975fcbe545b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10086 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 diff --git a/src/core/config/__pycache__/parse_parts_config.cpython-37.pyc b/src/core/config/__pycache__/parse_parts_config.cpython-37.pyc deleted file mode 100644 index bf842ba202fc301c6b3b1339befac497d118bf68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2592 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 U*G^zeOn3Z5lV&J#Bhuvj7fKR8rvLx| diff --git a/src/core/driver/__pycache__/__init__.cpython-37.pyc b/src/core/driver/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index d4d5deb2970b62529461cb8889784749a503f768..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 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 D$GOh> diff --git a/src/core/driver/__pycache__/lite_driver.cpython-37.pyc b/src/core/driver/__pycache__/lite_driver.cpython-37.pyc deleted file mode 100644 index 1146cc5c39a98fab9767ef1f0379eac7533959a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15834 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 diff --git a/src/core/driver/__pycache__/parser.cpython-37.pyc b/src/core/driver/__pycache__/parser.cpython-37.pyc deleted file mode 100644 index 4757c7d1c7cb52d095c6d5dc9bbf2014a941f6c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1188 zcmZ`&&2H2%5VrHP$!4>wQho%21J@u_35gRzXv=nss-jS_Du^hO6~%6q-DI=aNfC%! z`!c)H}~=NM$DJwro`#`OA20&v?F>dD-uK1jdi=ztVR$AwO}k92N*em?{F` zgwvc9G@=w`BR2{&GC?-E#qC2gvR)D1;r0pPwlI&)$QBed4mUw#9vjCr>NFacTcEKT zjl;VW5_qRzp9EBQc~T{5o+t$iYdo(D?Tr#8-U?OcmF`XItXeL-RyiuUNb&k|P!NVN z)dK)QBFaf*a2lE1h%64z;#LID1h*a8fg{=A&)J#8Tc-^eAccXWUB>1~AsEvhV@1j9 z9A%%ek9Crt?>PJ6ZusVXsGZ6FXf&QobZ2{W=k<6C6uUcnd*iKdM6Q9s27Z4SJ&X61 zkSgBfMK;e=C6lU@@s?1ts$9eepJtU%Rg3^KMK=Y&Lk zZUA47#DdTyY}ndPkuDtgN9!Y)Y8~J!nL>%oy5$;3)F*J4hJm5GO&G|X_A|xOvRLGz z5*(AQM1F8dmAnCFv&Ts@8T`23W%)P zZK!wKEYyX(kNemrZH(82hmJR3ssX@icwyk`-bKR-B{4nP6415MMA2a^$#ce9{;_u2 aIIi)d-REtKy}+a>%%M+x!!y^M^}%0U(gn@{ diff --git a/src/core/testcase/__pycache__/__init__.cpython-37.pyc b/src/core/testcase/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 69d4d26aedd37bf8b170f9b6a6b0f8b70f41c06d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmZ?b<>g`kg7YW7CU-M2FgylvV1NTZlX-=vg$lA|9%m4taEHqjG diff --git a/src/core/testcase/__pycache__/testcase_manager.cpython-37.pyc b/src/core/testcase/__pycache__/testcase_manager.cpython-37.pyc deleted file mode 100644 index ac8fadc3eb468e88fe279d431e5ce7eead0f9d9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7243 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 diff --git a/src/core/testkit/__pycache__/kit_lite.cpython-37.pyc b/src/core/testkit/__pycache__/kit_lite.cpython-37.pyc deleted file mode 100644 index dadff8bc98d2144a0cc5670d63c0dd39c4a53953..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4605 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 diff --git a/src/main/__pycache__/__init__.cpython-37.pyc b/src/main/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 55b9c8a1ec4056e27e19672ff31d6e42ce5054c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmYLDu};G<5IrX;L8zU|7qDfi#EK9C%FF^Rk)>0x-6*QA@qOJ7o z4w{3VU}GbuB@TW_*jsw+EGqJwq2IBTwR%lHk~N`Xe%s6@2sx)cRus%ik#n8bJpWBo zjo4X>_y(b7>ksVj*Jtt}nh@ocb{rQ|=n@5aW8yZ^C^s+LWMYyTct>rXjiu29%ojYB gF(~P}!At!87FXlzba?JaKUs6JeoQrw+4W~#_aR2}S diff --git a/src/main/__pycache__/_init_global_config.cpython-37.pyc b/src/main/__pycache__/_init_global_config.cpython-37.pyc deleted file mode 100644 index 128f26e19ecb1909175b6a3c62733251a33313f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2236 zcmZuy&63#g$4?Kmr8^_5viq3?;l{?W|{PYa(g? zQub*n4m?Gc8*jpm3nyPW?E`S(M7QkSILUfSQtRul)sni^^Z9VtBk=w8=f8_=Ovpbt zx&9akpF-0gLKl;m{z5_$v)F-=#%|n!kqL4^DEW~HW=9r#-;$}n01NxM(4&V((Dbhq z)}b*;Nm-Ayqy=5EmyYe-x;LFmiob$zuOOiHV~|(gC8OkR_Uks*Drm8~U>V?^WB1av z+FonT-WzMaVs~N>EIez`Z!CNm`?p#Iare@(+(E-dFN0gT{TuGE;iAp(RxY4+)vbn! znfZyi9Ukx$;QrD+n1xIXVr!&AB;}`4whG*p1?7V}y!MuN<7aX>y>i zFxXRCy|WaCYk8~|f-ht&xRTQFO=ONh*?khJBsxfio=(8wxvrQ5U#PA8=s?#(oTxm? zL=|v;n52U9aQjdJa4OZB!!9`xDi3xklnKYLRMr#f+?7o7u-}{v>EYh>M4TCs>qO=j z?!mc)HdgL8$Ep=a*%8+Zm26DgyAs-}192woKEnP&DluEgER(tF;&trZdU}Odr|>mQ zUDZcm+E`gs05oJ`L@i?bw8v{8|fYW`U0wUL|o;prN8JjV`X4$%{- z+z7?(K|Y$p1$ub4PU16AW9(=`C+o0ZO*HmTku`*tiOYf(0~S=0UbLdcR=qs z1L{%+zaAak$gj_DH0)Z!F>nGlKs&Hfd$8^TQwcvjun*1FgcA^&nn3MHOLq2iK^~Kz zo|TSag@dp6!YN%VyH@TL9W^Oj{qXsu!0G|DsDKxH$R^~HmEPIAg$MS#bEovnp!5s+ z(k+5ZO3CvlPs#JiQ>bQGrS=tW36l)7j`PaOn0TDOaNpPO>x#~%ovNE;8>tNBc;#=_ z%VU$Il@CcC8Kc5M0`GulGCqc!4u>_hnNPc6u!$DyXeqS12foyObm%u2DA!BtyOz*% zIOOdGE6OVuahn=-hoP!=+ce(1**R$R1Uef;d-VedCxbSiBdXp5&1EfpGp? z69{6k;IbvXfGe|@Q`VT_ouwD!6mvyiQB?Dh{H7wX_YjtPI(Bo5* z-*t%@ne9Wi?y27?{J~K21IgJla(>tDXAG%93um=eula_>-)##UYF3AOx)YADs?9`x zk|>#HA~*I@!hQ=02bP16X`PtRzZQlT&Y~Q`sdO0JNPVl=L<$}))X93R7l~DJf@J?% zsEb8C3m+Vad~uXTYCTf|Q*3qv@EX7c8?sj;;rMM%weyY5zkO-Gl*f7eg;G*g{jY7> z+DSO9D_P?Q3J@0S(8bafc5hY;y_)uBwoP~{qZrBth;HzL1-1jJB9{nG` CzDo)K -- Gitee From 0a7f630958f268dad650f653c3679b99de3b158e Mon Sep 17 00:00:00 2001 From: caojiale1 Date: Sat, 25 Feb 2023 17:18:02 +0800 Subject: [PATCH 10/14] Signed-off-by:caojiale1 --- .../coverage_rc/lcovrc_cov_template | 175 ++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 localCoverage/codeCoverage/coverage_rc/lcovrc_cov_template diff --git a/localCoverage/codeCoverage/coverage_rc/lcovrc_cov_template b/localCoverage/codeCoverage/coverage_rc/lcovrc_cov_template new file mode 100644 index 0000000..0f99e76 --- /dev/null +++ b/localCoverage/codeCoverage/coverage_rc/lcovrc_cov_template @@ -0,0 +1,175 @@ +# +# Copyright (c) 2023 Huawei Device Co., Ltd. +# 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. +# +# +# /etc/lcovrc - system-wide defaults for LCOV +# +# To change settings for a single user, place a customized copy of this file +# at location ~/.lcovrc +# + +# Specify an external style sheet file (same as -css-file option of genhtml) +# genhtml_css_file = gcov.css + +# Specify coverage rate limits (in %) for classifying file entries +# HI: hi_limit <= rate <= 100 graph color: green +# MED: med_limit <= rate < hi_limit graph color: orange +# LO: 0 <= rate < med_limit graph color: red +genhtml_hi_limit = 90 +genhtml_med_limit = 75 + +# Width of line coverage field in source code view +genhtml_line_field_width = 12 + +# Width of branch coverage field in source code view +genhtml_branch_field_width = 16 + +# Width of overview image (used by --frames option of genhtml) +genhtml_overview_width = 80 + +# Resolution of overview navigation: this number specifies the maximum +# difference in lines between the position a user selected from the overview +# and the position the source code window is scrolled to (used by --frames +# option of genhtml) +genhtml_nav_resolution = 4 + +# Clicking a line in the overview image should show the source code view at +# a position a bit further up so that the requested line is not the first +# line in the window. This number specifies that offset in lines (used by +# --frames option of genhtml) +genhtml_nav_offset = 10 + +# Do not remove unused test descriptions if non-zero (same as +# --keep-descriptions option of genhtml) +genhtml_keep_descriptions = 0 + +# Do not remove prefix from directory names if non-zero (same as --no-prefix +# option of genhtml) +genhtml_no_prefix = 0 + +# Do not create source code view if non-zero (same as --no-source option of +# genhtml) +genhtml_no_source = 0 + +# Replace tabs with number of spaces in source view (same as --num-spaces +# option of genhtml) +genhtml_num_spaces = 8 + +# Highlight lines with converted-only data if non-zero (same as --highlight +# option of genhtml) +genhtml_highlight = 0 + +# Include color legend in HTML output if non-zero (same as --legend option of +# genhtml) +genhtml_legend = 0 + +# Use FILE as HTML prolog for generated pages (same as --html-prolog option of +# genhtml) +# genhtml_html_prolog = FILE + +# Use FILE as HTML epilog for generated pages (same as --html-epilog option of +# genhtml) +# genhtml_html_epilog = FILE + +# Use custom filename extension for pages (same as --html-extension option of +# genhtml) +# genhtml_html_extension = html + +# Compress all generated html files with gzip. +# genhtml_html_gzip = 1 + +# Include sorted overview pages (can be disabled by the --no-sort option of +# genhtml) +genhtml_sort = 1 + +# Include function coverage data display (can be disabled by the +# --no-func-coverage option of genhtml) +# genhtml_function_coverage = 1 + +# Include branch coverage data display (can be disabled by the +# --no-branch-coverage option of genhtml) +# genhtml_branch_coverage = 1 + +# Specify the character set of all generated HTML pages +genhtml_charset=UTF-8 + +# Allow HTML markup in test case description text if non-zero +genhtml_desc_html = 0 + +# Specify the precision for coverage rates +# genhtml_precision = 1 + +# Location of the gcov tool (same as --gcov-info option of geninfo) +# geninfo_gcov_tool = gcov + +# Adjust test names to include operating system information if non-zero +# geninfo_adjust_testname = 0 + +# Calculate checksum for each source code line if non-zero (same as --checksum +# option of geninfo if non-zero, same as --no-checksum if zero) +# geninfo_checksum = 1 + +# Specify whether to capture coverage data for external source files (can +# be overridden by the --external and --no-external options of geninfo/lcov) +# geninfo_external = 1 + +# Enable libtool compatibility mode if non-zero (same as --compat-libtool option +# of geninfo if non-zero, same as --no-compat-libtool if zero) +# geninfo_compat_libtool = 0 + +# Specify compatiblity modes (same as --compat option of geninfo). +# geninfo_compat = libtool = on, hammer=auto, split_crc=auto + +# Adjust path to source files by removing or changing path components that +# match the specified pattern (Perl regular expression format) +# geninfo_adjust_src_path = /tmp/build => /usr/src + +# Specify if geninfo should try to automatically determine the base-directory +# when collecting coverage data. +geninfo_auto_base = 1 + +# Directory containing gcov kernel files +# lcov_gcov_dir = /proc/gcov + +# Location of the insmod tool +lcov_insmod_tool = /sbin/insmod + +# Location of the modprobe tool +lcov_modprobe_tool = /sbin/modprobe + +# Location of the rmmod tool +lcov_rmmod_tool = /sbin/rmmod + +# Show full paths during list operation if non-zero (same as --list-full-path +# option of lcov) +lcov_list_full_path = 0 + +# Specify the maximum width for list output. This value is ignored when +# lcov_list_full_path is non-zero. +lcov_list_width = 80 + +# Specify the maximum percentage of file names which may be truncated when +# choosing a directory prefix in list output. This value is ignored when +# lcov_list_full_path is non-zero. +lcov_list_truncate_max = 20 + +# Specify if function coverage data should be collected and processed. +lcov_function_coverage = 1 + +# Specify if branch coverage data should be collected and processed. +lcov_branch_coverage = 1 + +# Specify the regular expression of lines to exclude from branch coveragel +# Default is 'LCOV_EXCL_BR_LINE'. +lcov_excl_br_line = LCOV_EXCL_BR_LINE \ No newline at end of file -- Gitee From b6f713d7ccddf922af90f76d438061177cb63a9e Mon Sep 17 00:00:00 2001 From: caojiale1 Date: Mon, 27 Feb 2023 11:42:57 +0800 Subject: [PATCH 11/14] Signed-off-by:caojiale1 --- .../resident_service/resources/sign.cpp | 34 ------------------- src/core/driver/drivers.py | 2 +- src/core/utils.py | 5 +++ 3 files changed, 6 insertions(+), 35 deletions(-) delete mode 100644 localCoverage/resident_service/resources/sign.cpp diff --git a/localCoverage/resident_service/resources/sign.cpp b/localCoverage/resident_service/resources/sign.cpp deleted file mode 100644 index 619b0f8..0000000 --- a/localCoverage/resident_service/resources/sign.cpp +++ /dev/null @@ -1,34 +0,0 @@ -#include -#include -#include -#include -#include - - -extern "C" void __gcov_dump(); - -using namespace std; -void sighandler(int signo) -{ - cout << "######gcov_dump_start" << endl; - __gcov_dump(); - cout << "######gcov_dump_end" << endl; -} -__attribute__ ((constructor)) -void ctor() -{ - int sigs[] = { - SIGUSR2 - }; - int i; - struct sigaction sa; - sa.sa_handler = sighandler; - sigemptyset(&sa.sa_mask); - sa.sa_flags = SA_RESTART; - for (i = 0; i < sizeof (sigs)/ sizeof (sigs[0]); ++i){ - if (sigaction(sigs[i], &sa, NULL) == -1){ - cout << "Could not set signal handler" << endl; - } - } -} - diff --git a/src/core/driver/drivers.py b/src/core/driver/drivers.py index b6378ac..3ef15ad 100644 --- a/src/core/driver/drivers.py +++ b/src/core/driver/drivers.py @@ -540,7 +540,7 @@ class CppTestDriver(IDriver): strip_num = len(coverage_outpath.strip("/").split("/")) else: root_path = (sys.framework_root_dir.split("test/testfwk/developer_test")[0]) - strip_num = root_path.strip("/").split("/") + strip_num = len(root_path.strip("/").split("/")) + 2 if "fuzztest" == self.config.testtype[0]: self._push_corpus_cov_if_exist(suite_file) command = f"cd {self.config.target_test_path}; tar zxf {filename}_corpus.tar.gz; \ diff --git a/src/core/utils.py b/src/core/utils.py index cf506a4..da73226 100755 --- a/src/core/utils.py +++ b/src/core/utils.py @@ -138,6 +138,11 @@ def parse_device_name(product_form): if not json_info: return device_name = json_info.get('product_device') + if not device_name: + if product_form.startswith("rk"): + device_name = product_form + else: + device_name = "baltimore" return device_name -- Gitee From 1792f634398b6fc2e5e5ccfca95b7cc2417cc046 Mon Sep 17 00:00:00 2001 From: caojiale1 Date: Mon, 27 Feb 2023 11:48:58 +0800 Subject: [PATCH 12/14] Signed-off-by:caojiale1 --- localCoverage/restore_comment/restore_source_code.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/localCoverage/restore_comment/restore_source_code.py b/localCoverage/restore_comment/restore_source_code.py index fcdfb32..9de8442 100644 --- a/localCoverage/restore_comment/restore_source_code.py +++ b/localCoverage/restore_comment/restore_source_code.py @@ -28,9 +28,7 @@ if __name__ == '__main__': root_path = current_path.split("/test/testfwk/developer_test")[0] subsystem_config_path = os.path.join( root_path, "test/testfwk/developer_test/localCoverage/restore_comment/part_config.json") - if not os.path.exists(subsystem_config_path): - print("part_config.json not exist.") - else: + if os.path.exists(subsystem_config_path): with open(subsystem_config_path, "r", encoding="utf-8", errors="ignore") as fp: data_dict = json.load(fp) for key, value in data_dict.items(): -- Gitee From 59ebea2631abc3e238d212e79a0465e4f5321ab5 Mon Sep 17 00:00:00 2001 From: caojiale1 Date: Mon, 27 Feb 2023 16:39:45 +0800 Subject: [PATCH 13/14] Signed-off-by:caojiale1 --- config/framework_config.xml | 1 + localCoverage/resident_service/system_part_service.json | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/config/framework_config.xml b/config/framework_config.xml index ced2d4d..98b6c3e 100644 --- a/config/framework_config.xml +++ b/config/framework_config.xml @@ -15,6 +15,7 @@ --> +