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