1- [HDF Audio系统测试用例使用指南](#hdf-audio系统测试用例使用指南) 2 - [1. 简介](#1-简介) 3 - [1.1 目录结构](#11-目录结构) 4 - [1.2 特殊用例说明](#12-特殊用例说明) 5 - [1.2.1 硬件耦合相关测试用例](#121-硬件耦合相关测试用例) 6 - [1.2.1.1 UHDF层非通用(硬件耦合)测试用例](#1211-uhdf层非通用硬件耦合测试用例) 7 - [1.2.1.2 LIB层非通用(硬件耦合)测试用例](#1212-lib层非通用硬件耦合测试用例) 8 - [1.2.2 ALSA模式测试用例](#122-alsa模式测试用例) 9 - [1.2.3 录音阈值上报测试用例](#123-录音阈值上报测试用例) 10 - [2. 适用版本](#2-适用版本) 11 - [3. 适用平台(已适配的SOC)](#3-适用平台已适配的soc) 12 - [4. 使用方法](#4-使用方法) 13 - [4.1 用例编译](#41-用例编译) 14 - [4.2 测试套及资源文件推送](#42-测试套及资源文件推送) 15 - [4.3 测试用例执行(手动执行)](#43-测试用例执行手动执行) 16 17## HDF Audio系统测试用例使用指南 18### 1. 简介 19 20本使用指南主要说明音频驱动模型对外接口测试用例,并根据测试内容划分不同目录。包含以下内容: 21 22- ADM对外接口测试用例 23- UHDF层接口测试用例 24- LIB层接口测试用例 25- 功能测试用例 26 27#### 1.1 目录结构 28 29 30测试用例路径:drivers/peripheral/audio/test/systemtest 31 32目录结构如下: 33 34```bash 35|-- common #测试用例公共函数 36| |-- adm_common #ADM层测试用例公共函数 37| |-- hdi_common #UHDF层测试用例公共函数 38| |-- hdi_service_common #IDL UHDF层测试用例公共函数 39| |-- lib_common #LIB层测试用例公共函数 40|-- audio_adapter #声卡测试用例 41| |-- audio_usb #USB声卡测试用例 42|-- audio_function #功能测试用例 43| |-- audio_loadadapter_report #加载声卡成功上报测试用例 44| |-- audio_multi_mic_spk #多mic、多speaker测试用例 45| |-- audio_pathroute #通路选择测试用例 46| |-- audio_server #hdi接口功能测试用例(播放、录音) 47| |-- audio_smartpa #外置声卡测试用例 48| |-- audio_threshold_report #阈值上报测试用例 49|-- adm #ADM层接口测试用例 50| |-- audio_adm_interface #adm对外接口测试用例 51|-- hdi #UHDF层接口测试用例 52| |-- common #hdi接口通用测试用例 53| | |-- adapter 54| | |-- capture 55| | |-- manager 56| | |-- render 57| |-- hardwaredependence #hdi接口非通用测试用例(硬件耦合) 58| | |-- capture 59| | |-- render 60| |-- hdiperformace #hdi接口时延测试用例 61| |-- hdireliability #hdi接口可靠性测试用例 62|-- hdi_service #UHDF层idl化接口测试用例 63| |-- common #idl化hdi接口通用测试用例 64| | |-- adapter 65| | |-- capture 66| | |-- manager 67| | |-- render 68| |-- hardwaredependence #idl化hdi接口非通用测试用例(硬件耦合) 69| | |-- capture 70| | |-- render 71| |-- hdiperformace #idl化hdi接口时延测试用例 72|-- supportlibs #LIB层接口测试用例(包含adm lib和alsa lib接口测试用例) 73 |-- common #lib接口通用测试用例 74 | |-- capture 75 | |-- render 76 |-- hardwaredependence #lib接口非通用测试用例(硬件耦合) 77 |-- capture 78 |-- render 79``` 80 81#### 1.2 特殊用例说明 82##### 1.2.1 硬件耦合相关测试用例 83由于音频驱动模型对外接口的部分接口参数与硬件能力有耦合,此类用例与硬件耦合,导致无法作为通用用例。在移植过程中及门禁用例提取过程中,需要特别关注。 84 85###### 1.2.1.1 UHDF层非通用(硬件耦合)测试用例 86UHDF层存在硬件耦合接口,如:SetSampleAttributes、SetChannelMode等。 871. SetSampleAttributes接口测试用例中设置参数时会设置不同的“位宽、采样率、声道数”等与硬件相关的参数。 882. SetChannelMode 接口测试用例中设置声道模式时会设置不同的模式,声道模式的支持与硬件相关。 89 90硬件不支持,接口会返回失败;硬件支持,接口返回成功。因此不同的开发板会出现不同的结果,在移植测试用例的过程中需要根据硬件的情况进行适配。 91 92<table width="100%" border="0"> 93<caption>非通用测试用例接口列表</caption> 94 <tr> 95 <th width="20%" align="center">所属类</th> 96 <th align="center" width="30%">接口名</th> 97 <th width="50%" align="center">说明</th> 98 </tr> 99 <tr> 100 <td width="20%" rowspan ="7">capture</td> 101 <td width="30%">SetSampleAttributes</td> 102 <td width="50%">遍历设置不同的硬件参数</td> 103 </tr> 104 <tr> 105 <td>GetSampleAttributes</td> 106 <td>获取设置的硬件参数</td> 107 </tr> 108 <tr> 109 <td>GetFrameSize</td> 110 <td>与SetSampleAttributes组合测试</td> 111 </tr> 112 <tr> 113 <td>GetFrameCount</td> 114 <td>与SetSampleAttributes组合测试</td> 115 </tr> 116 <tr> 117 <td>GetMmapPosition</td> 118 <td>与SetSampleAttributes组合测试</td> 119 </tr> 120 <tr> 121 <td>GetCurrentChannelId</td> 122 <td>与SetSampleAttributes组合测试</td> 123 </tr> 124 <tr> 125 <td>GetCapturePosition</td> 126 <td>与SetSampleAttributes组合测试</td> 127 </tr> 128 <tr> 129 <td width="20%" rowspan ="9">render</td> 130 <td width="30%">SetSampleAttributes</td> 131 <td width="50%">遍历设置不同的硬件参数</td> 132 </tr> 133 <tr> 134 <td>GetSampleAttributes</td> 135 <td>获取设置的硬件参数</td> 136 </tr> 137 <tr> 138 <td>SetChannelMode</td> 139 <td>遍历设置不同的声道模式</td> 140 </tr> 141 <tr> 142 <td>GetChannelMode</td> 143 <td>获取设置的声道模式</td> 144 </tr> 145 <tr> 146 <td>GetFrameSize</td> 147 <td>与SetSampleAttributes组合测试</td> 148 </tr> 149 <tr> 150 <td>GetFrameCount</td> 151 <td>与SetSampleAttributes组合测试</td> 152 </tr> 153 <tr> 154 <td>GetMmapPosition</td> 155 <td>与SetSampleAttributes组合测试</td> 156 </tr> 157 <tr> 158 <td>GetCurrentChannelId</td> 159 <td>与SetSampleAttributes组合测试</td> 160 </tr> 161 <tr> 162 <td>GetRenderPosition</td> 163 <td>与SetSampleAttributes组合测试</td> 164 </tr> 165<table> 166 167###### 1.2.1.2 LIB层非通用(硬件耦合)测试用例 168LIB层存在硬件耦合接口:为音量,增益,场景切换相关接口。 1691. 调用lib接口获取硬件的音量范围、增益范围,并校验。 1702. 调用lib接口设置不同的音量或增益,超出范围便会失败。 1713. 调用lib接口设置不同的通路进行场景切换。 172 173以上接口调用返回结果均与硬件相关,不同硬件默认的范围、通路不同,测试用例需根据硬件适配。 174<table width="100%" border="0"> 175<caption>非通用测试用例接口列表</caption> 176 <tr> 177 <th width="20%" align="center">所属类</th> 178 <th align="center" width="50%">命令码</th> 179 <th width="30%" align="center">说明</th> 180 </tr> 181 <tr> 182 <td width="20%" rowspan ="7">capture</td> 183 <td width="50%"> AUDIODRV_CTL_IOCTL_GAINTHRESHOLD_CAPTURE</td> 184 <td width="30%">获取增益阈值</td> 185 </tr> 186 <tr> 187 <td>AUDIODRV_CTL_IOCTL_GAIN_WRITE_CAPTURE</td> 188 <td>设置增益</td> 189 </tr> 190 <tr> 191 <td>AUDIODRV_CTL_IOCTL_GAIN_READ_CAPTURE</td> 192 <td>获取增益</td> 193 </tr> 194 <tr> 195 <td>AUDIODRV_CTL_IOCTL_SCENESELECT_CAPTURE</td> 196 <td>场景切换</td> 197 </tr> 198 <tr> 199 <td>AUDIODRV_CTL_IOCTL_VOL_THRESHOLD_CAPTURE</td> 200 <td>获取音量阈值</td> 201 </tr> 202 <tr> 203 <td>AUDIODRV_CTL_IOCTL_ELEM_WRITE_CAPTURE</td> 204 <td>设置音量</td> 205 </tr> 206 <tr> 207 <td>AUDIODRV_CTL_IOCTL_ELEM_READ_CAPTURE</td> 208 <td>获取音量</td> 209 </tr> 210 <tr> 211 <td width="20%" rowspan ="7">render</td> 212 <td width="50%">AUDIODRV_CTL_IOCTL_GAINTHRESHOLD</td> 213 <td width="30%">获取增益阈值</td> 214 </tr> 215 <tr> 216 <td>AUDIODRV_CTL_IOCTL_GAIN_WRITE</td> 217 <td>设置增益</td> 218 </tr> 219 <tr> 220 <td>AUDIODRV_CTL_IOCTL_GAIN_WRITE</td> 221 <td>获取增益</td> 222 </tr> 223 <tr> 224 <td>AUDIODRV_CTL_IOCTL_SCENESELECT</td> 225 <td>场景切换</td> 226 </tr> 227 <tr> 228 <td>AUDIODRV_CTL_IOCTL_VOL_THRESHOLD</td> 229 <td>获取音量阈值</td> 230 </tr> 231 <tr> 232 <td>AUDIODRV_CTL_IOCTL_ELEM_WRITE</td> 233 <td>设置音量</td> 234 </tr> 235 <tr> 236 <td>AUDIODRV_CTL_IOCTL_ELEM_READ</td> 237 <td>获取音量</td> 238 </tr> 239<table> 240 241##### 1.2.2 ALSA模式测试用例 242音频驱动模型为支持南向生态厂商快速接入鸿蒙、支持快速产品化而提供的“ALSA兼容方案”,采用插件化的适配器模式通过alsa-lib对接ALSA。当采用“ALSA兼容方案”时,需编译ALSA模式测试用例。测试用例分为两部分: 243 2441. LIB层接口测试用例 245</br>ALSA模式LIB层测试用例为alsa-lib接口测试用例,存放在supportlis/common目录下,与adm_interface_lib测试用例同一目录下的不同测试套文件,在编译文件内配置选择编译目标。 246 ````bash 247 ohos_systemtest("hdf_audio_lib_capture_test") { 248 module_out_path = module_output_path 249 sources = [ 250 "../../../common/hdi_common/src/audio_hdi_common.cpp", 251 "../../../common/lib_common/src/audio_lib_common.cpp", 252 ] 253 #drivers_peripheral_audio_feature_alsa_lib 254 if(defined(drivers_peripheral_audio_feature_alsa_lib) && drivers_peripheral_audio_feature_alsa_lib == true) { 255 sources += ["src/audio_alsa_libcapture_test.cpp"] 256 }else { 257 sources += ["src/audio_libcapture_test.cpp"] 258 } 259 ```` 2602. UHDF层接口测试用例 261</br>ALSA模式UHDF层测试用例与ADM模式共用一套测试用例,ALSA模式部分hdi接口未适配,在测试代码中使用宏区分。 262<table width="100%" border="0"> 263<caption>ALSA未适配hdi接口列表</caption> 264 <thead> 265 <tr> 266 <th width="20%" align="center">所属类</th> 267 <th width="40%" align="center">接口</th> 268 <th width="40%" align="center">说明</th> 269 </tr> 270 </thead> 271 <tbody> 272 <tr> 273 <td width="20%" rowspan ="6">capture</td> 274 <td width="40%">Flush</td> 275 <td width="40%">刷新</td> 276 </tr> 277 <tr> 278 <td>CheckSceneCapability</td> 279 <td>查询场景支持能力</td> 280 </tr> 281 <tr> 282 <td>SelectScene</td> 283 <td>选择场景</td> 284 </tr> 285 <tr> 286 <td>GetGainThreshold</td> 287 <td>获取增益阈值</td> 288 </tr> 289 <tr> 290 <td>GetGain</td> 291 <td>获取增益</td> 292 </tr> 293 <tr> 294 <td>SetGain</td> 295 <td>设置增益</td> 296 </tr> 297 <tr> 298 <td width="20%" rowspan ="8">render</td> 299 <td width="40%">SetRenderSpeed</td> 300 <td width="40%">设置播放速度</td> 301 </tr> 302 <tr> 303 <td>GetRenderSpeed</td> 304 <td>获取播放速度</td> 305 </tr> 306 <tr> 307 <td>SetChannelMode</td> 308 <td>设置声道模式</td> 309 </tr> 310 <tr> 311 <td>GetChannelMode</td> 312 <td>获取声道模式</td> 313 </tr> 314 <tr> 315 <td>Flush</td> 316 <td>刷新</td> 317 </tr> 318 <tr> 319 <td>GetGainThreshold</td> 320 <td>获取增益阈值</td> 321 </tr> 322 <tr> 323 <td>GetGain</td> 324 <td>获取增益</td> 325 </tr> 326 <tr> 327 <td>SetGain</td> 328 <td>设置增益</td> 329 </tr> 330 </tbody> 331<table> 332 333 ````bash 334 #gn内添加编译宏ALSA_LIB_MODE用于区分测试用例 335 if(defined(drivers_peripheral_audio_feature_alsa_lib) && drivers_peripheral_audio_feature_alsa_lib == true) { 336 defines += [ "ALSA_LIB_MODE" ] 337 } 338 #测试用例代码内使用示例 339 ret = render->attr.SetSampleAttributes(render, &attrs2); 340#ifdef ALSA_LIB_MODE 341 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret); 342#else 343 EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret); 344#endif 345 ```` 346<b>注:编译ALSA测试用例是需要设置ALSA编译选项,由drivers_peripheral_audio_feature_alsa_lib编译选项控制,当"drivers_peripheral_audio_feature_alsa_lib = true"表示编译ALSA模式测试用例,编译配置文件路径为./drivers/peripheral/audio/audio.gni文件内。</b> 347##### 1.2.3 录音阈值上报测试用例 348 349 码云上音频驱动模型默认不编译录音阈值上报功能代码,因此该功能对应的测试套(hdf_audio_threshold_report_test)默认不编译,如需编译需要手动修改gn文件,去掉“#”字符注释。gn文件路径为./audio_function/BUILD.gn 350```bash 351group("function") { 352 if (!defined(ohos_lite)) { 353 testonly = true 354 } 355 deps = [ "audio_server:hdf_audio_hdi_server_function_test" ] 356 if (defined(ohos_lite)) { 357 deps += [ 358 "audio_pathroute:hdf_audio_hdi_path_route_test", 359 "audio_smartpa:hdf_audio_smartpa_test", 360 ] 361 } else { 362 #deps += [ "audio_threshold_report:hdf_audio_threshold_report_test" ] #录音阈值上报测试套 363 .... 364``` 365### 2. 适用版本 366当前测试用例适用码云mater主仓音频驱动模型版本。 367 368### 3. 适用平台(已适配的SOC) 369 目前已适配开发板如下: 3701. rk3568 3712. Hi3516DV300 372 373### 4. 使用方法 374#### 4.1 用例编译 375注:以下目录均以Openharmony代码根目录为根目录 376 3771. 测试用例模式修改 378</br>音频驱动模型UHDF层支持binder模式和passthrough模式,因此针对不同的模式需要编译对应的测试用例,测试用的模式通过修改编译选项控制,编译配置文件路径为<b>“/drivers/peripheral/audio/audio.gni”</b>。编译选项为<b>“true”</b>表示编译;为<b>“false”</b>表示不编译,两种模式测试用例一次只能编译其中一种。 379 380<table width="100%" border="0"> 381<caption></caption> 382 <tr> 383 <th width="25%" align="center">编译选项</th> 384 <th width="25%" align="center">含义</th> 385 <th width="25%" align="center">值</th> 386 <th width="25%" align="center">备注</th> 387 </tr> 388 <tr> 389 <td width="25%">enable_audio_adm_so</td> 390 <td width="25%">passthrough模式</td> 391 <td width="25%">true/false</td> 392 <td width="25%">默认不编译(false)</td> 393 </tr> 394 <tr> 395 <td>enable_audio_adm_service</td> 396 <td>binder模式</td> 397 <td>true/false</td> 398 <td>默认编译(true)</td> 399 </tr> 400</table> 401 4022. 测试用例编译命令 403在根目录下输入命令: 404 ```bash 405 ./build.sh --product-name XXX --build-target drivers/peripheral/audio/test/systemtest 406 ``` 407“XXX”为产品名,如编译rk3568开发板测试用例,输入如下命令: 408```bash 409./build.sh --product-name rk3568 --build-target drivers/peripheral/audio/test/systemtest 410``` 4113. 测试用例输出目录 412 413以rk3568为例,输出目录为: 414```bash 415./out/rk3568/tests/systemtest/drivers_peripheral_audio/audio 416``` 417#### 4.2 测试套及资源文件推送(手动执行) 4181. 测试用例执行依赖文件推送 419 420Render相关测试用例执行需要推送audiorendertest.wav和lowlatencyrendertest.wav两个音频文件,音频文件路径为drivers/peripheral/audio/test/resource/。推动至开发板”/data/test”目录下,具体哪些用例需要推送音频文件可查看drivers/peripheral/audio/test/resource/ohos_test.xml,在cmd窗口输入命令: 421```bash 422hdc shll mkdir /data/test 423hdc file send XXX[本地路径]/audiorendertest.wav /data/test 424hdc file send XXX[本地路径]/lowlatencyrendertest.wav /data/test 425``` 426 4272. 测试用例推送 428 429测试用例使用hdc推送至开发板,在cmd窗口输入命令: 430```bash 431hdc file send XXX[本地路径]/hdf_audio_hdi_manager_test /data/test 432``` 433 434#### 4.3 测试用例执行(手动执行) 435 4361. 进入单板 437通过hdc进入开发板,在cmd窗口输入命令 438 ```bash 439 hdc shell 440 ``` 441 4422. 修改测试用例权限及执行 443进入/data/test目录,输入命令 444```bash 445cd /data/test #进入data目录 446chmod +x “测试套名称" #更改测试套权限 447./测试套 #执行测试套 448``` 449测试用例执行示例 450````bash 451# chmod +x hdf_audio_hdi_manager_test 452# ./hdf_audio_hdi_manager_test 453Running main() from gmock_main.cc 454[==========] Running 4 tests from 1 test case. 455[----------] Global test environment set-up. 456[----------] 4 tests from AudioHdiManagerTest 457[ RUN ] AudioHdiManagerTest.SUB_Audio_HDI_ReleaseAudioManagerObject_0001 458[ OK ] AudioHdiManagerTest.SUB_Audio_HDI_ReleaseAudioManagerObject_0001 (1 ms) 459[ RUN ] AudioHdiManagerTest.SUB_Audio_HDI_ReleaseAudioManagerObject_0002 460[ OK ] AudioHdiManagerTest.SUB_Audio_HDI_ReleaseAudioManagerObject_0002 (0 ms) 461[ RUN ] AudioHdiManagerTest.SUB_Audio_HDI_ReleaseAudioManagerObject_0003 462[ OK ] AudioHdiManagerTest.SUB_Audio_HDI_ReleaseAudioManagerObject_0003 (0 ms) 463[ RUN ] AudioHdiManagerTest.SUB_Audio_HDI_ReleaseAudioManagerObject_0004 464[ OK ] AudioHdiManagerTest.SUB_Audio_HDI_ReleaseAudioManagerObject_0004 (1 ms) 465[----------] 4 tests from AudioHdiManagerTest (2 ms total) 466 467[----------] Global test environment tear-down 468Gtest xml output finished 469[==========] 4 tests from 1 test case ran. (4 ms total) 470[ PASSED ] 4 tests. 471````