summaryrefslogtreecommitdiffstats
path: root/test-widget
diff options
context:
space:
mode:
authorRomain Forlot <romain.forlot@iot.bzh>2018-07-31 15:41:41 +0200
committerRomain Forlot <romain.forlot@iot.bzh>2018-10-15 18:22:48 +0200
commit6b119a365b6c04279104f123456ed841b2ce987f (patch)
treeedcb2ecc1d4ce256455d34ec431aac39de6485ea /test-widget
parent48d3aa53006303379e455e8c56f7f1670e06270f (diff)
Create a test widget
Create a test widget in addition of the normal one when you use any build type except of RELEASE. This widget will only provide the test files (configuration + test + fixtures ...). It joins the test framework binding to your binding or app then you only have to access to your defined test API and launch the tests. The entry point is a bash script which is in charge to launch all tests it finds. Change-Id: I8f4a670f17fd4e4319c53a861074fb5e10b63aad Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'test-widget')
-rw-r--r--test-widget/launcher.sh.in60
-rw-r--r--test-widget/test-config.xml.in25
2 files changed, 85 insertions, 0 deletions
diff --git a/test-widget/launcher.sh.in b/test-widget/launcher.sh.in
new file mode 100644
index 0000000..601e88a
--- /dev/null
+++ b/test-widget/launcher.sh.in
@@ -0,0 +1,60 @@
+#!/bin/bash -x
+
+###########################################################################
+# Copyright (C) 2017, 2018 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.
+###########################################################################
+
+PORT=$1
+TOKEN=$2
+
+# Research the Api name used
+CFGFILE=$(find ${AFM_APP_INSTALL_DIR} -name "*json" -print0 | head -n1)
+API=$(grep '\"api\"' ${CFGFILE} | cut -d'"' -f4)
+
+AFBCLIENTIN=$(mktemp -u)
+AFBCLIENTOUT=$(mktemp -u)
+mkfifo $AFBCLIENTIN
+mkfifo $AFBCLIENTOUT
+
+declare -a testVerb
+
+if [[ $(jq '.testVerb|type' $CFGFILE) == "array" ]]
+then
+ testVerbLength=$(jq '.testVerb | length')
+ for (( idx=0; idx<testVerbLength; idx++ )) do
+ testVerb[$idx]=$(jq -r ".testVerb[$idx].uid" ${CFGFILE})
+ done
+else
+ testVerb[0]=$(jq -r ".testVerb.uid" ${CFGFILE})
+fi
+
+tail -f $AFBCLIENTIN | afb-client-demo ws://localhost:${PORT}/api?token=${TOKEN} > $AFBCLIENTOUT 2>&1 &
+CLIENTPID=$!
+
+testVerbLength=${#testVerb[@]}
+for (( idx=0; idx<testVerbLength; idx++ )) do
+ echo "$API ${testVerb[$idx]}" > $AFBCLIENTIN
+done
+
+while read -r line
+do
+ [ "$(echo "${line}" | grep -E 'Ran [[:digit]]+ tests in')" ] && break
+done < $AFBCLIENTOUT
+
+rm -f $AFBCLIENTIN
+rm -f $AFBCLIENTOUT
+kill $CLIENTPID
diff --git a/test-widget/test-config.xml.in b/test-widget/test-config.xml.in
new file mode 100644
index 0000000..3252c4b
--- /dev/null
+++ b/test-widget/test-config.xml.in
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" id="@PROJECT_NAME@-test" version="@PROJECT_VERSION@">
+ <name>@PROJECT_NAME@-test</name>
+ <icon src="@PROJECT_ICON@"/>
+ <content src="bin/launcher" type="application/vnd.agl.native"/>
+ <description>Supplementary widget used to launch tests for the project @PROJECT_NAME@</description>
+ <author>Romain Forlot &lt;romain.forlot@iot.bzh&gt;</author>
+ <license>APL2.0</license>
+
+ <feature name="urn:AGL:widget:required-binding">
+ <param name="aft" value="auto" />
+ </feature>
+
+ <feature name="urn:AGL:widget:required-api">
+ <param name="@API_NAME@" value="auto" />
+ </feature>
+
+ <feature name="urn:AGL:widget:required-permission">
+ <param name="urn:AGL:permission:test" value="required" />
+ </feature>
+
+ <feature name="urn:AGL:widget:file-properties">
+ <param name="bin/launcher" value="executable" />
+ </feature>
+</widget>