aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeonid Lazarev <leonid.lazarev@orioninc.com>2020-07-09 16:59:44 +0300
committerLeonid Lazarev <leonid.lazarev@orioninc.com>2020-09-10 10:31:30 +0300
commit329d8ba3fb46b8afc803ad4a9b286cd26141f2f8 (patch)
treedf2d117410e98abc20c86f3a35cecdacb53e6793
parent0cecffd4565b52bd8d200f6bc9f4144f244a6515 (diff)
Add tests for cloudproxy service
Test cases for basic functionality verification have been added. Build of the application has been adapted for Cmake templates usage. Bug-AGL: SPEC-3485 Change-Id: Iaa4a5e393ac9971be4176e90fa5aee10a4673cd3 Signed-off-by: Leonid Lazarev <leonid.lazarev@orioninc.com>
-rwxr-xr-xCMakeLists.txt18
-rw-r--r--TEST-README.md23
-rw-r--r--conf.d/cmake/config.cmake165
-rw-r--r--conf.d/wgt/config.xml.in26
-rwxr-xr-xconf.d/wgt/icon.svg (renamed from package/root/icon.svg)0
-rw-r--r--etc/config.ini (renamed from src/config_sample.ini)0
-rwxr-xr-xpackage/root/config.xml23
-rwxr-xr-xsrc/CMakeLists.txt67
-rw-r--r--test/CMakeLists.txt28
-rw-r--r--test/afb-test/CMakeLists.txt21
-rw-r--r--test/afb-test/etc/CMakeLists.txt35
-rw-r--r--test/afb-test/etc/aft-agl-cloudproxy.json22
-rw-r--r--test/afb-test/tests/CMakeLists.txt34
-rw-r--r--test/afb-test/tests/cloudproxy.lua26
14 files changed, 402 insertions, 86 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a7f89ba..23a915f 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,20 +14,10 @@
# limitations under the License.
###########################################################################
-project(CloudProxyService C CXX)
+CMAKE_MINIMUM_REQUIRED(VERSION 3.3)
-cmake_minimum_required(VERSION 3.0)
+project(CloudProxyService)
-set(PROJECT_NAME "CloudProxy Service")
-set(PROJECT_VERSION "1.0")
-set(PROJECT_DESCRIPTION "CloudProxy Service")
-set(PROJECT_INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR})
-set(PROJECT_LIBDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
-set(binding_install_dir ${PREFIX}/lib/cloudproxy)
-set(PROJECT_BINDINGDIR ${binding_install_dir})
+include(${CMAKE_CURRENT_SOURCE_DIR}/conf.d/cmake/config.cmake)
-# get pkgconfig
-INCLUDE(FindPkgConfig)
-link_libraries(-Wl,--as-needed -Wl,--gc-sections -Wl,--no-undefined)
-
-add_subdirectory(src)
+install(DIRECTORY etc DESTINATION ./)
diff --git a/TEST-README.md b/TEST-README.md
new file mode 100644
index 0000000..f81d558
--- /dev/null
+++ b/TEST-README.md
@@ -0,0 +1,23 @@
+## Building the test widgets
+1. Source the SDK environment script
+2. Create a build directory
+3. Configure and build the project
+
+```
+mkdir build
+cd build
+cmake .. -DBUILD_TEST_WGT=TRUE
+make
+make widget
+```
+Note: If you omit the -DBUILD_TEST_WGT=TRUE parameter for cmake, you'll have to type `make test_widget` to compile the test widget.
+
+This should produce two _.wgt_ files - one with the service and one with the tests within the build directory.
+
+Run the tests:
+```
+scp *.wgt root@<board-ip>:~
+ssh root@<board-ip>
+afm-test $(ls *test.wgt)
+
+```
diff --git a/conf.d/cmake/config.cmake b/conf.d/cmake/config.cmake
new file mode 100644
index 0000000..d6e9516
--- /dev/null
+++ b/conf.d/cmake/config.cmake
@@ -0,0 +1,165 @@
+###########################################################################
+# Copyright 2015, 2016, 2017 IoT.bzh
+#
+# author: Fulup Ar Foll <fulup@iot.bzh>
+#
+# Copyright (C) 2020 MERA
+# Leonid Lazarev <leonid.lazarev@orioninc.com>
+#
+# 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.
+###########################################################################
+
+# Project Info
+# ------------------
+set(PROJECT_NAME agl-service-cloudproxy)
+set(API_NAME "cloudproxy")
+set(PROJECT_PRETTY_NAME "CloudProxy Service")
+set(PROJECT_DESCRIPTION "Service providing connection towards clouds")
+set(PROJECT_URL "https://gerrit.automotivelinux.org/gerrit/apps/agl-service-cloudproxy")
+set(PROJECT_ICON "icon.svg")
+set(PROJECT_AUTHOR "MERA")
+set(PROJECT_AUTHOR_EMAIL "")
+set(PROJECT_VERSION "0.1")
+set(PROJECT_LICENSE "APL2.0")
+set(PROJECT_LANGUAGES,"CXX")
+
+# Where are stored the project configuration files
+# relative to the root project directory
+set(PROJECT_CMAKE_CONF_DIR "conf.d")
+
+# Where are stored your external libraries for your project. This is 3rd party library that you don't maintain
+# but used and must be built and linked.
+# set(PROJECT_LIBDIR "libs")
+
+# Where are stored data for your application. Pictures, static resources must be placed in that folder.
+# set(PROJECT_RESOURCES "data")
+
+# Which directories inspect to find CMakeLists.txt target files
+# set(PROJECT_SRC_DIR_PATTERN "*")
+
+# Compilation Mode (DEBUG, RELEASE)
+# ----------------------------------
+set(BUILD_TYPE "RELEASE")
+
+# Kernel selection if needed. You can choose between a
+# mandatory version to impose a minimal version.
+# Or check Kernel minimal version and just print a Warning
+# about missing features and define a preprocessor variable
+# to be used as preprocessor condition in code to disable
+# incompatibles features. Preprocessor define is named
+# KERNEL_MINIMAL_VERSION_OK.
+#
+# NOTE*** FOR NOW IT CHECKS KERNEL Yocto environment and
+# Yocto SDK Kernel version.
+# -----------------------------------------------
+#set(kernel_mandatory_version 4.8)
+
+# Compiler selection if needed. Impose a minimal version.
+# -----------------------------------------------
+set (gcc_minimal_version 4.9)
+
+# PKG_CONFIG required packages
+# -----------------------------
+set (PKG_REQUIRED_LIST
+ json-c
+ libsystemd>=222
+ afb-daemon
+ glib-2.0
+)
+
+# Static constante definition
+# -----------------------------
+
+add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-pthread>)
+
+# Customize link option
+# -----------------------------
+list (APPEND link_libraries -pthread -Wl,--as-needed -Wl,--gc-sections -Wl,--no-undefined)
+
+# (BUG!!!) as PKG_CONFIG_PATH does not work [should be an env variable]
+# ---------------------------------------------------------------------
+
+set(INSTALL_PREFIX $ENV{HOME}/opt)
+set(CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX}/lib64/pkgconfig ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig)
+set(LD_LIBRARY_PATH ${CMAKE_INSTALL_PREFIX}/lib64 ${CMAKE_INSTALL_PREFIX}/lib)
+
+# Optional location for config.xml.in
+# -----------------------------------
+set(WIDGET_CONFIG_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/conf.d/wgt/config.xml.in)
+
+# Mandatory widget Mimetype specification of the main unit
+# --------------------------------------------------------------------------
+# Choose between :
+#- text/html : HTML application,
+# content.src designates the home page of the application
+#
+#- application/vnd.agl.native : AGL compatible native,
+# content.src designates the relative path of the binary.
+#
+# - application/vnd.agl.service: AGL service, content.src is not used.
+#
+#- ***application/x-executable***: Native application,
+# content.src designates the relative path of the binary.
+# For such application, only security setup is made.
+#
+set(WIDGET_TYPE application/vnd.agl.service)
+
+# Mandatory Widget entry point file of the main unit
+# --------------------------------------------------------------
+# This is the file that will be executed, loaded,
+# at launch time by the application framework.
+#
+set(WIDGET_ENTRY_POINT lib/libcloudproxy-binding.so)
+
+# Print a helper message when every thing is finished
+# ----------------------------------------------------
+set(CLOSING_MESSAGE "Test with: afb-daemon --rootdir=\$\$(pwd)/package --binding=\$\$(pwd)/package/${WIDGET_ENTRY_POINT} --port=1234 --tracereq=common --token=\"1\" --verbose")
+set(PACKAGE_MESSAGE "Install widget file using in the target : afm-util install ${PROJECT_NAME}.wgt")
+
+# Optional dependencies order
+# ---------------------------
+#set(EXTRA_DEPENDENCIES_ORDER)
+
+# Optional Extra global include path
+# -----------------------------------
+#set(EXTRA_INCLUDE_DIRS)
+
+# Optional extra libraries
+# -------------------------
+#set(EXTRA_LINK_LIBRARIES)
+
+# Optional force binding installation
+# ------------------------------------
+# set(BINDINGS_INSTALL_PREFIX PrefixPath )
+
+# Optional force binding Linking flag
+# ------------------------------------
+# set(BINDINGS_LINK_FLAG LinkOptions )
+
+# Optional force package prefix generation, like widget
+# -----------------------------------------------------
+# set(PKG_PREFIX DestinationPath)
+
+# Optional Application Framework security token
+# and port use for remote debugging.
+#------------------------------------------------------------
+#set(AFB_TOKEN "" CACHE PATH "Default AFB_TOKEN")
+#set(AFB_REMPORT "1234" CACHE PATH "Default AFB_TOKEN")
+
+# This include is mandatory and MUST happens at the end
+# of this file, else you expose you to unexpected behavior
+#
+# This CMake module could be found at the following url:
+# https://gerrit.automotivelinux.org/gerrit/#/admin/projects/src/cmake-apps-module
+# -----------------------------------------------------------
+include(CMakeAfbTemplates)
diff --git a/conf.d/wgt/config.xml.in b/conf.d/wgt/config.xml.in
new file mode 100644
index 0000000..ae0ebd2
--- /dev/null
+++ b/conf.d/wgt/config.xml.in
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" id="@PROJECT_NAME@" version="@PROJECT_VERSION@">
+ <name>@PROJECT_NAME@</name>
+ <icon src="@PROJECT_ICON@"/>
+ <content src="@WIDGET_ENTRY_POINT@" type="@WIDGET_TYPE@"/>
+ <description>@PROJECT_DESCRIPTION@</description>
+ <author>@PROJECT_AUTHOR@ &lt;@PROJECT_AUTHOR_MAIL@&gt;</author>
+ <license>@PROJECT_LICENSE@</license>
+
+ <feature name="urn:AGL:widget:required-permission">
+ <param name="urn:AGL:permission::public:hidden" value="required" />
+ <param name="urn:AGL:permission::system:run-by-default" value="required" />
+ </feature>
+
+ <feature name="urn:AGL:widget:provided-api">
+ <param name="@API_NAME@" value="ws" />
+ </feature>
+
+ <feature name="urn:AGL:widget:required-api">
+ <param name="afm-main" value="ws" />
+ </feature>
+
+ <feature name="urn:AGL:widget:required-binding">
+ <param name="@WIDGET_ENTRY_POINT@" value="local" />
+ </feature>
+</widget>
diff --git a/package/root/icon.svg b/conf.d/wgt/icon.svg
index 6628784..6628784 100755
--- a/package/root/icon.svg
+++ b/conf.d/wgt/icon.svg
diff --git a/src/config_sample.ini b/etc/config.ini
index fa97cd7..fa97cd7 100644
--- a/src/config_sample.ini
+++ b/etc/config.ini
diff --git a/package/root/config.xml b/package/root/config.xml
deleted file mode 100755
index acfdc1e..0000000
--- a/package/root/config.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" id="cloudproxy-service" version="0.1">
- <name>cloudproxy-service</name>
- <icon src="icon.svg"/>
- <content src="config.xml" type="application/vnd.agl.service"/>
- <description>CloudProxy service</description>
- <author>MERA</author>
- <license>APL 2.0</license>
- <feature name="urn:AGL:widget:required-permission">
- <param name="urn:AGL:permission::public:hidden" value="required" />
- <param name="urn:AGL:permission::system:run-by-default" value="required" />
- <param name="http://tizen.org/privilege/internal/dbus" value="required" />
- </feature>
- <feature name="urn:AGL:widget:provided-api">
- <param name="cloudproxy" value="ws" />
- </feature>
- <feature name="urn:AGL:widget:required-api">
- <param name="afm-main" value="ws" />
- </feature>
- <feature name="urn:AGL:widget:required-binding">
- <param name="lib/cloudproxy-service.so" value="local" />
- </feature>
-</widget>
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index fc397f1..fde17a5 100755
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -14,64 +14,33 @@
# limitations under the License.
###########################################################################
-cmake_minimum_required(VERSION 2.8)
+PROJECT_TARGET_ADD(cloudproxy-binding)
-set(TARGETS_ARBINDER cloudproxy-service)
+add_definitions(-DAFB_BINDING_VERSION=3)
-INCLUDE(FindThreads)
-FIND_PACKAGE(Threads)
-
-pkg_check_modules(cp_binding_depends afb-daemon glib-2.0 gio-2.0 gio-unix-2.0 json-c)
-set(binding_cp_sources
- cloudproxy-bindings.cpp
- utils.h
- hmi-debug.h
- ClientManager.h
- ClientManager.cpp
+set(BINDING_SOURCES
+ cloudproxy-bindings.cpp
+ utils.h
+ hmi-debug.h
+ ClientManager.h
+ ClientManager.cpp
)
-link_libraries(-Wl,--as-needed -Wl,--gc-sections -Wl,--no-undefined)
-
set(AZURE_DEP_LIBS iothub_client)
-add_library(${TARGETS_ARBINDER} MODULE ${binding_cp_sources})
-
include_directories(${CMAKE_SYSROOT}/usr/include/azureiot)
-target_compile_options(${TARGETS_ARBINDER} PRIVATE ${cp_binding_depends_CFLAGS})
-if(DEFINED DEBUGMODE)
- target_compile_options(${TARGETS_ARBINDER} PRIVATE -g -O0)
-else(DEFINED DEBUGMODE)
- target_compile_options(${TARGETS_ARBINDER} PRIVATE -g -O2)
-endif(DEFINED DEBUGMODE)
-
-target_link_libraries(${TARGETS_ARBINDER} ${CMAKE_THREAD_LIBS_INIT} ${link_libraries} ${cp_binding_depends_LIBRARIES} ${AZURE_DEP_LIBS})
-
+add_library(${TARGET_NAME} MODULE ${BINDING_SOURCES})
-set_target_properties(${TARGETS_ARBINDER} PROPERTIES
- PREFIX ""
- LINK_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/export.map"
- )
+TARGET_LINK_LIBRARIES(${TARGET_NAME} ${link_libraries} ${AZURE_DEP_LIBS})
-target_compile_definitions(${TARGETS_ARBINDER}
- PRIVATE
- AFB_BINDING_VERSION=3
- _GNU_SOURCE)
-
-
-if(NOT EXISTS ${PROJECT_BINARY_DIR}/package)
- add_custom_command(TARGET ${TARGETS_ARBINDER} POST_BUILD
- COMMAND cp -rf ${PROJECT_SOURCE_DIR}/package ${PROJECT_BINARY_DIR}
- )
-endif()
-
-add_custom_command(TARGET ${TARGETS_ARBINDER} POST_BUILD
- COMMAND mkdir -p ${PROJECT_BINARY_DIR}/package/root/lib
- COMMAND cp -rf ${PROJECT_BINARY_DIR}/src/${TARGETS_ARBINDER}.so ${PROJECT_BINARY_DIR}/package/root/lib
- COMMAND mkdir -p ${PROJECT_BINARY_DIR}/package/root/etc
- COMMAND cp -f ${PROJECT_SOURCE_DIR}/src/config_sample.ini ${PROJECT_BINARY_DIR}/package/root/etc/config.ini
-)
+SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
+ LABELS "BINDING"
+ PREFIX "lib"
+ LINK_FLAGS "${BINDINGS_LINK_FLAG}"
+ OUTPUT_NAME "${TARGET_NAME}"
+ )
-add_custom_target(widget DEPENDS ${PROJECT_BINARY_DIR}/package/root
- COMMAND wgtpkg-pack -f -o ${PROJECT_BINARY_DIR}/${TARGETS_ARBINDER}.wgt ${PROJECT_BINARY_DIR}/package/root
+add_custom_command(TARGET ${TARGET_NAME} PRE_BUILD
+ COMMAND cp -rv ${PROJECT_SOURCE_DIR}/etc ${PROJECT_BINARY_DIR}/package/
)
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
new file mode 100644
index 0000000..becb900
--- /dev/null
+++ b/test/CMakeLists.txt
@@ -0,0 +1,28 @@
+###########################################################################
+# Copyright 2019 Konsulko Group
+#
+# author:Stoyan Bogdanov <stoyan.bogdanov@konsulko.com>
+#
+# 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_CLOUDPROXY_TESTS
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMAND afm-test ${CMAKE_BINARY_DIR}/package ${CMAKE_BINARY_DIR}/package-test
+ )
+
diff --git a/test/afb-test/CMakeLists.txt b/test/afb-test/CMakeLists.txt
new file mode 100644
index 0000000..81ddf88
--- /dev/null
+++ b/test/afb-test/CMakeLists.txt
@@ -0,0 +1,21 @@
+###########################################################################
+# Copyright 2019 Konsulko Group
+#
+# author:Stoyan Bogdanov <stoyan.bogdanov@konsulko.com>
+#
+# 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})
diff --git a/test/afb-test/etc/CMakeLists.txt b/test/afb-test/etc/CMakeLists.txt
new file mode 100644
index 0000000..228764c
--- /dev/null
+++ b/test/afb-test/etc/CMakeLists.txt
@@ -0,0 +1,35 @@
+###########################################################################
+# Copyright 2019 Konsulko Group
+#
+# author:Stoyan Bogdanov <stoyan.bogdanov@konsulko.com>
+#
+# Copyright 2020 MERA
+# author:Leonid Lazarev (leonid.lazarev@orioninc.com)
+#
+# 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.
+###########################################################################
+
+##################################################
+# cloudproxy 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}
+ )
+
diff --git a/test/afb-test/etc/aft-agl-cloudproxy.json b/test/afb-test/etc/aft-agl-cloudproxy.json
new file mode 100644
index 0000000..be92ed7
--- /dev/null
+++ b/test/afb-test/etc/aft-agl-cloudproxy.json
@@ -0,0 +1,22 @@
+{
+ "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-cloudproxy",
+ "info": "AFB-test binding configuration file to test cloudproxy api.",
+ "require": [
+ "cloudproxy"
+ ]
+ },
+ "testVerb": {
+ "uid": "launch_all_tests",
+ "info": "Launch all the tests",
+ "action": "lua://AFT#_launch_test",
+ "args": {
+ "trace": "cloudproxy",
+ "files": ["cloudproxy.lua"]
+ }
+ }
+}
diff --git a/test/afb-test/tests/CMakeLists.txt b/test/afb-test/tests/CMakeLists.txt
new file mode 100644
index 0000000..45dbdef
--- /dev/null
+++ b/test/afb-test/tests/CMakeLists.txt
@@ -0,0 +1,34 @@
+###########################################################################
+# Copyright 2019 Konsulko Group
+#
+# author:Stoyan Bogdanov <stoyan.bogdanov@konsulko.com>
+#
+# Copyright 2020 MERA
+# author:Leonid Lazarev <leonid.lazarev@orioninc.com>
+#
+# 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.
+###########################################################################
+
+##################################################
+# cloudproxy 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}
+ )
+
diff --git a/test/afb-test/tests/cloudproxy.lua b/test/afb-test/tests/cloudproxy.lua
new file mode 100644
index 0000000..7832cef
--- /dev/null
+++ b/test/afb-test/tests/cloudproxy.lua
@@ -0,0 +1,26 @@
+--[[
+ Copyright 2020 MERA
+
+ author:Leonid Lazarev <leonid.lazarev@orioninc.com>
+
+ 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.
+--]]
+
+_AFT.testVerbStatusSuccess('testSendMessageSuccess','cloudproxy','ping', {})
+_AFT.testVerbStatusSuccess('testSubscribeToMsgConfirmation','cloudproxy','subscribe', {event="sendMessageConfirmation"})
+_AFT.testVerbStatusSuccess('testSubscribeToReceivedMsg','cloudproxy','subscribe', {event="receivedMessage"})
+_AFT.testVerbStatusSuccess('testUnsubscribeToUnkownMsg','cloudproxy','unsubscribe', {event="UnknownMsg"}) -- NOTE: Implementation detail - unknown msg are ignored.
+_AFT.testVerbStatusError('testSubscribeToUnkownMsg','cloudproxy','subscribe', {event="UnknownMsg"})
+_AFT.testVerbStatusSuccess('testUnsubscribeToMsgConfirmation','cloudproxy','unsubscribe', {event="sendMessageConfirmation"})
+_AFT.testVerbStatusSuccess('testUnsubscribeToReceivedMsg','cloudproxy','unsubscribe', {event="receivedMessage"})
+