Add sample unit test for CAudioManager 51/226051/6
authorJi-hoon Lee <dalton.lee@samsung.com>
Tue, 25 Feb 2020 12:56:39 +0000 (21:56 +0900)
committerJi-hoon Lee <dalton.lee@samsung.com>
Wed, 8 Apr 2020 01:31:40 +0000 (10:31 +0900)
Change-Id: Ide587f7a43f553b10839bd77ba76ea8125c5c51a

CMakeLists.txt
inc/service_common.h
plugins/wakeup-manager/inc/wakeup_audio_manager.h
plugins/wakeup-manager/src/wakeup_audio_manager.cpp
tests/utc/CMakeLists.txt
tests/utc/audio-manager/CMakeLists.txt [new file with mode: 0644]
tests/utc/audio-manager/test_audio_manager.cpp [new file with mode: 0644]

index be36924..529f152 100644 (file)
@@ -46,6 +46,11 @@ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fstack-protector-strong -D_
 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
 
+IF(NOT "${TEST_TYPE}" STREQUAL "none")
+       SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_TYPE=${TEST_TYPE}")
+       SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTEST_TYPE=${TEST_TYPE}")
+ENDIF()
+
 # OPTION DEBUG -----------------------------------------------------------------------------------
 IF("${_SDEBUG}" MATCHES "debug")
   MESSAGE("Building in debug mode.")
index ca86cc8..ecef87d 100644 (file)
 #endif
 #define LOG_TAG "multi-assistant"
 
+#ifdef TEST_TYPE
+#define conditional_public public
+#else
+#define conditional_public private
+#endif
+
 #define MAS_SECURE_LOG_(id, prio, tag, fmt, arg...) \
                ({ do { \
                                __dlog_print(id, prio, tag, "%s: %s(%d) > [SECURE_LOG] " fmt, __MODULE__, __func__, __LINE__, ##arg); \
index fdae382..7f870ae 100644 (file)
@@ -18,6 +18,8 @@
 #ifndef _WAKEUP_AUDIO_MANAGER_H_
 #define _WAKEUP_AUDIO_MANAGER_H_
 
+#include "service_common.h"
+
 #include <atomic>
 #include <list>
 #include <mutex>
@@ -25,9 +27,6 @@
 #include <vector>
 
 #include <multi_assistant_service.h>
-#include <audio_io.h>
-#include <sound_manager.h>
-#include <sound_manager_internal.h>
 
 namespace multiassistant
 {
@@ -89,13 +88,14 @@ public:
        void stop_streaming_follow_up_data();
 
        void set_background_volume(double ratio);
-private:
+conditional_public:
        void add_audio_data(mas_speech_data& data, long long time);
        void notify_audio_data_recording(long time, void* data, int len);
 
        void streaming_previous_audio_data_thread_func();
        void streaming_audio_data_thread_func(long long start_time);
 
+private:
        int mSoundFocusWatchId{0};
        bool mRecordingRequired{false};
        bool mIsRecording{false};
index a69e567..8646a88 100644 (file)
@@ -6,6 +6,9 @@
 #include <algorithm>
 
 #include <Ecore.h>
+#include <audio_io.h>
+#include <sound_manager.h>
+#include <sound_manager_internal.h>
 
 namespace multiassistant
 {
@@ -170,9 +173,6 @@ void CAudioManager::streaming_previous_audio_data_thread_func()
 
        unique_lock<mutex> lock(mMutex, defer_lock);
 
-       int ret = -1;
-       int cnt = 0;
-
        /* get feedback data */
        size_t audio_data_size = 0;
        lock.lock();
index e968034..887d8a3 100644 (file)
@@ -2,3 +2,4 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 
 ADD_SUBDIRECTORY(config)
 ADD_SUBDIRECTORY(client-manager)
+ADD_SUBDIRECTORY(audio-manager)
diff --git a/tests/utc/audio-manager/CMakeLists.txt b/tests/utc/audio-manager/CMakeLists.txt
new file mode 100644 (file)
index 0000000..a523148
--- /dev/null
@@ -0,0 +1,54 @@
+LINK_DIRECTORIES(${CMAKE_BINARY_DIR})
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}
+       ${CMAKE_SOURCE_DIR}/plugins/wakeup-manager/inc
+       )
+
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall -Werror")
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -Wno-unused-function -Wno-sign-compare")
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -Wl,-zdefs" )
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fPIE")
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -Werror")
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -std=c++11")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS}")
+
+ADD_DEFINITIONS("-DFULLVER=\"${FULLVER}\"")
+
+SET(TEST_SOURCES
+       test_audio_manager.cpp
+       ${CMAKE_SOURCE_DIR}/plugins/wakeup-manager/src/wakeup_audio_manager.cpp
+       ${CMAKE_SOURCE_DIR}/plugins/wakeup-manager/src/dependency_resolver.cpp
+       ${CMAKE_SOURCE_DIR}/plugins/wakeup-manager/src/heap_tracer.cpp
+)
+
+# Find Packages
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED
+       capi-appfw-application
+       capi-appfw-preference
+       multi-assistant
+       dlog
+       libxml-2.0
+       capi-media-audio-io
+       vconf
+       ecore
+)
+
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+FIND_PACKAGE(GTest REQUIRED)
+INCLUDE_DIRECTORIES(${GTEST_INCLUDE_DIRS})
+LINK_DIRECTORIES(${GTEST_LIBRARY_DIRS})
+
+SET(TEST_AUDIO_MANAGER test-audio-manager)
+ADD_EXECUTABLE(${TEST_AUDIO_MANAGER}
+       ${TEST_SOURCES}
+       )
+
+TARGET_LINK_LIBRARIES(${TEST_AUDIO_MANAGER} -ldl ${GTEST_LIBRARIES} pthread
+       ${EXTRA_LDFLAGS} ${pkgs_LDFLAGS})
+
+INSTALL(TARGETS ${TEST_AUDIO_MANAGER} DESTINATION bin)
+
+ADD_TEST(NAME ${TEST_AUDIO_MANAGER} COMMAND ${TEST_AUDIO_MANAGER})
diff --git a/tests/utc/audio-manager/test_audio_manager.cpp b/tests/utc/audio-manager/test_audio_manager.cpp
new file mode 100644 (file)
index 0000000..999a1d9
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2018 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * 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 <gtest/gtest.h>
+
+#include "wakeup_audio_manager.h"
+
+#include <string>
+#include <iostream>
+
+class CAudioEventObserver : public multiassistant::wakeup::IAudioEventObserver
+{
+public:
+       virtual bool on_recording_audio_data(long time, void* data, int len) override
+       {
+               return true;
+       }
+       virtual bool on_streaming_audio_data(
+               mas_speech_streaming_event_e event, void* buffer, unsigned int len) override
+       {
+               std::string data = std::string{reinterpret_cast<const char*>(buffer), len};
+               mStreamingData.push_back(data);
+               return true;
+       }
+       std::vector<std::string> mStreamingData;
+};
+
+class DefaultFixture : public testing::Test
+{
+public:
+       DefaultFixture() {
+       }
+       virtual ~DefaultFixture() {
+       }
+       void SetUp() override {
+       }
+       void TearDown() override {
+       }
+       CAudioEventObserver mAudioEventObserver;
+       multiassistant::wakeup::CAudioManager audio_manager{&mAudioEventObserver};
+};
+
+TEST_F(DefaultFixture, StreamsAllDataFed) {
+       std::string arbitrary_data{"arbitrary_data"};
+       size_t data_feed_num = 10;
+       for (int loop = 0;loop < data_feed_num;loop++) {
+               /* CONTINUE by default */
+               mas_speech_streaming_event_e event = MAS_SPEECH_STREAMING_EVENT_CONTINUE;
+               if (0 == loop) event = MAS_SPEECH_STREAMING_EVENT_START;
+               else if (data_feed_num - 1 == loop) event = MAS_SPEECH_STREAMING_EVENT_FINISH;
+               audio_manager.feed_audio_data(event,
+                       (void*)(arbitrary_data.c_str()), arbitrary_data.size());
+       }
+
+       audio_manager.streaming_audio_data_thread_func(std::numeric_limits<long>::min());
+
+       int count = 0;
+       for (std::string data : mAudioEventObserver.mStreamingData) {
+               if (0 == data.compare(arbitrary_data)) {
+                       count++;
+               }
+       }
+       ASSERT_EQ(count, data_feed_num);
+}
+
+int main(int argc, char** argv) {
+       testing::InitGoogleTest(&argc, argv);
+       int ret = RUN_ALL_TESTS();
+       return ret;
+}