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.")
#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); \
#ifndef _WAKEUP_AUDIO_MANAGER_H_
#define _WAKEUP_AUDIO_MANAGER_H_
+#include "service_common.h"
+
#include <atomic>
#include <list>
#include <mutex>
#include <vector>
#include <multi_assistant_service.h>
-#include <audio_io.h>
-#include <sound_manager.h>
-#include <sound_manager_internal.h>
namespace multiassistant
{
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};
#include <algorithm>
#include <Ecore.h>
+#include <audio_io.h>
+#include <sound_manager.h>
+#include <sound_manager_internal.h>
namespace multiassistant
{
unique_lock<mutex> lock(mMutex, defer_lock);
- int ret = -1;
- int cnt = 0;
-
/* get feedback data */
size_t audio_data_size = 0;
lock.lock();
ADD_SUBDIRECTORY(config)
ADD_SUBDIRECTORY(client-manager)
+ADD_SUBDIRECTORY(audio-manager)
--- /dev/null
+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})
--- /dev/null
+/*
+ * 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;
+}