Browse Source

added first tests for server class

release0.1.5
Georg Hopp 14 years ago
parent
commit
0936b08b7e
  1. 4
      src/stream/Makefile.am
  2. 0
      src/stream/interface/reader.c
  3. 0
      src/stream/interface/writer.c
  4. 36
      tests/Makefile.am
  5. BIN
      tests/loggerTest
  6. 68
      tests/mock/mock_worker.c
  7. 14
      tests/mock/mock_worker.h
  8. 78
      tests/serverTest.c

4
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

0
src/stream/interface/stream_reader.c → src/stream/interface/reader.c

0
src/stream/interface/stream_writer.c → src/stream/interface/writer.c

36
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

BIN
tests/loggerTest

68
tests/mock/mock_worker.c

@ -0,0 +1,68 @@
#include <stdarg.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#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:

14
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:

78
tests/serverTest.c

@ -3,61 +3,44 @@
#include <unistd.h>
#include <signal.h>
#include <socket.h>
#include <sys/types.h>
#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];
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;
}

Loading…
Cancel
Save