From 5613b018e2e1b4f7273128220b42d9371e3f73a7 Mon Sep 17 00:00:00 2001 From: Seungbae Shin Date: Wed, 21 Jul 2021 22:07:26 +0900 Subject: [PATCH] Apply mock object for device parser [Version] 0.0.12 [Issue Type] Refactoring Change-Id: Ie9a82097a5b887dc0dbfda63e7e994dab115eb69 --- packaging/hal-api-audio.spec | 2 +- testcase/CMakeLists.txt | 2 +- testcase/audio_haltests.cpp | 114 ++++++++++++++++++----------------- testcase/parser.cpp | 21 ++++--- testcase/parser.hh | 32 ++++++++-- 5 files changed, 104 insertions(+), 67 deletions(-) diff --git a/packaging/hal-api-audio.spec b/packaging/hal-api-audio.spec index d049089..6335462 100644 --- a/packaging/hal-api-audio.spec +++ b/packaging/hal-api-audio.spec @@ -1,6 +1,6 @@ Name: hal-api-audio Summary: TIZEN Audio HAL -Version: 0.0.11 +Version: 0.0.12 Release: 0 Group: System/Libraries License: Apache-2.0 diff --git a/testcase/CMakeLists.txt b/testcase/CMakeLists.txt index 0190103..f5eabd4 100644 --- a/testcase/CMakeLists.txt +++ b/testcase/CMakeLists.txt @@ -6,7 +6,7 @@ FOREACH(flag ${${target}_CFLAGS}) SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}") ENDFOREACH() -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS} -fPIC -Wall -Werror -std=c++14 -pie") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS} -fPIC -Wall -Werror -std=c++17 -pie") AUX_SOURCE_DIRECTORY(. sources) ADD_EXECUTABLE(${target} ${sources}) diff --git a/testcase/audio_haltests.cpp b/testcase/audio_haltests.cpp index c7f5450..0392a60 100644 --- a/testcase/audio_haltests.cpp +++ b/testcase/audio_haltests.cpp @@ -860,20 +860,24 @@ TEST_F(AudioHalTest, PcmGetFdP) { pcm_handle pcm_h = nullptr; - string card, dev; - int rate = default_rate, channels = default_channels; + MockDeviceMapParser parser; + EXPECT_CALL(parser, get_playback()) + .Times(1) + .WillOnce(testing::Return(make_tuple("0", "0", AudioHalTest::default_rate, AudioHalTest::default_channels))); - CDeviceMapParser().get_playback(card, dev, rate, channels); + auto [ card, device, rate, channels ] = parser.get_playback(); m_spec = { - AUDIO_SAMPLE_S16LE, static_cast(rate), static_cast(channels) + AUDIO_SAMPLE_S16LE, + static_cast(rate), + static_cast(channels) }; SetRouteToSpeaker(); - int32_t ret = hal_audio_pcm_open(m_h, card.c_str(), dev.c_str(), - AUDIO_DIRECTION_OUT, &m_spec, - GetDefaultFrames(), default_periods, &pcm_h); + int32_t ret = hal_audio_pcm_open(m_h, card.c_str(), device.c_str(), + AUDIO_DIRECTION_OUT, &m_spec, + GetDefaultFrames(), default_periods, &pcm_h); ASSERT_EQ(ret, AUDIO_RET_OK); int pcm_fd = -1; @@ -907,20 +911,20 @@ TEST_F(AudioHalTest, PcmGetFdN) // check for fd pcm_handle pcm_h = nullptr; - string card, dev; - int rate = default_rate, channels = default_channels; - CDeviceMapParser().get_playback(card, dev, rate, channels); + auto [ card, device, rate, channels ] = CDeviceMapParser().get_playback(); m_spec = { - AUDIO_SAMPLE_S16LE, static_cast(rate), static_cast(channels) + AUDIO_SAMPLE_S16LE, + static_cast(rate), + static_cast(channels) }; SetRouteToSpeaker(); - ret = hal_audio_pcm_open(m_h, card.c_str(), dev.c_str(), - AUDIO_DIRECTION_OUT, &m_spec, - GetDefaultFrames(), default_periods, &pcm_h); + ret = hal_audio_pcm_open(m_h, card.c_str(), device.c_str(), + AUDIO_DIRECTION_OUT, &m_spec, + GetDefaultFrames(), default_periods, &pcm_h); ASSERT_EQ(ret, AUDIO_RET_OK); ret = hal_audio_pcm_get_fd(m_h, pcm_h, nullptr); @@ -946,25 +950,26 @@ TEST_F(AudioHalTest, PcmGetFdN) TEST_F(AudioHalTest, PcmOpenWriteCloseP) { pcm_handle pcm_h = nullptr; - string card, dev; - int rate = default_rate, channels = default_channels; - CDeviceMapParser().get_playback(card, dev, rate, channels); + auto [ card, device, rate, channels ] = CDeviceMapParser().get_playback(); - if (card.empty() || dev.empty()) { - cerr << "skip due to no playback device [card: " << card << " / device: " << dev << "]" << endl; - return; // FIXME : update with GTEST_SKIP() once supported + if (card.empty() || device.empty()) { + cerr << "skip due to no capture card or device" << endl; + return; // FIXME : replace with GTEST_SKIP() once supported } m_spec = { - AUDIO_SAMPLE_S16LE, static_cast(rate), static_cast(channels) + AUDIO_SAMPLE_S16LE, + static_cast(rate), + static_cast(channels) }; SetRouteToSpeaker(); - int32_t ret = hal_audio_pcm_open(m_h, card.c_str(), dev.c_str(), - AUDIO_DIRECTION_OUT, &m_spec, - GetDefaultFrames(), default_periods, &pcm_h); + int32_t ret = hal_audio_pcm_open(m_h, card.c_str(), device.c_str(), + AUDIO_DIRECTION_OUT, &m_spec, + GetDefaultFrames(), default_periods, &pcm_h); + ASSERT_EQ(ret, AUDIO_RET_OK); ret = hal_audio_pcm_start(m_h, pcm_h); @@ -996,25 +1001,25 @@ TEST_F(AudioHalTest, PcmOpenWriteCloseP) TEST_F(AudioHalTest, PcmOpenReadCloseP) { pcm_handle pcm_h = nullptr; - string card, dev; - int rate = default_rate, channels = default_channels; - CDeviceMapParser().get_capture(card, dev, rate, channels); + auto [ card, device, rate, channels ] = CDeviceMapParser().get_capture(); - if (card.empty() || dev.empty()) { - cerr << "skip due to no capture device [card: " << card << " / device: " << dev << "]" << endl; + if (card.empty() || device.empty()) { + cerr << "skip due to no capture card or device" << endl; return; // FIXME : replace with GTEST_SKIP() once supported } m_spec = { - AUDIO_SAMPLE_S16LE, static_cast(rate), static_cast(channels) + AUDIO_SAMPLE_S16LE, + static_cast(rate), + static_cast(channels) }; SetRouteToMicrophone(); - int32_t ret = hal_audio_pcm_open(m_h, card.c_str(), dev.c_str(), - AUDIO_DIRECTION_IN, &m_spec, - GetDefaultFrames(), default_periods, &pcm_h); + int32_t ret = hal_audio_pcm_open(m_h, card.c_str(), device.c_str(), + AUDIO_DIRECTION_IN, &m_spec, + GetDefaultFrames(), default_periods, &pcm_h); ASSERT_EQ(ret, AUDIO_RET_OK); ret = hal_audio_pcm_start(m_h, pcm_h); @@ -1065,20 +1070,20 @@ TEST_F(AudioHalTest, PcmRecoverN) TEST_F(AudioHalTest, PcmSetParamP) { pcm_handle pcm_h = nullptr; - string card, dev; - int rate = default_rate, channels = default_channels; - CDeviceMapParser().get_playback(card, dev, rate, channels); + auto [ card, device, rate, channels ] = CDeviceMapParser().get_playback(); m_spec = { - AUDIO_SAMPLE_S16LE, static_cast(rate), static_cast(channels) + AUDIO_SAMPLE_S16LE, + static_cast(rate), + static_cast(channels) }; SetRouteToSpeaker(); - int32_t ret = hal_audio_pcm_open(m_h, card.c_str(), dev.c_str(), - AUDIO_DIRECTION_OUT, &m_spec, - GetDefaultFrames(), default_periods, &pcm_h); + int32_t ret = hal_audio_pcm_open(m_h, card.c_str(), device.c_str(), + AUDIO_DIRECTION_OUT, &m_spec, + GetDefaultFrames(), default_periods, &pcm_h); ASSERT_EQ(ret, AUDIO_RET_OK); ret = hal_audio_pcm_set_params(m_h, pcm_h, AUDIO_DIRECTION_OUT, &m_spec, @@ -1105,19 +1110,20 @@ TEST_F(AudioHalTest, PcmSetParamP) TEST_F(AudioHalTest, PcmSetParamN) { pcm_handle pcm_h = nullptr; - string card, dev; - int rate = default_rate, channels = default_channels; - CDeviceMapParser().get_playback(card, dev, rate, channels); + auto [ card, device, rate, channels ] = CDeviceMapParser().get_playback(); m_spec = { - AUDIO_SAMPLE_S16LE, static_cast(rate), static_cast(channels) + AUDIO_SAMPLE_S16LE, + static_cast(rate), + static_cast(channels) }; SetRouteToSpeaker(); - int32_t ret = hal_audio_pcm_open(m_h, card.c_str(), dev.c_str(), - AUDIO_DIRECTION_OUT, &m_spec, GetDefaultFrames(), default_periods, &pcm_h); + int32_t ret = hal_audio_pcm_open(m_h, card.c_str(), device.c_str(), + AUDIO_DIRECTION_OUT, &m_spec, + GetDefaultFrames(), default_periods, &pcm_h); ASSERT_EQ(ret, AUDIO_RET_OK); ret = hal_audio_pcm_set_params(m_h, nullptr, AUDIO_DIRECTION_OUT, &m_spec, GetDefaultFrames(), default_periods); @@ -1143,20 +1149,20 @@ TEST_F(AudioHalTest, PcmSetParamN) TEST_F(AudioHalTest, PcmGetParamP) { pcm_handle pcm_h = nullptr; - string card, dev; - int rate = default_rate, channels = default_channels; - CDeviceMapParser().get_playback(card, dev, rate, channels); + auto [ card, device, rate, channels ] = CDeviceMapParser().get_playback(); m_spec = { - AUDIO_SAMPLE_S16LE, static_cast(rate), static_cast(channels) + AUDIO_SAMPLE_S16LE, + static_cast(rate), + static_cast(channels) }; - // Precondition SetRouteToSpeaker(); - int32_t ret = hal_audio_pcm_open(m_h, card.c_str(), dev.c_str(), - AUDIO_DIRECTION_OUT, &m_spec, - GetDefaultFrames(), default_periods, &pcm_h); + + int32_t ret = hal_audio_pcm_open(m_h, card.c_str(), device.c_str(), + AUDIO_DIRECTION_OUT, &m_spec, + GetDefaultFrames(), default_periods, &pcm_h); ASSERT_EQ(ret, AUDIO_RET_OK); // Test Body diff --git a/testcase/parser.cpp b/testcase/parser.cpp index cc49b6e..1a33f5f 100644 --- a/testcase/parser.cpp +++ b/testcase/parser.cpp @@ -162,33 +162,40 @@ void CDeviceMapParser::get_params(string& s, int& rate, int& channels) void CDeviceMapParser::dump_devices() { - string card, device_num; - int rate = -1, channels = -1; - - get_playback(card, device_num, rate, channels); - get_capture(card, device_num, rate, channels); + auto playback = get_playback(); + auto capture = get_capture(); } -void CDeviceMapParser::get_playback(string& card, string& device_num, int& rate, int& channels) +DeviceInfo CDeviceMapParser::get_playback() { parse_playback(); + string card, device_num; + int rate = default_rate, channels = default_channels; + get_device(m_playback.first, card, device_num); get_params(m_playback.second, rate, channels); cout << " 1. PLAYBACK" << endl; cout << " > card=" << card << ", device=" << device_num << endl; cout << " > rate=" << rate << ", channels=" << channels << endl << endl; + + return make_tuple(card, device_num, rate, channels); } -void CDeviceMapParser::get_capture(string& card, string& device_num, int& rate, int& channels) +DeviceInfo CDeviceMapParser::get_capture() { parse_capture(); + string card, device_num; + int rate = default_rate, channels = default_channels; + get_device(m_capture.first, card, device_num); get_params(m_capture.second, rate, channels); cout << " 2. CAPTURE" << endl; cout << " > card=" << card << ", device=" << device_num << endl; cout << " > rate=" << rate << ", channels=" << channels << endl; + + return make_tuple(card, device_num, rate, channels); } void CDeviceMapParser::parse_device_string_object(json_object *device_string_o, string& device_string) diff --git a/testcase/parser.hh b/testcase/parser.hh index 34b7f14..ecaedb5 100644 --- a/testcase/parser.hh +++ b/testcase/parser.hh @@ -19,20 +19,39 @@ #include #include #include +#include +#include using namespace std; -class CDeviceMapParser +using DeviceInfo = tuple; + +class DeviceMapParser +{ +public: + virtual ~DeviceMapParser() = default; + virtual DeviceInfo get_playback() = 0; + virtual DeviceInfo get_capture() = 0; +}; + +class MockDeviceMapParser : public DeviceMapParser +{ +public: + MOCK_METHOD(DeviceInfo, get_playback, (), (override)); + MOCK_METHOD(DeviceInfo, get_capture, (), (override)); +}; + +class CDeviceMapParser : public DeviceMapParser { public: CDeviceMapParser(); explicit CDeviceMapParser(const char* map_file); - virtual ~CDeviceMapParser(); + ~CDeviceMapParser() override; void dump_devices(); - void get_playback(string& card, string& device_num, int& rate, int& channels); - void get_capture(string& card, string& device_num, int& rate, int& channels); + DeviceInfo get_playback() override; + DeviceInfo get_capture() override; private: void open_json(const char* json_file); @@ -54,6 +73,11 @@ private: json_object *m_json_obj; json_object *m_json_device_files_obj; + + static constexpr int default_frames = 6400; + static constexpr int default_periods = 5; + static constexpr int default_rate = 44100; + static constexpr int default_channels = 2; }; -- 2.34.1