diff --git a/tests/Makefile b/tests/Makefile index 44162eb..ea133bb 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -7,16 +7,16 @@ LIBDIR := $(PREFIX)/lib SHAREDIR := $(PREFIX)/share INCLUDEDIR := $(PREFIX)/include MANDIR := $(SHAREDIR)/man - -CC := cc -AR := ar -RANLIB := ranlib CFLAGS := -Wall -Wextra -g LDFLAGS := -I../src -L../ ../src/ipc.h -lipc +CC := cc +CXX := c++ +LD := ${CC} +CXXFLAGS := Q := @ -all: func_01_connection_establishment func_01_connection_establishmentd func_02_pong func_02_pongd func_03_multiple-communications-client func_03_multiple-communications-server func_04_empty_message unit_01_service-path unit_02_usock-remove unit_03_connection-add-remove +all: func_01_connection_establishment func_01_connection_establishmentd func_02_pong func_02_pongd func_03_multiple-communications-client func_03_multiple-communications-server func_04_empty_message func_05_read-write-loop unit_01_service-path unit_02_usock-remove unit_03_connection-add-remove @: func_01_connection_establishment: func_01_connection_establishment.o @@ -131,6 +131,22 @@ func_04_empty_message.uninstall: @echo ' RM > $(BINDIR)/func_04_empty_message' $(Q)rm -f '$(DESTDIR)$(BINDIR)/func_04_empty_message' +func_05_read-write-loop: func_05_read-write-loop.o + @echo ' LD > func_05_read-write-loop' + $(Q)$(CC) -o func_05_read-write-loop func_05_read-write-loop.o $(LDFLAGS) +func_05_read-write-loop.install: func_05_read-write-loop + @echo ' IN > $(BINDIR)/func_05_read-write-loop' + $(Q)mkdir -p '$(DESTDIR)$(BINDIR)' + $(Q)install -m0755 func_05_read-write-loop $(DESTDIR)$(BINDIR)/func_05_read-write-loop + +func_05_read-write-loop.clean: func_05_read-write-loop.o.clean + @echo ' RM > func_05_read-write-loop' + $(Q)rm -f func_05_read-write-loop + +func_05_read-write-loop.uninstall: + @echo ' RM > $(BINDIR)/func_05_read-write-loop' + $(Q)rm -f '$(DESTDIR)$(BINDIR)/func_05_read-write-loop' + unit_01_service-path: unit_01_service-path.o @echo ' LD > unit_01_service-path' $(Q)$(CC) -o unit_01_service-path unit_01_service-path.o $(LDFLAGS) @@ -263,6 +279,18 @@ func_04_empty_message.o.clean: func_04_empty_message.o.uninstall: +func_05_read-write-loop.o: func_05_read-write-loop.c ./../src/ipc.h + @echo ' CC > func_05_read-write-loop.o' + $(Q)$(CC) $(CFLAGS) -std=c11 -c func_05_read-write-loop.c -std=c11 -o func_05_read-write-loop.o + +func_05_read-write-loop.o.install: + +func_05_read-write-loop.o.clean: + @echo ' RM > func_05_read-write-loop.o' + $(Q)rm -f func_05_read-write-loop.o + +func_05_read-write-loop.o.uninstall: + unit_01_service-path.o: unit_01_service-path.c ./../src/ipc.h @echo ' CC > unit_01_service-path.o' $(Q)$(CC) $(CFLAGS) -std=c11 -c unit_01_service-path.c -std=c11 -o unit_01_service-path.o @@ -317,25 +345,14 @@ $(DESTDIR)$(INCLUDEDIR): $(DESTDIR)$(MANDIR): @echo ' DIR > $(MANDIR)' $(Q)mkdir -p $(DESTDIR)$(MANDIR) -install: subdirs.install func_01_connection_establishment.install func_01_connection_establishmentd.install func_02_pong.install func_02_pongd.install func_03_multiple-communications-client.install func_03_multiple-communications-server.install func_04_empty_message.install unit_01_service-path.install unit_02_usock-remove.install unit_03_connection-add-remove.install func_01_connection_establishment.o.install func_01_connection_establishmentd.o.install func_02_pong.o.install func_02_pongd.o.install func_03_multiple-communications-client.o.install func_03_multiple-communications-server.o.install func_04_empty_message.o.install unit_01_service-path.o.install unit_02_usock-remove.o.install unit_03_connection-add-remove.o.install +install: func_01_connection_establishment.install func_01_connection_establishmentd.install func_02_pong.install func_02_pongd.install func_03_multiple-communications-client.install func_03_multiple-communications-server.install func_04_empty_message.install func_05_read-write-loop.install unit_01_service-path.install unit_02_usock-remove.install unit_03_connection-add-remove.install func_01_connection_establishment.o.install func_01_connection_establishmentd.o.install func_02_pong.o.install func_02_pongd.o.install func_03_multiple-communications-client.o.install func_03_multiple-communications-server.o.install func_04_empty_message.o.install func_05_read-write-loop.o.install unit_01_service-path.o.install unit_02_usock-remove.o.install unit_03_connection-add-remove.o.install @: -subdirs.install: - -uninstall: subdirs.uninstall func_01_connection_establishment.uninstall func_01_connection_establishmentd.uninstall func_02_pong.uninstall func_02_pongd.uninstall func_03_multiple-communications-client.uninstall func_03_multiple-communications-server.uninstall func_04_empty_message.uninstall unit_01_service-path.uninstall unit_02_usock-remove.uninstall unit_03_connection-add-remove.uninstall func_01_connection_establishment.o.uninstall func_01_connection_establishmentd.o.uninstall func_02_pong.o.uninstall func_02_pongd.o.uninstall func_03_multiple-communications-client.o.uninstall func_03_multiple-communications-server.o.uninstall func_04_empty_message.o.uninstall unit_01_service-path.o.uninstall unit_02_usock-remove.o.uninstall unit_03_connection-add-remove.o.uninstall +uninstall: func_01_connection_establishment.uninstall func_01_connection_establishmentd.uninstall func_02_pong.uninstall func_02_pongd.uninstall func_03_multiple-communications-client.uninstall func_03_multiple-communications-server.uninstall func_04_empty_message.uninstall func_05_read-write-loop.uninstall unit_01_service-path.uninstall unit_02_usock-remove.uninstall unit_03_connection-add-remove.uninstall func_01_connection_establishment.o.uninstall func_01_connection_establishmentd.o.uninstall func_02_pong.o.uninstall func_02_pongd.o.uninstall func_03_multiple-communications-client.o.uninstall func_03_multiple-communications-server.o.uninstall func_04_empty_message.o.uninstall func_05_read-write-loop.o.uninstall unit_01_service-path.o.uninstall unit_02_usock-remove.o.uninstall unit_03_connection-add-remove.o.uninstall @: -subdirs.uninstall: - -test: all subdirs subdirs.test - @: - -subdirs.test: - -clean: func_01_connection_establishment.clean func_01_connection_establishmentd.clean func_02_pong.clean func_02_pongd.clean func_03_multiple-communications-client.clean func_03_multiple-communications-server.clean func_04_empty_message.clean unit_01_service-path.clean unit_02_usock-remove.clean unit_03_connection-add-remove.clean func_01_connection_establishment.o.clean func_01_connection_establishmentd.o.clean func_02_pong.o.clean func_02_pongd.o.clean func_03_multiple-communications-client.o.clean func_03_multiple-communications-server.o.clean func_04_empty_message.o.clean unit_01_service-path.o.clean unit_02_usock-remove.o.clean unit_03_connection-add-remove.o.clean - +clean: func_01_connection_establishment.clean func_01_connection_establishmentd.clean func_02_pong.clean func_02_pongd.clean func_03_multiple-communications-client.clean func_03_multiple-communications-server.clean func_04_empty_message.clean func_05_read-write-loop.clean unit_01_service-path.clean unit_02_usock-remove.clean unit_03_connection-add-remove.clean func_01_connection_establishment.o.clean func_01_connection_establishmentd.o.clean func_02_pong.o.clean func_02_pongd.o.clean func_03_multiple-communications-client.o.clean func_03_multiple-communications-server.o.clean func_04_empty_message.o.clean func_05_read-write-loop.o.clean unit_01_service-path.o.clean unit_02_usock-remove.o.clean unit_03_connection-add-remove.o.clean distclean: clean - dist: dist-gz dist-xz dist-bz2 $(Q)rm -- $(PACKAGE)-$(VERSION) @@ -356,6 +373,7 @@ $(PACKAGE)-$(VERSION).tar.gz: distdir $(PACKAGE)-$(VERSION)/func_01_connection_establishment.c \ $(PACKAGE)-$(VERSION)/func_03_multiple-communications-server.c \ $(PACKAGE)-$(VERSION)/unit_03_connection-add-remove.c \ + $(PACKAGE)-$(VERSION)/func_05_read-write-loop.c \ $(PACKAGE)-$(VERSION)/func_03_multiple-communications-client.c \ $(PACKAGE)-$(VERSION)/unit_02_usock-remove.c \ $(PACKAGE)-$(VERSION)/func_01_connection_establishmentd.c @@ -373,6 +391,7 @@ $(PACKAGE)-$(VERSION).tar.xz: distdir $(PACKAGE)-$(VERSION)/func_01_connection_establishment.c \ $(PACKAGE)-$(VERSION)/func_03_multiple-communications-server.c \ $(PACKAGE)-$(VERSION)/unit_03_connection-add-remove.c \ + $(PACKAGE)-$(VERSION)/func_05_read-write-loop.c \ $(PACKAGE)-$(VERSION)/func_03_multiple-communications-client.c \ $(PACKAGE)-$(VERSION)/unit_02_usock-remove.c \ $(PACKAGE)-$(VERSION)/func_01_connection_establishmentd.c @@ -390,6 +409,7 @@ $(PACKAGE)-$(VERSION).tar.bz2: distdir $(PACKAGE)-$(VERSION)/func_01_connection_establishment.c \ $(PACKAGE)-$(VERSION)/func_03_multiple-communications-server.c \ $(PACKAGE)-$(VERSION)/unit_03_connection-add-remove.c \ + $(PACKAGE)-$(VERSION)/func_05_read-write-loop.c \ $(PACKAGE)-$(VERSION)/func_03_multiple-communications-client.c \ $(PACKAGE)-$(VERSION)/unit_02_usock-remove.c \ $(PACKAGE)-$(VERSION)/func_01_connection_establishmentd.c @@ -406,10 +426,12 @@ help: @echo ' - uninstall  Deinstalls the project.' @echo '' @echo 'CLI-modifiable variables:' - @echo ' - CC  ${CC}' @echo ' - CFLAGS  ${CFLAGS}' @echo ' - LDFLAGS  ${LDFLAGS}' - @echo ' - DESTDIR  ${DESTDIR}' + @echo ' - CC  ${CC}' + @echo ' - CXX  ${CXX}' + @echo ' - LD  ${LD}' + @echo ' - CXXFLAGS  ${CXXFLAGS}' @echo ' - PREFIX  ${PREFIX}' @echo ' - BINDIR  ${BINDIR}' @echo ' - LIBDIR  ${LIBDIR}' @@ -420,14 +442,15 @@ help: @echo 'Project targets: ' @echo ' - func_01_connection_establishment binary' @echo ' - func_01_connection_establishmentd binary' - @echo ' - func_02_pong  binary' - @echo ' - func_02_pongd  binary' + @echo ' - func_02_pong  binary' + @echo ' - func_02_pongd  binary' @echo ' - func_03_multiple-communications-client binary' @echo ' - func_03_multiple-communications-server binary' - @echo ' - func_04_empty_message binary' - @echo ' - unit_01_service-path binary' - @echo ' - unit_02_usock-remove binary' - @echo ' - unit_03_connection-add-remove binary' + @echo ' - func_04_empty_message  binary' + @echo ' - func_05_read-write-loop  binary' + @echo ' - unit_01_service-path  binary' + @echo ' - unit_02_usock-remove  binary' + @echo ' - unit_03_connection-add-remove  binary' @echo '' @echo 'Makefile options:' @echo ' - gnu: false' @@ -435,5 +458,5 @@ help: @echo '' @echo 'Rebuild the Makefile with:' @echo ' zsh ./build.zsh -c' -.PHONY: all subdirs clean distclean dist install uninstall help +.PHONY: all clean distclean dist install uninstall help diff --git a/tests/func_05_read-write-loop.c b/tests/func_05_read-write-loop.c new file mode 100644 index 0000000..77b9f26 --- /dev/null +++ b/tests/func_05_read-write-loop.c @@ -0,0 +1,77 @@ +#define _BSD_SOURCE + +#include "../src/ipc.h" + +#include +#include +#include +#include + +#define SERVICE_NAME "pong" +#define SECURE_MALLOC(p, s, wat) p = malloc (s); if (p == NULL) { wat; } +#define DEFAULT_MSG "coucou" + + +int main(int argc, char * argv[], char **env) +{ + SECURE_DECLARATION(struct ipc_connection_info,srv); + SECURE_DECLARATION(struct ipc_event, event); + + SECURE_DECLARATION (struct ipc_message, write_m); + SECURE_DECLARATION (struct ipc_message, read_m); + + // timing the exchange duration + struct timeval tval_before, tval_after, tval_result; + + size_t nb_rounds = 1000; + char *message_str = NULL; + + if (argc > 1 && strncmp(argv[1], "-h", 2) == 0) { + fprintf (stderr, "usage: %s [nb-rounds [message]]\n", argv[0]); + fprintf (stderr, "default: nb-rounds = 1000, message='coucou'\n"); + exit(0); + } + + if (argc > 1) { + nb_rounds = (size_t) atoi(argv[1]); + } + + if (argc > 2) { + message_str = argv[2]; + } + + if (message_str == NULL) { + // message par defaut + SECURE_MALLOC (message_str, strlen(DEFAULT_MSG) +1, exit(EXIT_FAILURE)); + memcpy(message_str, DEFAULT_MSG, strlen(DEFAULT_MSG)); + } + + TEST_IPC_Q (ipc_connection (env, &srv, SERVICE_NAME), EXIT_FAILURE); + + SECURE_MALLOC (write_m.payload, strlen(message_str), exit(EXIT_FAILURE)); + memcpy (write_m.payload, message_str, strlen(message_str)); + write_m.type = MSG_TYPE_DATA; + write_m.user_type = 42; + write_m.length = strlen(message_str); + + gettimeofday(&tval_before, NULL); + for (size_t i = 0 ; i < nb_rounds ; i++) { + ipc_write (&srv, &write_m); + + // reading + TEST_IPC_Q(ipc_read (&srv, &read_m), EXIT_FAILURE); + // printf ("received message (%d bytes): %*s\n", read_m.length, read_m.length, read_m.payload); + // ipc_message_empty (&read_m); + + } + gettimeofday(&tval_after, NULL); + + timersub(&tval_after, &tval_before, &tval_result); + + printf("Time elapsed: %ld.%06ld\n", (long int)tval_result.tv_sec, (long int)tval_result.tv_usec); + + // disconnection + TEST_IPC_Q (ipc_close (&srv), EXIT_FAILURE); + + return EXIT_SUCCESS; +} diff --git a/tests/project.zsh b/tests/project.zsh index 83c178d..4334749 100644 --- a/tests/project.zsh +++ b/tests/project.zsh @@ -2,8 +2,10 @@ package=ipc-tests version=0.5.0 -CFLAGS="-Wall -Wextra -g" -LDFLAGS="-I../src -L../ ../src/ipc.h -lipc" +variables+=( + CFLAGS "-Wall -Wextra -g" + LDFLAGS "-I../src -L../ ../src/ipc.h -lipc" +) targets=( func_01_connection_establishment @@ -13,6 +15,7 @@ targets=( func_03_multiple-communications-client func_03_multiple-communications-server func_04_empty_message + func_05_read-write-loop unit_01_service-path unit_02_usock-remove unit_03_connection-add-remove