diff options
-rw-r--r-- | README.md | 44 | ||||
m--------- | conf.d/app-templates | 0 | ||||
-rwxr-xr-x | conf.d/autobuild/agl/autobuild | 67 | ||||
-rwxr-xr-x | conf.d/autobuild/linux/autobuild | 67 | ||||
-rw-r--r-- | test/CMakeLists.txt | 27 | ||||
-rwxr-xr-x | test/afb-test.sh | 29 | ||||
-rw-r--r-- | test/etc/CMakeLists.txt | 31 | ||||
-rw-r--r-- | test/etc/aft-persistence-test.json | 22 | ||||
-rw-r--r-- | test/fixtures/CMakeLists.txt | 30 | ||||
-rw-r--r-- | test/fixtures/test1.json | 5 | ||||
-rw-r--r-- | test/tests/CMakeLists.txt | 31 | ||||
-rw-r--r-- | test/tests/persistence_BasicAPITest.lua | 71 |
12 files changed, 409 insertions, 15 deletions
@@ -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 diff --git a/conf.d/app-templates b/conf.d/app-templates -Subproject ee5d60f9d169d959cca9dc24cfc3776ed06c163 +Subproject 3dc85ecc9693a3a4af6d1143507f56b6800d523 diff --git a/conf.d/autobuild/agl/autobuild b/conf.d/autobuild/agl/autobuild new file mode 100755 index 0000000..83097ab --- /dev/null +++ b/conf.d/autobuild/agl/autobuild @@ -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 index 0000000..83097ab --- /dev/null +++ b/conf.d/autobuild/linux/autobuild @@ -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 index 0000000..71a121a --- /dev/null +++ b/test/CMakeLists.txt @@ -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 index 0000000..38c46ff --- /dev/null +++ b/test/afb-test.sh @@ -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 index 0000000..1ee805b --- /dev/null +++ b/test/etc/CMakeLists.txt @@ -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 index 0000000..9e5839c --- /dev/null +++ b/test/etc/aft-persistence-test.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-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 index 0000000..e7864b2 --- /dev/null +++ b/test/fixtures/CMakeLists.txt @@ -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 index 0000000..d0b3a8f --- /dev/null +++ b/test/fixtures/test1.json @@ -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 index 0000000..c03658a --- /dev/null +++ b/test/tests/CMakeLists.txt @@ -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 index 0000000..6d65697 --- /dev/null +++ b/test/tests/persistence_BasicAPITest.lua @@ -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() |