From 59644e9bafbf40ff7cd4865d0a0ffdc8c20f2f0f Mon Sep 17 00:00:00 2001 From: Oskar Viljasaar <oskar.viljasaar@iopsys.eu> Date: Mon, 5 Oct 2020 22:22:21 +0200 Subject: [PATCH] Unit and functional tests working --- .gitignore | 2 ++ Makefile | 56 +++++++++++++++++++++++++------------- common.mk | 4 +++ src/main.c => main.c | 0 src/qosmngr.c => qosmngr.c | 0 src/Makefile | 39 -------------------------- test/Makefile | 7 ----- test/cmocka/Makefile | 16 +++++------ 8 files changed, 50 insertions(+), 74 deletions(-) rename src/main.c => main.c (100%) rename src/qosmngr.c => qosmngr.c (100%) delete mode 100644 src/Makefile delete mode 100644 test/Makefile diff --git a/.gitignore b/.gitignore index 1e60f8c..dd07ddc 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ qosmngr *.xml .DS_Store include/version.h +test/cmocka/unit_test_qos +test/cmocka/functional_test_qos diff --git a/Makefile b/Makefile index ac07a38..46c8eaa 100644 --- a/Makefile +++ b/Makefile @@ -3,43 +3,61 @@ include common.mk QOSMNGR_LIB=libqosmngr.so -QOSMNGR_LIB_DIR ?= $(shell dirname $(PWD)) -QOSMNGR_LDFLAGS = -lqosmngr -L$(QOSMNGR_LIB_DIR) - GCOV=gcov -CODECOVERAGE_SRC = src/qosmngr.c +CODECOVERAGE_SRC = qosmngr.c + +PROG = $(PROJECT_TOPLEVEL)/qosmngr +SHARED_LIB = $(PROJECT_TOPLEVEL)/libqosmngr.so +OBJS = main.o qosmngr.o -subdirs ?= src +PROG_CFLAGS = $(CFLAGS) -I$(INCLUDE_DIR) -Wall -fstrict-aliasing +PROG_LDFLAGS = $(LDFLAGS) +PROG_LIBS = $(COMMON_LDFLAGS) -lgcov .PHONY: all clean -all clean: - @for i in $(subdirs) ; do [ -d $$i ] && $(MAKE) -C $$i $@; done +all: version $(PROG) -qosmngr: - $(MAKE) all -C src +$(PROG): $(INCLUDE_DIR)/version.h $(OBJS) + $(CC) $(PROG_LDFLAGS) -o $@ $^ $(PROG_LIBS) ${QOSMNGR_LIB}: - $(MAKE) CFLAGS+=-fPIC lib -C src + $(CC) $(PROG_LDFLAGS) -shared -o $@ $^ $(PROG_LIBS) -test: ${QOSMNGR_LIB} +$(SHARED_LIB): $(INCLUDE_DIR)/version.h $(OBJS) -unit-test: coverage - $(MAKE) -C test/cmocka unit-test QOSMNGR_LIB_DIR=$(PWD) +version: $(INCLUDE_DIR)/version.h -functional-test: coverage - $(MAKE) -C test/cmocka functional-test QOSMNGR_LIB_DIR=$(PWD) +$(INCLUDE_DIR)/version.h: $(PROJECT_TOPLEVEL)/VERSION + @(dirty=$(shell (git status --porcelain | grep -q .) && echo -dirty); \ + [ -f $(PROJECT_TOPLEVEL)/VERSION ] && basever=$(shell cat $(PROJECT_TOPLEVEL)/VERSION) || \ + basever=Unknown; \ + xver=$(shell date +'%y%V%u-%H%M'); \ + echo "const char *qosmngr_base_version = \"$$basever\";" > $@; \ + echo "const char *qosmngr_xtra_version = \"$$xver$$dirty\";" >> $@; \ + ) + +test: ${QOSMNGR_LIB} -coverage: CFLAGS += -g -O0 -fprofile-arcs -ftest-coverage -fPIC +coverage: CFLAGS += -g -O0 -fprofile-arcs -ftest-coverage -fPIC coverage: LDFLAGS += --coverage -coverage: test qosmngr +coverage: test $(PROG) $(foreach testprog, $(CODECOVERAGE_SRC), $(GCOV) $(testprog);) +unit-test: test + $(MAKE) -C test/cmocka unit-test + +functional-test: test + $(MAKE) -C test/cmocka functional-test + +%.o: %.c + $(CC) $(PROG_CFLAGS) $(FPIC) -c -o $@ $< + clean: - rm -f *.o libqosmngr.so $(PROG) + rm -f *.o $(SHARED_LIB) $(PROG) $(INCLUDE_DIR)/version.h rm -f *.xml *.html find -name '*.gcda' -exec rm {} -fv \; find -name '*.gcno' -exec rm {} -fv \; find -name '*.gcov' -exec rm {} -fv \; make -C test/cmocka clean - make -C src clean + diff --git a/common.mk b/common.mk index 9973747..2069d99 100644 --- a/common.mk +++ b/common.mk @@ -4,3 +4,7 @@ INCLUDE_DIR = $(PROJECT_TOPLEVEL)/include # Common compiler options CC=gcc # gcc || clang + +COMMON_LDFLAGS = -luci -lubus -lubox -ljson-c -lblobmsg_json -lnl-genl-3 -lnl-3 -lqos +QOSMNGR_LIB_DIR ?= $(shell dirname $(PWD)) +QOSMNGR_LDFLAGS = -lqosmngr -L$(QOSMNGR_LIB_DIR) diff --git a/src/main.c b/main.c similarity index 100% rename from src/main.c rename to main.c diff --git a/src/qosmngr.c b/qosmngr.c similarity index 100% rename from src/qosmngr.c rename to qosmngr.c diff --git a/src/Makefile b/src/Makefile deleted file mode 100644 index 28859ee..0000000 --- a/src/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -include ../common.mk - -PROG = $(PROJECT_TOPLEVEL)/qosmngr -SHARED_LIB = $(PROJECT_TOPLEVEL)/libqosmngr.so - -OBJS = main.o qosmngr.o - -PROG_CFLAGS = $(CFLAGS) -I$(INCLUDE_DIR) -Wall -fstrict-aliasing -PROG_LDFLAGS = $(LDFLAGS) -PROG_LIBS = -luci -lubus -lubox -ljson-c -lblobmsg_json -lnl-genl-3 -lnl-3 -lgcov -leasy -lqos - -%.o: %.c - $(CC) $(PROG_CFLAGS) $(FPIC) -c -o $@ $< - -.PHONY: clean - -all: $(PROG) - -lib: $(SHARED_LIB) - -$(SHARED_LIB): $(INCLUDE_DIR)/version.h $(OBJS) - $(CC) $(PROG_LDFLAGS) -shared -o $@ $^ $(PROG_LIBS) - -version: $(INCLUDE_DIR)/version.h - -$(INCLUDE_DIR)/version.h: $(PROJECT_TOPLEVEL)/VERSION - @(dirty=$(shell (git status --porcelain | grep -q .) && echo -dirty); \ - [ -f $(PROJECT_TOPLEVEL)/VERSION ] && basever=$(shell cat $(PROJECT_TOPLEVEL)/VERSION) || \ - basever=Unknown; \ - xver=$(shell date +'%y%V%u-%H%M'); \ - echo "const char *qosmngr_base_version = \"$$basever\";" > $@; \ - echo "const char *qosmngr_xtra_version = \"$$xver$$dirty\";" >> $@; \ - ) - -$(PROG): $(INCLUDE_DIR)/version.h $(OBJS) - $(CC) $(PROG_LDFLAGS) -o $@ $^ $(PROG_LIBS) - -clean: - rm -f *.o $(SHARED_LIB) $(PROG) $(INCLUDE_DIR)/version.h diff --git a/test/Makefile b/test/Makefile deleted file mode 100644 index 9f654d8..0000000 --- a/test/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../common.mk - -GCOV = gcov -CODECOVERAGE_SRC = qosmngr.c - -all: - \ No newline at end of file diff --git a/test/cmocka/Makefile b/test/cmocka/Makefile index 1732db1..5f5240e 100644 --- a/test/cmocka/Makefile +++ b/test/cmocka/Makefile @@ -1,12 +1,10 @@ include ../../common.mk -CC = gcc -QOSMNGR_LIB_DIR ?= $(shell dirname $(PWD)) -QOSMNGR_LIB = -lqosmngr -L$(QOSMNGR_LIB_DIR) -CMOCKA_LIB = -l cmocka -LIBS = $(QOSMNGR_LIB) $(CMOCKA_LIB) -lqos -pthread -luci -lubus -lubox -ljson-c -lblobmsg_json -lnl-genl-3 -lnl-3 -ljson-validator -ljson-schema-validator -ljson-editor -CFLAGS = -g -Wall -I$(INCLUDE_DIR) -LDFLAGS = $(LIBS) -Wl,-rpath=$(QOSMNGR_LIB_DIR) -I$(QOSMNGR_LIB_DIR) +QOSMNGR_LIB_DIR = $(PROJECT_TOPLEVEL) +CMOCKA_LIB = -lcmocka +LIBS = $(QOSMNGR_LDFLAGS) $(CMOCKA_LIB) -lpthread $(COMMON_LDFLAGS) -ljson-validator -ljson-schema-validator -ljson-editor +CFLAGS = -g -Wall -O0 -fprofile-arcs -ftest-coverage -fPIC -I$(INCLUDE_DIR) +LDFLAGS = $(LIBS) -Wl,-rpath=$(QOSMNGR_LIB_DIR) -I$(QOSMNGR_LIB_DIR) --coverage UNIT_TESTS = unit_test_qos FUNCTIONAL_TESTS = functional_test_qos @@ -21,7 +19,7 @@ unit_test_qos: unit_test_qos.o $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) functional_test_qos: functional_test_qos.o - $(CC) -o $@ $^ $(LDFLAGS) + $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) unit-test: $(UNIT_TESTS) $(foreach testprog, $(UNIT_TESTS), sudo $(VALGRIND) ./$(testprog);) @@ -32,4 +30,4 @@ functional-test: $(FUNCTIONAL_TESTS) .PHONY: clean clean: - rm $(UNIT_TESTS) *.o -fv + rm $(UNIT_TESTS) $(FUNCTIONAL_TESTS) *.o *.gcno *.gcda -fv -- GitLab