From 75106d2a6253f0e29e2e331d7aeba307aeac937c Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Mon, 26 Mar 2012 13:16:45 +0200 Subject: [PATCH] started tests and coverage report. --- .gitignore | 2 +- Makefile.am.coverage | 4 +- configure.ac | 3 +- include/class/class.h | 26 ++++++------- m4/gcov.m4 | 4 +- src/http/Makefile.am | 1 + src/logger/Makefile.am | 1 + tests/Makefile.am | 27 +++++++------ tests/{cclassTest.c => classTest.c} | 58 +++++----------------------- tests/mock/{class.c => mock_class.c} | 49 +++++++++++------------ tests/mock/{class.h => mock_class.h} | 24 +++++------- tests/runtest.c | 18 ++++++--- tests/runtest.h | 1 + 13 files changed, 93 insertions(+), 125 deletions(-) rename tests/{cclassTest.c => classTest.c} (61%) rename tests/mock/{class.c => mock_class.c} (67%) rename tests/mock/{class.h => mock_class.h} (78%) diff --git a/.gitignore b/.gitignore index 51bbb2f..edf81c9 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,4 @@ coveragereport/ /missing stamp-h1 src/taskrambler - +/tests/classTest diff --git a/Makefile.am.coverage b/Makefile.am.coverage index af82e7d..72e718b 100644 --- a/Makefile.am.coverage +++ b/Makefile.am.coverage @@ -1,7 +1,7 @@ # Coverage targets -if HAVE_GCOV +#if HAVE_GCOV .PHONY: clean-gcda clean-gcda: @@ -24,4 +24,4 @@ if HAVE_GCOV clean-local: clean-coverage-html -endif # HAVE_GCOV +#endif # HAVE_GCOV diff --git a/configure.ac b/configure.ac index dd22ab9..39e4eb0 100644 --- a/configure.ac +++ b/configure.ac @@ -4,7 +4,8 @@ AC_PREREQ([2.68]) AC_INIT([taskrambler], [0.0.1], [Georg Hopp ]) LT_INIT -AM_INIT_AUTOMAKE([subdir-objects]) +AM_INIT_AUTOMAKE +#AM_INIT_AUTOMAKE([subdir-objects]) AM_SILENT_RULES([yes]) AC_COPYRIGHT([Copyright © 2012 Georg Hopp]) AC_REVISION([$Revision: 0.01 $]) diff --git a/include/class/class.h b/include/class/class.h index 1b6fd79..4a8146c 100644 --- a/include/class/class.h +++ b/include/class/class.h @@ -50,19 +50,19 @@ const char _[sizeof(struct c_##parent)] #define _NULL NULL -#define CREATE_CLASS(name,_parent,...) \ - static struct class c_##name; \ - static class_ptr _classInit_(void) { \ - c_##name.parent = _##_parent; \ - c_##name.init = NULL; \ - return &c_##name; \ - } \ - static struct class c_##name = { \ - CLASS_MAGIC, \ - NULL, \ - sizeof(struct c_##name), \ - _classInit_, \ - INIT_IFACE_IMPL(__VA_ARGS__) \ +#define CREATE_CLASS(name,_parent,...) \ + static struct class c_##name; \ + static class_ptr _classInit##name##_(void) { \ + c_##name.parent = _##_parent; \ + c_##name.init = NULL; \ + return &c_##name; \ + } \ + static struct class c_##name = { \ + CLASS_MAGIC, \ + NULL, \ + sizeof(struct c_##name), \ + _classInit##name##_, \ + INIT_IFACE_IMPL(__VA_ARGS__) \ }; struct class * const _##name = &c_##name #define INIT_CLASS(class) ((class)->init? (class)->init() : (class)) diff --git a/m4/gcov.m4 b/m4/gcov.m4 index d34f1e9..77dffe8 100644 --- a/m4/gcov.m4 +++ b/m4/gcov.m4 @@ -14,7 +14,7 @@ AC_DEFUN([AC_TDD_GCOV], [use_gcov=$enableval], [use_gcov=no]) AM_CONDITIONAL(HAVE_GCOV, test "x$use_gcov" = "xyes") - if test "x$use_gcov" = "xyes"; then + # if test "x$use_gcov" = "xyes"; then # we need gcc: if test "$GCC" != "yes"; then AC_MSG_ERROR([GCC is required for --enable-gcov]) @@ -72,6 +72,6 @@ AC_DEFUN([AC_TDD_GCOV], COVERAGE_CXXFLAGS="-O0 -fprofile-arcs -ftest-coverage" COVERAGE_LDFLAGS="-lgcov" -fi +#fi ]) # AC_TDD_GCOV diff --git a/src/http/Makefile.am b/src/http/Makefile.am index a60d27f..d6c64b1 100644 --- a/src/http/Makefile.am +++ b/src/http/Makefile.am @@ -1,4 +1,5 @@ ACLOCAL_AMFLAGS = -I m4 +AUTOMAKE_OPTIONS = subdir-objects MSG = message.c \ message/has_keep_alive.c \ diff --git a/src/logger/Makefile.am b/src/logger/Makefile.am index 6e4f2cb..dc433f1 100644 --- a/src/logger/Makefile.am +++ b/src/logger/Makefile.am @@ -1,4 +1,5 @@ ACLOCAL_AMFLAGS = -I m4 +AUTOMAKE_OPTIONS = subdir-objects noinst_LIBRARIES = liblogger.a diff --git a/tests/Makefile.am b/tests/Makefile.am index c3138ae..1bdee2a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,21 +1,26 @@ ACLOCAL_AMFLAGS = -I m4 -#TESTS_ENVIRONMENT = valgrind --error-exitcode=123 --leak-check=full --quiet -#TESTS = cclassTest loggerTest socketTest serverTest -#check_PROGRAMS = cclassTest loggerTest socketTest serverTest -# -#COMMON = runtest.c ../src/interface/class.c -#CCLASS = $(COMMON) mock/class.c +TESTS_ENVIRONMENT = valgrind --error-exitcode=123 --leak-check=full --quiet +TESTS = classTest# loggerTest socketTest serverTest +check_PROGRAMS = classTest# loggerTest socketTest serverTest + +COMMON = runtest.c +CLASS = $(COMMON) \ + ../src/class/interface.c \ + ../src/class/interface/class.c \ + mock/mock_class.c + #LOGGER = $(COMMON) ../src/logger.c ../src/interface/logger.c \ # ../src/logger/stderr.c ../src/logger/syslog.c #SOCKET = $(LOGGER) ../src/socket.c ../src/socket/listen.c \ # ../src/socket/accept.c ../src/socket/connect.c #SERVER = $(SOCKET) ../src/server.c ../src/server/run.c \ # ../src/server/close_conn.c ../src/utils/signalHandling.c -# -#cclassTest_SOURCES = $(CCLASS) cclassTest.c -#cclassTest_CFLAGS = -Wall -ggdb -O0 -finline-functions -I ../include -I .. -I . -# + +classTest_SOURCES = $(CLASS) classTest.c +classTest_CFLAGS = -Wall -ggdb -O0 -fprofile-arcs -ftest-coverage -I ../include -I .. -I . +classTest_LDFLAGS = -lgcov + #loggerTest_SOURCES = $(LOGGER) loggerTest.c #loggerTest_CFLAGS = -Wall -ggdb -O0 -I ../include -I .. -I . # @@ -25,4 +30,4 @@ ACLOCAL_AMFLAGS = -I m4 #serverTest_SOURCES = $(SERVER) serverTest.c #serverTest_CFLAGS = -Wall -ggdb -O0 -I ../include -I .. -I . -EXTRA_DIST = runtest.h mock/class.h +EXTRA_DIST = runtest.h mock/mock_class.h diff --git a/tests/cclassTest.c b/tests/classTest.c similarity index 61% rename from tests/cclassTest.c rename to tests/classTest.c index 45f92a0..a16b757 100644 --- a/tests/cclassTest.c +++ b/tests/classTest.c @@ -18,15 +18,15 @@ */ #include #include -#include #include "runtest.h" -#include "mock/class.h" -#include "cclass.h" +#include "mock/mock_class.h" + +#include "class.h" const char testname[] = "cclassTest"; -MOCK_CLASS mock = NULL; +MockClass mock = NULL; static int @@ -45,7 +45,7 @@ __tearDown() { if (NULL != mock) { ASSERT_OBJECT(mock); - delete(&mock); + delete(mock); } return TEST_OK; @@ -56,27 +56,11 @@ static int testNew(void) { - mock = new(MOCK_CLASS, 123); + mock = new(MockClass, 123); ASSERT_OBJECT_NOT_NULL(mock); ASSERT_EQUAL(1, _called); - ASSERT_EQUAL(123, mock_class_getValue(mock)); - - return TEST_OK; -} - -static -int -testNewFromJson(void) -{ - struct json_object * json = json_object_new_int(123); - - mock = newFromJson(MOCK_CLASS, json); - json_object_put(json); - - ASSERT_OBJECT_NOT_NULL(mock); - ASSERT_EQUAL(1, _called); - ASSERT_EQUAL(123, mock_class_getValue(mock)); + ASSERT_EQUAL(123, mockClassGetValue(mock)); return TEST_OK; } @@ -85,12 +69,12 @@ static int testDelete(void) { - mock = new(MOCK_CLASS, 123); + mock = new(MockClass, 123); ASSERT_NOT_NULL(mock); _reset(); - delete(&mock); + delete(mock); ASSERT_NULL(mock); ASSERT_EQUAL(1, _called); @@ -98,33 +82,9 @@ testDelete(void) return TEST_OK; } -static -int -testToJson(void) -{ - struct json_object * json = NULL; - mock = new(MOCK_CLASS, 123); - int value; - - _reset(); - toJson(mock, &json); - - ASSERT_NOT_NULL(json); - - value = json_object_get_int(json); - json_object_put(json); - - ASSERT_EQUAL(123, value); - ASSERT_EQUAL(1, _called); - - return TEST_OK; -} - const testfunc tests[] = { testNew, - testNewFromJson, testDelete, - testToJson }; const size_t count = FUNCS_COUNT(tests); diff --git a/tests/mock/class.c b/tests/mock/mock_class.c similarity index 67% rename from tests/mock/class.c rename to tests/mock/mock_class.c index 8a9da0a..f603d94 100644 --- a/tests/mock/class.c +++ b/tests/mock/mock_class.c @@ -18,54 +18,55 @@ */ #include -#include +#include -#include "cclass.h" #include "class.h" +#include "mock_class.h" char _called; -INIT_CLASS(MOCK_CLASS); - -__construct(MOCK_CLASS) +void +_reset() { - _called = 1; - this->value = va_arg(* params, int); + _called = 0; } -__jsonConst(MOCK_CLASS) +static +inline +int +mockCtor(void * _this, va_list * params) { + MockClass this = _this; + _called = 1; - assert(json_type_int == json_object_get_type(json)); + this->value = va_arg(* params, int); - this->value = json_object_get_int(json); + return 0; } -__clear(MOCK_CLASS) {} - -__destruct(MOCK_CLASS) +static +inline +void +mockDtor(void * _this) { _called = 1; } -__toJson(MOCK_CLASS) -{ - *json = json_object_new_int(this->value); - _called = 1; -} +INIT_IFACE(Class, mockCtor, mockDtor, NULL); +CREATE_CLASS(MockClass, NULL, IFACE(Class)); /** * ~~~ method implementations ~~~~~~~~ */ int -mock_class_getValue(MOCK_CLASS this) +mockClassGetValue(MockClass this) { return this->value; } void -mock_class_setValue(MOCK_CLASS this, int value) +mockClassSetValue(MockClass this, int value) { this->value = value; } @@ -76,13 +77,7 @@ mock_class_setValue(MOCK_CLASS this, int value) void * getConstruct() { - return __construct; -} - -void * -getJsonConst() -{ - return __jsonConst; + return mockCtor; } // vim: set et ts=4 sw=4: diff --git a/tests/mock/class.h b/tests/mock/mock_class.h similarity index 78% rename from tests/mock/class.h rename to tests/mock/mock_class.h index 83c810c..2c2b9f6 100644 --- a/tests/mock/class.h +++ b/tests/mock/mock_class.h @@ -20,25 +20,20 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#ifndef __MOCK_CLASS_H__ -#define __MOCK_CLASS_H__ +#ifndef __MOCK_MOCK_CLASS_H__ +#define __MOCK_MOCK_CLASS_H__ -#include "cclass.h" +#include "class.h" extern char _called; #ifndef _RESET #define _RESET -void -inline -_reset() -{ - _called = 0; -} -#endif//_RESET +void _reset(); +#endif // _RESET -CLASS(MOCK_CLASS) { +CLASS(MockClass) { int value; }; @@ -46,8 +41,9 @@ CLASS(MOCK_CLASS) { * ~~~ method declarations ~~~~~~~~ */ -int mock_class_getValue(MOCK_CLASS this); -void mock_class_setValue(MOCK_CLASS this, int value); +int mockClassGetValue(MockClass this); +void mockClassSetValue(MockClass this, int value); + +#endif//__MOCK_MOCK_CLASS_H__ -#endif//__MOCK_CLASS_H__ // vim: set et ts=4 sw=4: diff --git a/tests/runtest.c b/tests/runtest.c index b363cc8..ed85345 100644 --- a/tests/runtest.c +++ b/tests/runtest.c @@ -22,7 +22,7 @@ #include #include "runtest.h" -#include "cclass.h" +#include "class.h" #define TEST_OK_CHAR '.' @@ -37,15 +37,23 @@ const char results[3] = { }; int -isObjectNull(void * _object) +isObject(void * object) { - const CCLASS * class = _object - sizeof(CCLASS); + class_ptr class = GET_CLASS(object); - if (! isObject(_object)) { + return (class->magic == CLASS_MAGIC); +} + +int +isObjectNull(void * object) +{ + class_ptr class = GET_CLASS(object); + + if (! isObject(object)) { return 0; } - return isMemNull(_object, (*class)->size); + return isMemNull(object, class->object_size); } int diff --git a/tests/runtest.h b/tests/runtest.h index e62e562..8245172 100644 --- a/tests/runtest.h +++ b/tests/runtest.h @@ -130,6 +130,7 @@ extern int (* const tearDown)(); int isMemNull(void * _mem, size_t size); int isObjectNull(void * _object); +int isObject(void * _object); #endif//__RUNTEST_h__ // vim: set et ts=4 sw=4: