Merge "Fix config.cmake" into flounder flounder 6.0.1 6.0.2 6.0.3 6.0.4 6.0.5 flounder/6.0.1 flounder/6.0.2 flounder/6.0.3 flounder/6.0.4 flounder/6.0.5 flounder_6.0.1 flounder_6.0.2 flounder_6.0.3 flounder_6.0.4 flounder_6.0.5
authorJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Thu, 11 Oct 2018 12:36:36 +0000 (12:36 +0000)
committerGerrit Code Review <gerrit@automotivelinux.org>
Thu, 11 Oct 2018 12:36:36 +0000 (12:36 +0000)
12 files changed:
README.md
conf.d/app-templates
conf.d/autobuild/agl/autobuild [new file with mode: 0755]
conf.d/autobuild/linux/autobuild [new file with mode: 0755]
test/CMakeLists.txt [new file with mode: 0644]
test/afb-test.sh [new file with mode: 0755]
test/etc/CMakeLists.txt [new file with mode: 0644]
test/etc/aft-persistence-test.json [new file with mode: 0644]
test/fixtures/CMakeLists.txt [new file with mode: 0644]
test/fixtures/test1.json [new file with mode: 0644]
test/tests/CMakeLists.txt [new file with mode: 0644]
test/tests/persistence_BasicAPITest.lua [new file with mode: 0644]

index fb420dc..979d35e 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,38 +1,52 @@
 
 # Database Binding
+
 This binding provide a database API with key/value semantics.
 The backend is currently a Berkeley DB.
 
 ## Verbs
+
 * **insert**:
-       This verb insert a key/value pair in the database.
-       If the key already exist, the verb fails.
-       
+
+    This verb insert a key/value pair in the database.
+    If the key already exist, the verb fails.
+
 * **update**:
-       This verb update an existing record.
-       If the key doesn't exist, the verb fails.
-       
+
+    This verb update an existing record.
+    If the key doesn't exist, the verb fails.
+
 * **delete**:
-       This verb remove an existing key/value pair from the database.
-       If no matching record is found, the verb fails.
+
+    This verb remove an existing key/value pair from the database.
+    If no matching record is found, the verb fails.
 
 * **read**:
-       This verb get the value associated with the specified key.
-       If no matching record is found, the verb fails.
+
+    This verb get the value associated with the specified key.
+    If no matching record is found, the verb fails.
 
 ## Arguments
+
 * The **read** and **delete** verbs need only a **key** to work:
-```
+
+```code
 {
-       "key": "mykey"
+    "key": "mykey"
 }
 ```
 
 * The **insert** and **update** verbs need a **key** and a **value** to work:
-```
+
+```code
 {
-       "key": "mykey",
-       "value": "my value"
+    "key": "mykey",
+    "value": "my value"
 }
 ```
+
 The **value** can be any valid json.
+
+## Dependencies
+
+You must install BerkeleyDB and GDBM
\ No newline at end of file
index ee5d60f..3dc85ec 160000 (submodule)
@@ -1 +1 @@
-Subproject commit ee5d60f9d169d959cca9dc24cfc3776ed06c163c
+Subproject commit 3dc85ecc9693a3a4af6d1143507f56b6800d523e
diff --git a/conf.d/autobuild/agl/autobuild b/conf.d/autobuild/agl/autobuild
new file mode 100755 (executable)
index 0000000..83097ab
--- /dev/null
@@ -0,0 +1,67 @@
+#!/usr/bin/make -f
+# Copyright (C) 2015, 2016 "IoT.bzh"
+# Author "Romain Forlot" <romain.forlot@iot.bzh>
+#
+# 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.
+
+THISFILE  := $(lastword $(MAKEFILE_LIST))
+BUILD_DIR := $(abspath $(dir $(THISFILE)/../../../../..)/build)
+DEST      := ${BUILD_DIR}/target
+
+.PHONY: all clean distclean configure build package help update
+
+all: help
+
+help:
+       @echo "List of targets available:"
+       @echo ""
+       @echo "- all"
+       @echo "- clean"
+       @echo "- distclean"
+       @echo "- configure"
+       @echo "- build: compilation, link and prepare files for package into a widget"
+       @echo "- package: output a widget file '*.wgt'"
+       @echo "- install: install in your ${CMAKE_INSTALL_DIR} directory"
+       @echo ""
+       @echo "Usage: ./conf.d/autobuild/agl/autobuild package DEST=${HOME}/opt"
+       @echo "Don't use your build dir as DEST as wgt file is generated at this location"
+
+update: configure
+       @cmake --build ${BUILD_DIR} --target autobuild
+
+clean:
+       @([ -d ${BUILD_DIR} ] && make -C ${BUILD_DIR} clean) || echo Nothing to clean
+
+distclean:
+       @rm -rf ${BUILD_DIR}
+
+configure: ${BUILD_DIR}/Makefile
+
+build: configure
+       @cmake --build ${BUILD_DIR} ${BUILD_ARGS} --target all
+
+package: build
+       @mkdir -p ${BUILD_DIR}/$@/bin
+       @mkdir -p ${BUILD_DIR}/$@/etc
+       @mkdir -p ${BUILD_DIR}/$@/lib
+       @mkdir -p ${BUILD_DIR}/$@/htdocs
+       @mkdir -p ${BUILD_DIR}/$@/var
+       @cmake --build ${BUILD_DIR} --target widget
+       @mkdir -p ${DEST} && cp ${BUILD_DIR}/*wgt ${DEST}
+
+install: build
+       @cmake --build ${BUILD_DIR} --target install
+
+${BUILD_DIR}/Makefile:
+       @[ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR}
+       @[ -f ${BUILD_DIR}/Makefile ] || (cd ${BUILD_DIR} && cmake ${CONFIGURE_ARGS} ..)
diff --git a/conf.d/autobuild/linux/autobuild b/conf.d/autobuild/linux/autobuild
new file mode 100755 (executable)
index 0000000..83097ab
--- /dev/null
@@ -0,0 +1,67 @@
+#!/usr/bin/make -f
+# Copyright (C) 2015, 2016 "IoT.bzh"
+# Author "Romain Forlot" <romain.forlot@iot.bzh>
+#
+# 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.
+
+THISFILE  := $(lastword $(MAKEFILE_LIST))
+BUILD_DIR := $(abspath $(dir $(THISFILE)/../../../../..)/build)
+DEST      := ${BUILD_DIR}/target
+
+.PHONY: all clean distclean configure build package help update
+
+all: help
+
+help:
+       @echo "List of targets available:"
+       @echo ""
+       @echo "- all"
+       @echo "- clean"
+       @echo "- distclean"
+       @echo "- configure"
+       @echo "- build: compilation, link and prepare files for package into a widget"
+       @echo "- package: output a widget file '*.wgt'"
+       @echo "- install: install in your ${CMAKE_INSTALL_DIR} directory"
+       @echo ""
+       @echo "Usage: ./conf.d/autobuild/agl/autobuild package DEST=${HOME}/opt"
+       @echo "Don't use your build dir as DEST as wgt file is generated at this location"
+
+update: configure
+       @cmake --build ${BUILD_DIR} --target autobuild
+
+clean:
+       @([ -d ${BUILD_DIR} ] && make -C ${BUILD_DIR} clean) || echo Nothing to clean
+
+distclean:
+       @rm -rf ${BUILD_DIR}
+
+configure: ${BUILD_DIR}/Makefile
+
+build: configure
+       @cmake --build ${BUILD_DIR} ${BUILD_ARGS} --target all
+
+package: build
+       @mkdir -p ${BUILD_DIR}/$@/bin
+       @mkdir -p ${BUILD_DIR}/$@/etc
+       @mkdir -p ${BUILD_DIR}/$@/lib
+       @mkdir -p ${BUILD_DIR}/$@/htdocs
+       @mkdir -p ${BUILD_DIR}/$@/var
+       @cmake --build ${BUILD_DIR} --target widget
+       @mkdir -p ${DEST} && cp ${BUILD_DIR}/*wgt ${DEST}
+
+install: build
+       @cmake --build ${BUILD_DIR} --target install
+
+${BUILD_DIR}/Makefile:
+       @[ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR}
+       @[ -f ${BUILD_DIR}/Makefile ] || (cd ${BUILD_DIR} && cmake ${CONFIGURE_ARGS} ..)
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
new file mode 100644 (file)
index 0000000..71a121a
--- /dev/null
@@ -0,0 +1,27 @@
+###########################################################################
+# Copyright 2015 - 2018 IoT.bzh
+#
+# author:Frédéric Marec <frederic.marec@iot.bzh>
+#
+# 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_DATA-PERSISTENCE_TESTS
+       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+       COMMAND afb-test.sh ${CMAKE_BINARY_DIR}
+)
\ No newline at end of file
diff --git a/test/afb-test.sh b/test/afb-test.sh
new file mode 100755 (executable)
index 0000000..38c46ff
--- /dev/null
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+BINDER=$(command -v afb-daemon)
+AFBTEST="$(pkg-config --variable libdir afb-test)/aft.so"
+PROCNAME="aft-persistence"
+PORT=1234
+TOKEN=
+LOGFILE="test.log"
+[ "$1" ] && BUILDDIR="$1" || exit 1
+
+TESTPACKAGEDIR="${BUILDDIR}/package-test"
+export AFT_CONFIG_PATH="${TESTPACKAGEDIR}/etc"
+export AFT_PLUGIN_PATH="${TESTPACKAGEDIR}/var:${TESTPACKAGEDIR}/lib/plugins"
+
+pkill $PROCNAME
+
+timeout -s 9 10         "${BINDER}"    --name="${PROCNAME}" \
+                               --port="${PORT}" \
+                               --roothttp=. \
+                               --tracereq=common \
+                               --token=${TOKEN} \
+                               --workdir="${TESTPACKAGEDIR}" \
+                               --binding="../package/lib/afb-persistence-binding.so" \
+                               --binding="$AFBTEST" \
+                               --call="aft-persistence/launch_all_tests:{}" \
+                               --call="aft-persistence/exit:{}" \
+                               -vvv > "${LOGFILE}" 2>&1
+
+find "${BUILDDIR}" -name test_results.log -exec cat {} \;
diff --git a/test/etc/CMakeLists.txt b/test/etc/CMakeLists.txt
new file mode 100644 (file)
index 0000000..1ee805b
--- /dev/null
@@ -0,0 +1,31 @@
+###########################################################################
+# Copyright 2018 IoT.bzh
+#
+# author:Frédéric Marec <frederic.marec@iot.bzh>
+#
+# 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.
+###########################################################################
+
+##################################################
+# Data persistence 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}
+       )
\ No newline at end of file
diff --git a/test/etc/aft-persistence-test.json b/test/etc/aft-persistence-test.json
new file mode 100644 (file)
index 0000000..9e5839c
--- /dev/null
@@ -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-persistence",
+        "info": "AFB-test binding configuration file to test persistence api.",
+        "require": [
+            "persistence"
+        ]
+    },
+    "testVerb": {
+        "uid": "launch_all_tests",
+        "info": "Launch all the tests",
+        "action": "lua://AFT#_launch_test",
+        "args": {
+            "trace": "persistence",
+            "files": ["persistence_BasicAPITest.lua"]
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/fixtures/CMakeLists.txt b/test/fixtures/CMakeLists.txt
new file mode 100644 (file)
index 0000000..e7864b2
--- /dev/null
@@ -0,0 +1,30 @@
+###########################################################################
+# Copyright 2018 IoT.bzh
+#
+# author:Frédéric Marec <frederic.marec@iot.bzh>
+#
+# 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.
+###########################################################################
+
+##################################################
+# Data persistence test configuration files
+##################################################
+PROJECT_TARGET_ADD(data-files)
+
+       file(GLOB DATA_FILES "*.json")
+       add_input_files("${DATA_FILES}")
+
+       SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
+       LABELS "TEST-DATA"
+       OUTPUT_NAME ${TARGET_NAME}
+       )
diff --git a/test/fixtures/test1.json b/test/fixtures/test1.json
new file mode 100644 (file)
index 0000000..d0b3a8f
--- /dev/null
@@ -0,0 +1,5 @@
+{"test":
+    {
+        "test":"test"
+    }
+}
\ No newline at end of file
diff --git a/test/tests/CMakeLists.txt b/test/tests/CMakeLists.txt
new file mode 100644 (file)
index 0000000..c03658a
--- /dev/null
@@ -0,0 +1,31 @@
+###########################################################################
+# Copyright 2018 IoT.bzh
+#
+# author:Frédéric Marec <frederic.marec@iot.bzh>
+#
+# 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.
+###########################################################################
+
+
+##################################################
+# Data persistence Lua Scripts
+##################################################
+PROJECT_TARGET_ADD(test-files)
+
+       file(GLOB LUA_FILES "*.lua")
+       add_input_files("${LUA_FILES}")
+
+       SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
+       LABELS "TEST-DATA"
+       OUTPUT_NAME ${TARGET_NAME}
+       )
\ No newline at end of file
diff --git a/test/tests/persistence_BasicAPITest.lua b/test/tests/persistence_BasicAPITest.lua
new file mode 100644 (file)
index 0000000..6d65697
--- /dev/null
@@ -0,0 +1,71 @@
+--[[
+   Copyright (C) 2018 "IoT.bzh"
+   Author Frédéric Marec <frederic.marec@iot.bzh>
+
+   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.
+
+
+   NOTE: strict mode: every global variables should be prefixed by '_'
+--]]
+
+local testPrefix ="persistence_BasicAPITest_"
+
+-- This tests the 'insert' verb of the persistence API
+_AFT.testVerbStatusSuccess(testPrefix.."insert","persistence","insert", {key="TEST", value="myvalue"}, nil,
+  function()
+    _AFT.callVerb("persistence", "delete", {key="TEST"})
+  end)
+
+-- This tests the 'delete' verb of the persistence API
+_AFT.testVerbStatusSuccess(testPrefix.."delete","persistence","delete", {key="TEST"},
+  function()
+    _AFT.callVerb("persistence", "insert", {key="TEST", value="myvalue"})
+  end, nil)
+
+-- This tests the 'update' verb of the persistence API
+_AFT.testVerbStatusSuccess(testPrefix.."update","persistence","update", {key="TEST", value="test"},
+  function()
+    _AFT.callVerb("persistence", "insert", {key="TEST", value="myvalue"})
+  end,
+  function()
+    _AFT.callVerb("persistence", "delete", {key="TEST"})
+  end)
+
+-- This tests the 'read' verb of the persistence API
+_AFT.testVerbStatusSuccess(testPrefix.."read","persistence","read", {key="TEST"},
+  function()
+    _AFT.callVerb("persistence", "insert", {key="TEST", value="myvalue"})
+  end,
+  function()
+    _AFT.callVerb("persistence", "delete", {key="TEST"})
+  end)
+
+-- This tests the 'read' verb of the persistence API
+_AFT.testVerbStatusError(testPrefix.."read-unknow-value","persistence","read", {key="TEST"}, nil, nil)
+
+-- This tests the 'insert' verb of the persistence API
+_AFT.testVerbStatusError(testPrefix.."insert-without-value","persistence","insert", {key="TEST"}, nil,
+  function()
+    _AFT.callVerb("persistence", "delete", {key="TEST"})
+  end)
+
+-- This tests the 'delete' verb of the persistence API
+_AFT.testVerbStatusError(testPrefix.."delete-unknow-key","persistence","delete", {key="TEST"}, nil, nil)
+
+-- This tests the 'insert' verb of the persistence API
+_AFT.testVerbStatusError(testPrefix.."insert-with-anything","persistence","insert", {value="talenka"}, nil, nil)
+
+-- This tests the 'update' verb of the persistence API
+_AFT.testVerbStatusError(testPrefix.."update-unkwon-null-value","persistence","update", {key=null}, nil, nil)
+
+_AFT.exitAtEnd()