diff --git a/src/stream/Makefile.am b/src/stream/Makefile.am index 946bd5b..bf8134e 100644 --- a/src/stream/Makefile.am +++ b/src/stream/Makefile.am @@ -1,8 +1,8 @@ ACLOCAL_AMFLAGS = -I m4 STREAM = stream.c read.c write.c -IFACE = interface/stream_reader.c \ - interface/stream_writer.c +IFACE = interface/reader.c \ + interface/writer.c noinst_LIBRARIES = libstream.a diff --git a/src/stream/interface/stream_reader.c b/src/stream/interface/reader.c similarity index 100% rename from src/stream/interface/stream_reader.c rename to src/stream/interface/reader.c diff --git a/src/stream/interface/stream_writer.c b/src/stream/interface/writer.c similarity index 100% rename from src/stream/interface/stream_writer.c rename to src/stream/interface/writer.c diff --git a/tests/Makefile.am b/tests/Makefile.am index 2736f23..c4c28a9 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,8 +1,8 @@ ACLOCAL_AMFLAGS = -I m4 TESTS_ENVIRONMENT = valgrind --error-exitcode=123 --leak-check=full --quiet -TESTS = classTest loggerTest socketTest# serverTest -check_PROGRAMS = classTest loggerTest socketTest# serverTest +TESTS = classTest loggerTest socketTest serverTest +check_PROGRAMS = classTest loggerTest socketTest serverTest COMMON = runtest.c CLASS = $(COMMON) \ @@ -23,8 +23,23 @@ SOCKET = $(LOGGER) \ ../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 +STREAM_OBJ = ./stream/stream.o \ + ./stream/read.o \ + ./stream/write.o \ + ./stream/reader.o \ + ./stream/writer.o + +SERVER = $(SOCKET) \ + ../src/server/server.c \ + ../src/server/run.c \ + ../src/server/close_conn.c \ + ../src/server/handle_accept.c \ + ../src/server/poll.c \ + ../src/server/read.c \ + ../src/server/write.c \ + ../src/utils/signalHandling.c \ + ../src/utils/memory.c \ + mock/mock_worker.c classTest_SOURCES = $(CLASS) classTest.c classTest_CFLAGS = -Wall -ggdb -O0 -fprofile-arcs -ftest-coverage -I ../include -I .. -I . @@ -38,9 +53,16 @@ socketTest_SOURCES = $(SOCKET) socketTest.c socketTest_CFLAGS = -Wall -ggdb -O0 -fprofile-arcs -ftest-coverage -I ../include -I .. -I . socketTest_LDFLAGS = -lgcov -#serverTest_SOURCES = $(SERVER) serverTest.c -#serverTest_CFLAGS = -Wall -ggdb -O0 -I ../include -I .. -I . +serverTest_SOURCES = $(SERVER) serverTest.c +serverTest_CFLAGS = -Wall -ggdb -O0 -fprofile-arcs -ftest-coverage -I ../include -I .. -I . +serverTest_LDFLAGS = $(STREAM_OBJ) -lgcov EXTRA_DIST = runtest.h mock/mock_class.h mock/mock_logger.h -check-build: $(check_PROGRAMS) +.PHONY: stream +stream: + $(MAKE) -C stream $(AM_MAKEFLAGS) + +check-build: stream $(check_PROGRAMS) + +SUBDIRS = stream diff --git a/tests/loggerTest b/tests/loggerTest index 2fdb4ac..12851ef 100755 Binary files a/tests/loggerTest and b/tests/loggerTest differ diff --git a/tests/mock/mock_worker.c b/tests/mock/mock_worker.c new file mode 100644 index 0000000..b051e4b --- /dev/null +++ b/tests/mock/mock_worker.c @@ -0,0 +1,68 @@ +#include +#include +#include +#include + +#include "class.h" +#include "stream.h" +#include "mock_worker.h" + +static +int +mockWorkerCtor(void * _this, va_list * params) +{ + MockWorker this = _this; + + this->rbuf = &(this->_rbuf[0]); + this->wbuf = &(this->_wbuf[0]); + + return 0; +} + +static +void +mockWorkerDtor(void * _this) +{ +} + +static +void +mockWorkerClone(void * _this, void * _base) +{ + MockWorker this = _this; + MockWorker base = _base; + + this->rbuf = &(base->_rbuf[0]); + this->wbuf = &(base->_wbuf[0]); +} + +static +ssize_t +mockWorkerRead(void * _this, Stream st) +{ + MockWorker this = _this; + size_t size; + + size = read((st->handle).fd, this->rbuf, 1024); + + return size; +} + +static +ssize_t +mockWorkerWrite(void * _this, Stream st) +{ + return 0; +} + +INIT_IFACE(Class, mockWorkerCtor, mockWorkerDtor, mockWorkerClone); +INIT_IFACE(StreamReader, mockWorkerRead); +INIT_IFACE(StreamWriter, mockWorkerWrite); +CREATE_CLASS( + MockWorker, + NULL, + IFACE(Class), + IFACE(StreamReader), + IFACE(StreamWriter)); + +// vim: set ts=4 sw=4: diff --git a/tests/mock/mock_worker.h b/tests/mock/mock_worker.h new file mode 100644 index 0000000..e11200e --- /dev/null +++ b/tests/mock/mock_worker.h @@ -0,0 +1,14 @@ +#ifndef __MOCK_MOCK_WORKER_H__ +#define __MOCK_MOCK_WORKER_H__ +#endif // __MOCK_MOCK_WORKER_H__ + +#include "class.h" + +CLASS(MockWorker) { + char _rbuf[1024]; + char _wbuf[1024]; + char * rbuf; + char * wbuf; +}; + +// vim: set ts=4 sw=4: diff --git a/tests/serverTest.c b/tests/serverTest.c index 3eae940..83bbd29 100644 --- a/tests/serverTest.c +++ b/tests/serverTest.c @@ -3,61 +3,44 @@ #include #include #include +#include #include "runtest.h" #include "logger.h" -#include "cclass.h" +#include "class.h" #include "server.h" -#include "signalHandling.h" +#include "utils/signalHandling.h" +#include "mock/mock_logger.h" +#include "mock/mock_worker.h" #define TEST_PORT 11212 #define TEST_DATA "test" -int level = -1; -char msg[1024]; char buffer[1025]; -static void -read_hook(const char * _buffer, size_t size) -{ - memset(buffer, 0, 1025); - - if (NULL != _buffer) { - strncpy(buffer, _buffer, 1024>size? size : 1024); - } - - doShutdown = 1; -} - -static void -logfnct_mock(int _level, const char * _msg) -{ - level = _level; - strncpy(msg, _msg, 1023); -} - const char testname[] = "serverTest"; -LOGGER logger = NULL; -SERVER server = NULL; + +MockLogger logger = NULL; +MockWorker worker = NULL; +Server server = NULL; static int __setUp() { - logger = new(LOGGER, NULL); - logger_add(logger, logfnct_mock); + logger = new(MockLogger, LOGGER_DEBUG); + worker = new(MockWorker); - server = new(SERVER, logger, TEST_PORT, SOMAXCONN); + server = new(Server, logger, worker, TEST_PORT, SOMAXCONN); - ASSERT_INSTANCE_OF(SERVER, server); - ASSERT_INSTANCE_OF(LOGGER, server->logger); - ASSERT_INSTANCE_OF(SOCK, server->sock); + ASSERT_INSTANCE_OF(Server, server); + ASSERT_INSTANCE_OF(MockLogger, server->logger); + ASSERT_INSTANCE_OF(MockWorker, server->worker); + ASSERT_INSTANCE_OF(Sock, server->sock); ASSERT_EQUAL(TEST_PORT, server->sock->port); - server->read_hook = read_hook; - return TEST_OK; } int (* const setUp)() = __setUp; @@ -66,16 +49,19 @@ static int __tearDown() { - level = -1; - if (NULL != server) { ASSERT_OBJECT(server); - delete(&server); + delete(server); + } + + if (NULL != worker) { + ASSERT_OBJECT(worker); + delete(worker); } if (NULL != logger) { ASSERT_OBJECT(logger); - delete(&logger); + delete(logger); } return TEST_OK; @@ -86,19 +72,23 @@ static int testDummy() { - SOCK con; - pid_t pid; + Sock con; + pid_t pid, ppid; + char addr[16]; - pid = fork(); + ppid = getpid(); + pid = fork(); switch(pid) { case 0: - con = new(SOCK, logger, TEST_PORT); + con = new(Sock, logger, TEST_PORT); sleep(1); - sock_connect(con, "127.0.0.1"); + socketConnect(con, "127.0.0.1", &addr); write(con->handle, TEST_DATA, strlen(TEST_DATA)+1); - delete(&con); + sleep(1); + delete(con); __tearDown(); + kill(ppid, SIGINT); exit(EXIT_SUCCESS); case -1: @@ -106,10 +96,10 @@ testDummy() default: init_signals(); - server_run(server); + serverRun(server); } - ASSERT_STRING_EQUAL(TEST_DATA, buffer); + ASSERT_STRING_EQUAL(TEST_DATA, worker->rbuf); return TEST_OK; }