From 7db42de7fd8a82c3ccfda3b71fee19ea1000866d Mon Sep 17 00:00:00 2001 From: Frederic Marec Date: Wed, 21 Nov 2018 17:01:08 +0100 Subject: Add tests for 4a-hal-generic Add test tree Add test part in README.md Bug-AGL: SPEC-1796 Change-Id: I3d42bfe3170bfaef819bb2028887869dd603bc97 Signed-off-by: Frederic Marec --- conf.d/cmake/config.cmake | 1 + test/CMakeLists.txt | 27 +++ test/afb-test/CMakeLists.txt | 22 ++ test/afb-test/etc/CMakeLists.txt | 31 +++ test/afb-test/etc/aft-4a-hal-config.json | 92 ++++++++ test/afb-test/fixtures/CMakeLists.txt | 30 +++ test/afb-test/fixtures/alsacore.lua | 92 ++++++++ test/afb-test/fixtures/smixer.lua | 255 +++++++++++++++++++++ .../afb-test/tests/4a-hal-manager_BasicAPITest.lua | 46 ++++ test/afb-test/tests/CMakeLists.txt | 31 +++ 10 files changed, 627 insertions(+) create mode 100644 test/CMakeLists.txt create mode 100644 test/afb-test/CMakeLists.txt create mode 100644 test/afb-test/etc/CMakeLists.txt create mode 100644 test/afb-test/etc/aft-4a-hal-config.json create mode 100644 test/afb-test/fixtures/CMakeLists.txt create mode 100644 test/afb-test/fixtures/alsacore.lua create mode 100644 test/afb-test/fixtures/smixer.lua create mode 100644 test/afb-test/tests/4a-hal-manager_BasicAPITest.lua create mode 100644 test/afb-test/tests/CMakeLists.txt diff --git a/conf.d/cmake/config.cmake b/conf.d/cmake/config.cmake index e49774a..7fa414c 100644 --- a/conf.d/cmake/config.cmake +++ b/conf.d/cmake/config.cmake @@ -28,6 +28,7 @@ set(PROJECT_AUTHOR "Jonathan Aillet") set(PROJECT_AUTHOR_MAIL "jonathan.aillet@iot.bzh") set(PROJECT_LICENSE "APL2.0") set(PROJECT_LANGUAGES "C") +set(API_NAME 4a-hal-manager) # Where are stored the project configuration files # relative to the root project directory diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 0000000..afb06cf --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,27 @@ +########################################################################### +# Copyright 2015 - 2018 IoT.bzh +# +# author:Frédéric Marec +# +# 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. +########################################################################### + + +# Include any directory not starting with _ +# ----------------------------------------------------- +PROJECT_SUBDIRS_ADD(${PROJECT_SRC_DIR_PATTERN}) + +ADD_TEST(NAME AGL_SERVICE_4A_HAL_TESTS + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND afm-test ${CMAKE_BINARY_DIR}/package ${CMAKE_BINARY_DIR}/package-test +) \ No newline at end of file diff --git a/test/afb-test/CMakeLists.txt b/test/afb-test/CMakeLists.txt new file mode 100644 index 0000000..9df744e --- /dev/null +++ b/test/afb-test/CMakeLists.txt @@ -0,0 +1,22 @@ +########################################################################### +# Copyright 2018 IoT.bzh +# +# author:Frédéric Marec +# +# 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. +########################################################################### + + +# Include any directory not starting with _ +# ----------------------------------------------------- +PROJECT_SUBDIRS_ADD(${PROJECT_SRC_DIR_PATTERN}) \ No newline at end of file diff --git a/test/afb-test/etc/CMakeLists.txt b/test/afb-test/etc/CMakeLists.txt new file mode 100644 index 0000000..f001e3a --- /dev/null +++ b/test/afb-test/etc/CMakeLists.txt @@ -0,0 +1,31 @@ +########################################################################### +# Copyright 2018 IoT.bzh +# +# author:Frédéric Marec +# +# 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. +########################################################################### + +################################################## +# 4A Hal test configuration files +################################################## +PROJECT_TARGET_ADD(afb-test-config) + + file(GLOB CONF_FILES "*.json") + + add_input_files("${CONF_FILES}") + + SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES + LABELS "TEST-CONFIG" + OUTPUT_NAME ${TARGET_NAME} + ) \ No newline at end of file diff --git a/test/afb-test/etc/aft-4a-hal-config.json b/test/afb-test/etc/aft-4a-hal-config.json new file mode 100644 index 0000000..5a9c342 --- /dev/null +++ b/test/afb-test/etc/aft-4a-hal-config.json @@ -0,0 +1,92 @@ +{ + "id": "http://iot.bzh/download/public/schema/json/ctl-schema.json#", + "$schema": "http://iot.bzh/download/public/schema/json/ctl-schema.json#", + "metadata": { + "uid": "Test", + "version": "1.0", + "api": "aft-4a-hal-manager", + "info": "AFB-test binding configuration file to test 4a-hal-manager api.", + "require": [ + "4a-hal-manager","smixer","alsacore" + ] + }, + "testVerb": { + "uid": "launch_all_tests", + "info": "Launch all the tests", + "action": "lua://AFT#_launch_test", + "args": { + "trace": "4a-hal-manager", + "files": ["4a-hal-manager_BasicAPITest.lua"] + } + }, + "mapis": [{ + "uid": "alsacore", + "info": "Faked alsacore API", + "libs": "alsacore.lua", + "verbs": [ + { + "uid": "ping", + "info": "Ping Presence Check on API", + "action": "lua://alsacore#_ping" + }, + { + "uid": "infoget", + "info": "Return sound cards list", + "action": "lua://alsacore#_infoget" + }, + { + "uid": "ctlget", + "info": "Get one or many control values", + "action": "lua://alsacore#_ctlget" + }, + { + "uid": "ctlset", + "info": "Set one or many control values", + "action": "lua://alsacore#_ctlset" + }, + { + "uid": "subscribe", + "info": "Set one control or more", + "action": "lua://alsacore#_subscribe" + }, + { + "uid": "addcustomctl", + "info": "Set one control or more", + "action": "lua://alsacore#_addcustomctl" + } + ] + }, + { + "uid": "smixer", + "info": "Faked smixer API", + "libs": "smixer.lua", + "verbs": [ + { + "uid": "ping", + "info": "Ping Presence Check on API", + "action": "lua://smixer#_ping" + }, + { + "uid": "attach", + "info": "attach resources to mixer", + "action": "lua://smixer#_attach" + }, + { + "uid": "remove", + "info": "remove existing mixer streams, zones, ...", + "action": "lua://smixer#_remove" + }, + { + "uid": "info", + "info": "list existing mixer streams, zones, ...", + "action": "lua://smixer#_info" + }, + { + "uid": "bluezalsa", + "info": "set bluez alsa device", + "action": "lua://smixer#_bluezalsa" + } + ] + } + ] +} \ No newline at end of file diff --git a/test/afb-test/fixtures/CMakeLists.txt b/test/afb-test/fixtures/CMakeLists.txt new file mode 100644 index 0000000..8b33784 --- /dev/null +++ b/test/afb-test/fixtures/CMakeLists.txt @@ -0,0 +1,30 @@ +########################################################################### +# Copyright 2018 IoT.bzh +# +# author:Frédéric Marec +# +# 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. +########################################################################### + +################################################## +# Audio 4A test configuration files +################################################## +PROJECT_TARGET_ADD(data-files) + + file(GLOB DATA_FILES "*.lua" ) + add_input_files("${DATA_FILES}") + + SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES + LABELS "TEST-DATA" + OUTPUT_NAME ${TARGET_NAME} + ) diff --git a/test/afb-test/fixtures/alsacore.lua b/test/afb-test/fixtures/alsacore.lua new file mode 100644 index 0000000..1158d2c --- /dev/null +++ b/test/afb-test/fixtures/alsacore.lua @@ -0,0 +1,92 @@ +--[[ + Copyright (C) 2018 "IoT.bzh" + Author Frédéric Marec + + 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. +--]] + +local i=1 j=1 + +function _infoget (request, args, json_object) + AFB:success(request, {devid="hw:"..i, devpath = json_object.devpath}) + i=i+1 +end + +function _ctlget (request, args, json_object) + AFB:success(request, + { + id = j, + name = "DVC Out Playback Volume", + iface = "MIXER", + actif = true, + val = {6710886,6710886}, + ctl = { + type = 2, + count = 2, + min = 0, + max = 8388607, + step = 0 + }, + acl = { + read = true, + write = true, + inact = false, + volat = false, + lock = false, + tlv = { + read = false, + write = false, + command = false + } + } + } +) +end + +function _ctlset (request) + j=j+1 + AFB:success(request, { + id = j, + name = "DVC Out Playback Volume", + iface = "MIXER", + actif = true, + val = {6710886,6710886}, + ctl = { + type = 2, + count = 2, + min = 0, + max = 8388607, + step = 0 + }, + acl = { + read = true, + write = true, + inact = false, + volat = false, + lock = false, + tlv = { + read = false, + write = false, + command = false + } + } + }) +end + +function _subscribe (request) + AFB:success(request) +end + +function _addcustomctl (request, args, json_object) + AFB:success(request, {id = i; devid = json_object.devid, ctl = json_object.ctl}) +end diff --git a/test/afb-test/fixtures/smixer.lua b/test/afb-test/fixtures/smixer.lua new file mode 100644 index 0000000..cc19327 --- /dev/null +++ b/test/afb-test/fixtures/smixer.lua @@ -0,0 +1,255 @@ +--[[ + Copyright (C) 2018 "IoT.bzh" + Author Frédéric Marec + + 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. +--]] + +--function _ping(request) +-- AFB:success(request, {1}) +--end + +function _attach (request) + AFB:success(request, { + metadata = { + uid = "/dev/snd/by-path/pci-0000=00=1b.0", + version = "0.9", + api = "4a-hal-intel", + require = { "alsacore", "smixer" }, + info = "4a hal for Intel device", + author = "Jonathan Aillet", + date = "2018-06-13" + }, + resources = { + { + uid = "hal-bt", + info = "Bluetooth hal plugin to get A2DP bluetooth device as an input by tweaking softmixer configuration", + params = { + channels = 2, + zone = "front-seats" + }, + libs = {"hal-bt.ctlso"} + } + }, + controls = { + { + uid = "ping", + info = "Ping hal", + action = "api=//4a-hal-manager#ping" + } + }, + halmap = { + { + uid = "agl-master-playback-volume", + alsa = { + name = "Master Playback Volume", + value = 100 + } + }, + { + uid = "agl-pcm-playback-volume", + alsa = { + name = "PCM Playback Volume", + value = 100 + } + }, + { + uid = "agl-master-playback-switch", + alsa = { + name = "Master Playback Switch", + value = 1 + } + }, + { + uid = "agl-capture-volume", + alsa = { + name = "Capture Volume" + } + } + }, + halmixer = { + uid = "intel", + mixerapi = "smixer", + prefix = "intel-generic", + ramps = { + { + uid = "ramp-very-fast", + delay = 50, + up = 6, + down = 10 + }, + { + uid = "ramp-fast", + delay = 50, + up = 2, + down = 10 + }, + { + uid = "ramp-normal", + delay = 50, + up = 2, + down = 4 + }, + { + uid = "ramp-slow", + delay = 50, + up = 2, + down = 2 + }, + { + uid = "ramp-very-slow", + delay = 100, + up = 1, + down = 1 + } + }, + playbacks = { + uid = "INTEL", + path = "/dev/snd/by-path/pci-0000=00=1b.0", + params = { + rate = 48000 + }, + sink = { + controls = { + volume = { + name = "Master Playback Volume", + value = 80 + }, + mute = { + name = "Master Playback Switch" + } + }, + channels = { + { + uid = "front-right", + port = 0 + }, + { + uid = "front-left", + port = 1 + } + } + } + }, + captures = { + uid = "INTEL", + path = "/dev/snd/by-path/pci-0000=00=1b.0", + params = { + rate = 48000 + }, + source = { + controls = { + volume = { + name = "Capture Volume" + }, + mute = { + name = "Capture Switch" + } + }, + channels = { + { + uid = "mic-right", + port = 0 + }, + { + uid = "mic-left", + port = 1 + } + } + } + }, + zones = { + { + uid = "full-stereo", + sink = { + { + target = "front-right", + channel = 0 + }, + { + target = "front-left", + channel = 1 + } + } + }, + { + uid = "front-seats", + sink = { + { + target = "front-right", + channel = 0 + }, + { + target = "front-left", + channel = 1 + } + } + } + }, + streams = { + { + uid = "multimedia", + verb = "multimedia", + zone = "full-stereo", + volume = 60, + mute = false, + params = { + rate = 48000 + } + }, + { + uid = "navigation", + verb = "navigation", + zone = "front-seats", + volume = 70, + mute = false, + params = { + rate = 48000 + } + }, + { + uid = "emergency", + verb = "emergency", + zone = "front-seats", + volume = 60, + mute = false, + params = { + rate = 48000 + } + }, + { + uid = "radio_stream", + verb = "radio_stream", + zone = "full-stereo", + volume = 70, + mute = true, + params = { + rate = 48000 + } + } + } + } + }) + end + + function _remove (request) + AFB:success(request, {2}) + end + + function _info (request) + AFB:success(request, {2}) + end + + function _bluezalsa_dev (request) + AFB:success(request, {2}) + end \ No newline at end of file diff --git a/test/afb-test/tests/4a-hal-manager_BasicAPITest.lua b/test/afb-test/tests/4a-hal-manager_BasicAPITest.lua new file mode 100644 index 0000000..e4468c5 --- /dev/null +++ b/test/afb-test/tests/4a-hal-manager_BasicAPITest.lua @@ -0,0 +1,46 @@ +--[[ + Copyright (C) 2018 "IoT.bzh" + Author Frédéric Marec + + 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. + + + NOTE: strict mode: every global variables should be prefixed by '_' +--]] + +local testPrefix ="4a-hal-manager_BasicAPITest_" + +-- This tests the ping verb of the audio ping +_AFT.testVerbStatusSuccess(testPrefix.."ping","4a-hal-manager","ping", {}, nil, nil) + +-- This tests the loaded verb of the audio loaded +_AFT.testVerbStatusSuccess(testPrefix.."loaded","4a-hal-manager","loaded", {verbose = true}, nil, nil) + +-- This tests the load verb of the audio load +_AFT.testVerbStatusSuccess(testPrefix.."load","4a-hal-manager","load", +{ + metadata = { + uid = "/dev/snd/by-path/pci-0000:00:1b.0", + version = 0.9 , + api = "4a-hal-intel", + require = {"alsacore", "smixer"}, + info = "4a hal for Intel device", + author = "Jonathan Aillet", + date = "2018-06-13" + } +}, +nil, nil) + +-- This tests the unload verb of the audio unload +_AFT.testVerbStatusSuccess(testPrefix.."unload","4a-hal-manager","unload", +{api = "4a-hal-intel"}, nil, nil) diff --git a/test/afb-test/tests/CMakeLists.txt b/test/afb-test/tests/CMakeLists.txt new file mode 100644 index 0000000..3884412 --- /dev/null +++ b/test/afb-test/tests/CMakeLists.txt @@ -0,0 +1,31 @@ +########################################################################### +# Copyright 2018 IoT.bzh +# +# author:Frédéric Marec +# +# 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. +########################################################################### + + +################################################## +# 4A Hal Lua Scripts +################################################## +PROJECT_TARGET_ADD(test-files) + + file(GLOB LUA_FILES "*.lua" "*.sh") + add_input_files("${LUA_FILES}") + + SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES + LABELS "TEST-DATA" + OUTPUT_NAME ${TARGET_NAME} + ) \ No newline at end of file -- cgit 1.2.3-korg