Apply mock object for device parser 82/261582/2
authorSeungbae Shin <seungbae.shin@samsung.com>
Wed, 21 Jul 2021 13:07:26 +0000 (22:07 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Thu, 22 Jul 2021 09:57:33 +0000 (18:57 +0900)
[Version] 0.0.12
[Issue Type] Refactoring

Change-Id: Ie9a82097a5b887dc0dbfda63e7e994dab115eb69

packaging/hal-api-audio.spec
testcase/CMakeLists.txt
testcase/audio_haltests.cpp
testcase/parser.cpp
testcase/parser.hh

index d049089e606a986a30ffd122e72506214cf4c11c..6335462bf060f37cc2d6ed0891bb11baa32dffa2 100644 (file)
@@ -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
index 0190103348f73758b207b8889b014803296db29b..f5eabd47a0e695c548d4940ed8797f4b17df8a68 100644 (file)
@@ -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})
index c7f545043e5b03720e0c9b9273625becdb028c0b..0392a60c9ed34a7074a387ee622e82a05413b0a0 100644 (file)
@@ -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<uint32_t>(rate), static_cast<uint8_t>(channels)
+               AUDIO_SAMPLE_S16LE,
+               static_cast<uint32_t>(rate),
+               static_cast<uint8_t>(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<uint32_t>(rate), static_cast<uint8_t>(channels)
+               AUDIO_SAMPLE_S16LE,
+               static_cast<uint32_t>(rate),
+               static_cast<uint8_t>(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<uint32_t>(rate), static_cast<uint8_t>(channels)
+               AUDIO_SAMPLE_S16LE,
+               static_cast<uint32_t>(rate),
+               static_cast<uint8_t>(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<uint32_t>(rate), static_cast<uint8_t>(channels)
+               AUDIO_SAMPLE_S16LE,
+               static_cast<uint32_t>(rate),
+               static_cast<uint8_t>(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<uint32_t>(rate), static_cast<uint8_t>(channels)
+               AUDIO_SAMPLE_S16LE,
+               static_cast<uint32_t>(rate),
+               static_cast<uint8_t>(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<uint32_t>(rate), static_cast<uint8_t>(channels)
+               AUDIO_SAMPLE_S16LE,
+               static_cast<uint32_t>(rate),
+               static_cast<uint8_t>(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<uint32_t>(rate), static_cast<uint8_t>(channels)
+               AUDIO_SAMPLE_S16LE,
+               static_cast<uint32_t>(rate),
+               static_cast<uint8_t>(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
index cc49b6e3833ab53af0c4dc16791197beb55eb2c9..1a33f5f7bb2bc4dabd73ea6a5ffa38d39117d813 100644 (file)
@@ -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)
index 34b7f14d119f9af9678d409c7dc2721bdf60cee9..ecaedb5ecfcb9dd50825f5fe53253a885d0d356f 100644 (file)
 #include <iostream>
 #include <string>
 #include <json.h>
+#include <gmock/gmock.h>
+#include <tuple>
 
 using namespace std;
 
-class CDeviceMapParser
+using DeviceInfo = tuple<string, string, int, int>;
+
+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;
 };