summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server/src/luaquerymapper.cc145
-rw-r--r--server/src/widgetvalue.cc42
-rw-r--r--tools/Makefile.am.test6
-rwxr-xr-xtools/test19
-rw-r--r--tools/test.h16
-rwxr-xr-xtools/testlist2
6 files changed, 126 insertions, 104 deletions
diff --git a/server/src/luaquerymapper.cc b/server/src/luaquerymapper.cc
index aefbabf..fcdce85 100644
--- a/server/src/luaquerymapper.cc
+++ b/server/src/luaquerymapper.cc
@@ -204,101 +204,66 @@ std::string LUAQueryMapper::automap(const std::string &name)
#ifdef TEST_LUAQUERYMAPPER
+//deps: exception.cc log.cc debug.cc
+//cflags: -I.. ${LUA_CFLAGS}
+//libs:${LUA_LIBS}
+#include <test.h>
-int main()
-{
- QueryResult res;
+TEST_BEGIN;
- time_t now = time(NULL);
+QueryResult res;
- res.groups["test"].timestamp = now;
- res.groups["test"].source = "test app";
- res.groups["test"].values["somevalue"] = "hello world";
- res.groups["test"].values["pi"] = "3.1416";
-
- printf("%s\n", loadresultstring(res).c_str());
-
- LUAQueryMapper mapper;
- mapper.addQueryResult(res);
-
- // Test simple value forwarding
- std::string luamap = "return test.somevalue.value, test.somevalue.timestamp, test.somevalue.source";
- Value value = mapper.map(luamap);
- printf("%s =>\n %s, %lu, %s\n", luamap.c_str(), value.value.c_str(), value.timestamp, value.source.c_str());
- if(value.value != "hello world" || value.timestamp != now || value.source != "test app")
- return 1;
-
- // Do some calculations
- luamap = "return 2 * tonumber(test.pi.value), test.pi.timestamp, test.pi.source";
- value = mapper.map(luamap);
- printf("%s =>\n %s, %lu, %s\n", luamap.c_str(), value.value.c_str(), value.timestamp, value.source.c_str());
- if(value.value != "6.2832" || value.timestamp != now || value.source != "test app")
- return 1;
-
- // Attempt to access nonexisting value (should throw an exception)
- try {
- luamap = "return test.somevalue2.value, test.somevalue2.timestamp, test.somevalue2.source";
- value = mapper.map(luamap);
- printf("%s =>\n %s, %lu, %s\n", luamap.c_str(), value.value.c_str(), value.timestamp, value.source.c_str());
- if(value.value != "hello world" || value.timestamp != now || value.source != "test app")
- return 1;
- } catch(Exception &e) {
- printf("ERROR: %s\n", e.what());
- goto onandon;
- }
- return 1;
- onandon:
-
- // Attempt to access nonexisting group (should throw an exception)
- try {
- luamap = "return test2.somevalue.value, test2.somevalue.timestamp, test2.somevalue.source";
- value = mapper.map(luamap);
- printf("%s =>\n %s, %lu, %s\n", luamap.c_str(), value.value.c_str(), value.timestamp, value.source.c_str());
- if(value.value != "hello world" || value.timestamp != now || value.source != "test app")
- return 1;
- } catch(Exception &e) {
- printf("ERROR: %s\n", e.what());
- goto stillonandon;
- }
- return 1;
- stillonandon:
+time_t now = time(NULL);
+
+res.groups["test"].timestamp = now;
+res.groups["test"].source = "test app";
+res.groups["test"].values["somevalue"] = "hello world";
+res.groups["test"].values["pi"] = "3.1416";
- // Switch order of return vars (should throw an exception)
- try {
- luamap = "return test.somevalue.source, test.somevalue.value, test.somevalue.timestamp";
- value = mapper.map(luamap);
- printf("%s =>\n %s, %lu, %s\n", luamap.c_str(), value.value.c_str(), value.timestamp, value.source.c_str());
- if(value.value != "hello world" || value.timestamp != now || value.source != "test app")
- return 1;
- } catch(Exception &e) {
- printf("ERROR: %s\n", e.what());
- goto onandonagain;
- }
- return 1;
- onandonagain:
-
- // Syntax error (should throw an exception)
- try {
- luamap = "this(is{] not() - a != legal lua program!]";
- value = mapper.map(luamap);
- printf("%s =>\n %s, %lu, %s\n", luamap.c_str(), value.value.c_str(), value.timestamp, value.source.c_str());
- if(value.value != "hello world" || value.timestamp != now || value.source != "test app")
- return 1;
- } catch(Exception &e) {
- printf("ERROR: %s\n", e.what());
- goto stillonandonagain;
- }
- return 1;
- stillonandonagain:
+//printf("%s\n", loadresultstring(res).c_str());
- // And finally test if we haven't broken enything while being hostile to the lua engine...
- luamap = "return test.somevalue.value, test.somevalue.timestamp, test.somevalue.source";
- value = mapper.map(luamap);
- printf("%s =>\n %s, %lu, %s\n", luamap.c_str(), value.value.c_str(), value.timestamp, value.source.c_str());
- if(value.value != "hello world" || value.timestamp != now || value.source != "test app")
- return 1;
+LUAQueryMapper mapper;
+mapper.addQueryResult(res);
- return 0;
-}
+// Test simple value forwarding
+std::string luamap = "return test.somevalue.value, test.somevalue.timestamp, test.somevalue.source";
+Value value = mapper.map(luamap);
+
+TEST_EQUAL_STR(value.value, "hello world", "Test value");
+TEST_EQUAL_INT(value.timestamp, now, "Test timestamp");
+TEST_EQUAL_STR(value.source, "test app", "Test source");
+
+// Do some calculations
+luamap = "return 2 * tonumber(test.pi.value), test.pi.timestamp, test.pi.source";
+value = mapper.map(luamap);
+
+TEST_EQUAL_STR(value.value, "6.2832", "Test value");
+TEST_EQUAL_INT(value.timestamp, now, "Test timestamp");
+TEST_EQUAL_STR(value.source, "test app", "Test source");
+
+// Attempt to access nonexisting value (should throw an exception)
+luamap = "return test.somevalue2.value, test.somevalue2.timestamp, test.somevalue2.source";
+TEST_EXCEPTION(mapper.map(luamap), Exception, "Throw exception");
+
+// Attempt to access nonexisting group (should throw an exception)
+luamap = "return test2.somevalue.value, test2.somevalue.timestamp, test2.somevalue.source";
+TEST_EXCEPTION(mapper.map(luamap), Exception, "Throw exception");
+
+// Switch order of return vars (should throw an exception)
+luamap = "return test.somevalue.source, test.somevalue.value, test.somevalue.timestamp";
+TEST_EXCEPTION(mapper.map(luamap), Exception, "Throw exception");
+
+// Syntax error (should throw an exception)
+luamap = "this(is{] not() - a != legal lua program!]";
+TEST_EXCEPTION(mapper.map(luamap), Exception, "Throw exception");
+
+// And finally test if we haven't broken enything while being hostile to the lua engine...
+luamap = "return test.somevalue.value, test.somevalue.timestamp, test.somevalue.source";
+TEST_NOEXCEPTION(mapper.map(luamap), "Throw no exception");
+TEST_EQUAL_STR(value.value, "6.2832", "Test value");
+TEST_EQUAL_INT(value.timestamp, now, "Test timestamp");
+TEST_EQUAL_STR(value.source, "test app", "Test source");
+
+TEST_END;
#endif/*TEST_LUAQUERYMAPPER*/
diff --git a/server/src/widgetvalue.cc b/server/src/widgetvalue.cc
index 053eecc..3b68e8e 100644
--- a/server/src/widgetvalue.cc
+++ b/server/src/widgetvalue.cc
@@ -40,8 +40,10 @@ static bool getMapValue(Value &value,
maps_t::iterator li = maps.begin();
while(li != maps.end()) {
Map &_map = *li;
- if(_map.attributes["name"] == map) {
- luamap = _map.attributes["lua"];
+ if(_map.attributes.find("name") != _map.attributes.end() &&
+ _map.attributes["name"] == map) {
+ if(_map.attributes.find("lua") != _map.attributes.end())
+ luamap = _map.attributes["lua"];
}
li++;
}
@@ -145,8 +147,7 @@ bool getValue(Value &value,
TEST_BEGIN;
-pracro_debug_init();
-pracro_debug_parse("+all");
+debug_parse("+all");
time_t now = time(NULL);
@@ -349,6 +350,39 @@ time_t now = time(NULL);
TEST_EQUAL_STR(value.source, v.source, "Got the right source?");
}
+{
+ Conf::db_max_ttl = 1000;
+ Conf::pentominos_max_ttl = 500;
+
+ Value value;
+
+ attr_t attr;
+ attr["name"] = "foo";
+ attr["value"] = "hello";
+ attr["map"] = "bar";
+
+ maps_t maps;
+ Map m;
+ char tbuf[32]; sprintf(tbuf, "%ld", now - 1);
+ std::string val = "le valu";
+ m.attributes["name"] = "bar";
+ m.attributes["lua"] = "return '"+val+"', "+tbuf+", 'artefact'";
+ maps.push_back(m);
+ LUAQueryMapper mapper;
+
+ Values values;
+ Value v;
+ v.value = "world";
+ v.source = "pracro";
+ v.timestamp = now ;
+ values["foo"] = v;
+
+ TEST_TRUE(getValue(value, attr, maps, mapper, values), "Got value?");
+ TEST_EQUAL_STR(value.value, v.value, "Got the right value?");
+ TEST_EQUAL_INT(value.timestamp, v.timestamp, "Got the right timestamp?");
+ TEST_EQUAL_STR(value.source, v.source, "Got the right source?");
+}
+
TEST_END;
#endif/*TEST_WIDGETVALUE*/
diff --git a/tools/Makefile.am.test b/tools/Makefile.am.test
index 5c5e8c7..77ca17e 100644
--- a/tools/Makefile.am.test
+++ b/tools/Makefile.am.test
@@ -8,6 +8,12 @@ test: Makefile.am.test $(TESTFILES)
test_clean:
rm -f $(TESTFILES) $(TESTLOGS)
+test_report:
+ lcov --directory . --capture --output-file app.info
+ genhtml -o lcov app.info
+
+test_all: test_clean test test_report
+
TESTLOGS = `for F in ${TESTFILES}; do echo $$F.log; done`
CLEANFILES = $(TESTFILES) $(TESTLOGS) Makefile.am.test *~
diff --git a/tools/test b/tools/test
index a52609d..1ebf87d 100755
--- a/tools/test
+++ b/tools/test
@@ -7,13 +7,30 @@ DEFINE=TEST_$UPPER
SCRIPTDIR=`dirname $0`
-COMPILE="g++ -DHAVE_CONFIG_H -I$SCRIPTDIR -g -Wall -Werror -D$DEFINE -o $OUTPUT $*"
+INFILE=$1
+shift
+OBJFILES=""
+for f in $TEST_DEPS
+do
+ of=`echo -n $f | cut -d'.' -f1`.o;
+ OBJFILES="$OBJFILES $of"
+done
+
+COMMON_FLAGS="-DHAVE_CONFIG_H -I$SCRIPTDIR -g -D$DEFINE $TEST_LIBS $TEST_CFLAGS"
+CLEAN="rm -f $OBJFILES"
+PRECOMPILE="g++ -c $TEST_DEPS $COMMON_FLAGS"
+COMPILE="g++ -fprofile-arcs -ftest-coverage -Wall -Werror $COMMON_FLAGS -o $OUTPUT $INFILE $OBJFILES"
echo -e "\033[0;2mTesting $TEST:"
echo Testing $TEST: > $OUTPUT.log
echo -n "* Compiling $TEST test"
echo Compiling $TEST test: > $OUTPUT.log
+
+echo ${CLEAN} >> $OUTPUT.log
+${CLEAN} >> ${OUTPUT}.log 2>&1
+echo ${PRECOMPILE} >> $OUTPUT.log
+${PRECOMPILE} >> ${OUTPUT}.log 2>&1
echo ${COMPILE} >> $OUTPUT.log
if ${COMPILE} >> ${OUTPUT}.log 2>&1; then
diff --git a/tools/test.h b/tools/test.h
index f470162..4770a1e 100644
--- a/tools/test.h
+++ b/tools/test.h
@@ -109,11 +109,11 @@
#define TEST_EQUAL_STR(x, y, fmt...) { \
TEST_BASE(fmt); \
- std::string s1 = x; \
- std::string s2 = y; \
+ std::string __s1 = x; \
+ std::string __s2 = y; \
fprintf(stderr, "Comparing: \"%s\" == \"%s\"\n", \
- s1.c_str(), s2.c_str()); \
- if(s1 == s2) { \
+ __s1.c_str(), __s2.c_str()); \
+ if(__s1 == __s2) { \
TEST_OK(#x" and "#y" are equal."); \
} else { \
TEST_FAIL(#x" and "#y" are not equal."); \
@@ -122,11 +122,11 @@
#define TEST_NOTEQUAL_STR(x, y, fmt...) { \
TEST_BASE(fmt); \
- std::string s1 = x; \
- std::string s2 = y; \
+ std::string __s1 = x; \
+ std::string __s2 = y; \
fprintf(stderr, "Comparing: \"%s\" != \"%s\"\n", \
- s1.c_str(), s2.c_str()); \
- if(s1 != s2) { \
+ __s1.c_str(), __s2.c_str()); \
+ if(__s1 != __s2) { \
TEST_OK(#x" and "#y" not are equal."); \
} else { \
TEST_FAIL(#x" and "#y" are equal."); \
diff --git a/tools/testlist b/tools/testlist
index c42824f..01a48e2 100755
--- a/tools/testlist
+++ b/tools/testlist
@@ -24,7 +24,7 @@ do
CFLAGS=`cat $FILE | grep "cflags:" | cut -d':' -f2`
TEST=test_$NAME
echo "$TEST: $FILE $DEPS"
- echo -e "\t@${SCRIPTDIR}/test $FILE $DEPS $CFLAGS $LIBS"
+ echo -e "\t@TEST_DEPS=\"$DEPS\" TEST_CFLAGS=\"$CFLAGS\" TEST_LIBS=\"$LIBS\" ${SCRIPTDIR}/test $FILE"
echo ""
done < tmp