From a16b0338fc9acd0f31ca70b9027265d599cb2f2c Mon Sep 17 00:00:00 2001 From: Shubham Sharma <shubham.sharma@iopsys.eu> Date: Fri, 12 Feb 2021 17:50:35 +0530 Subject: [PATCH] ci/cd setup - fix for install dependency input required. - iptables dependency added --- .gitlab-ci.yml | 27 ++++++++++++++++++++++++ gitlab-ci/functional-test.sh | 25 ++++++++++++++++++++++ gitlab-ci/install-dependencies.sh | 20 ++++++++++++++++++ gitlab-ci/iopsys-supervisord.conf | 6 ++++++ gitlab-ci/setup.sh | 13 ++++++++++++ test/files/etc/config/urlfilter | 35 +++++++++++++++++++++++++++++++ urlfilter/Makefile | 9 +++++++- 7 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 .gitlab-ci.yml create mode 100755 gitlab-ci/functional-test.sh create mode 100755 gitlab-ci/install-dependencies.sh create mode 100644 gitlab-ci/iopsys-supervisord.conf create mode 100755 gitlab-ci/setup.sh create mode 100644 test/files/etc/config/urlfilter diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..56fb957 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,27 @@ +include: + - project: 'iopsys/gitlab-ci-pipeline' + file: '/static-code-analysis.yml' + privileged: true + +stages: + - static_code_analysis + - functional_test + +variables: + DEBUG: 'TRUE' + SOURCE_FOLDER: "." + +run_functional_test: + stage: functional_test + image: iopsys/code-analysis-dev + allow_failure: false + script: + - "./gitlab-ci/install-dependencies.sh" + - "./gitlab-ci/setup.sh" + - "./gitlab-ci/functional-test.sh" + + artifacts: + when: always + paths: + - functional-test-coverage.xml + - timestamp.log diff --git a/gitlab-ci/functional-test.sh b/gitlab-ci/functional-test.sh new file mode 100755 index 0000000..4cd6410 --- /dev/null +++ b/gitlab-ci/functional-test.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +echo "Functional Test" +pwd + +cd urlfilter +make coverage -C ./ + +supervisorctl status all +supervisorctl update +sleep 3 +supervisorctl status all + +#make functional-test -C ./ + +supervisorctl stop all +supervisorctl status + +#report part +#GitLab-CI output +gcovr -r . +# Artefact +gcovr -r . --xml -o ./functional-test-coverage.xml +date +%s > timestamp.log + diff --git a/gitlab-ci/install-dependencies.sh b/gitlab-ci/install-dependencies.sh new file mode 100755 index 0000000..bdffc62 --- /dev/null +++ b/gitlab-ci/install-dependencies.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +echo "install dependencies" + +pwd + +# libnetfilter-queue +sudo apt-get update +sudo yes | apt-get install libnetfilter-queue-dev +sudo yes | apt-get install iptables + +iptables -L FORWARD|grep -iqE "NFQUEUE" +if [ "$?" -ne 0 ]; then + echo "Applying firewall rule to setup NFQUEUE on forward traffic for urlfiltering" + iptables -I FORWARD -p tcp --dport 80 -j NFQUEUE --queue-num 0 +else + echo "Error : Unmet dependency - iptables not found." +fi + +sudo ldconfig diff --git a/gitlab-ci/iopsys-supervisord.conf b/gitlab-ci/iopsys-supervisord.conf new file mode 100644 index 0000000..966cc14 --- /dev/null +++ b/gitlab-ci/iopsys-supervisord.conf @@ -0,0 +1,6 @@ +[program:ubusd] +command=/bin/bash -c "/usr/sbin/ubusd" + +[program:urlfilter] +command=/bin/bash -c "mkdir -p /opt/work && /usr/bin/valgrind --xml=yes --xml-file=/opt/work/memory-report.xml --leak-check=full --show-reachable=yes --show-leak-kinds=all --errors-for-leak-kinds=all --error-exitcode=1 --track-origins=yes /builds/iopsys/urlfilter/urlfilter" + diff --git a/gitlab-ci/setup.sh b/gitlab-ci/setup.sh new file mode 100755 index 0000000..77a7dd5 --- /dev/null +++ b/gitlab-ci/setup.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +echo "Setup script" + +pwd + +cp -r ./test/files/etc/* /etc/ +cp ./gitlab-ci/iopsys-supervisord.conf /etc/supervisor/conf.d/ + +ls /etc/config/ +ls /usr/share/rpcd/schemas/ +ls /etc/supervisor/conf.d/ + diff --git a/test/files/etc/config/urlfilter b/test/files/etc/config/urlfilter new file mode 100644 index 0000000..05d2c1a --- /dev/null +++ b/test/files/etc/config/urlfilter @@ -0,0 +1,35 @@ +config globals 'globals' + option enable '1' + option global_blacklist '1' + list gbl_url 'abc.com' + list gbl_url 'def.com' + list gbl_url 'facebook.com' + list gbl_url 'instagram.com' + +config profile 'homeoffice' + list whitelist_url 'facebook.com' + list whitelist_url 'instagram.com' + +config profile 'kids' + list blacklist_url 'youtube.com' + list blacklist_url 'game.com' + +config filter 'f1' + option enable '1' + option profile 'kids' + list macaddr '00:11:22:33:44:55' + list macaddr 'AA:BB:CC:33:44:55' + list day 'Monday' + list day 'Tuesday' + list day 'Wednesday' + list day 'Thursday' + list day 'Friday' + option start_time '20:00' + option duration '64800' + +config filter 'f2' + option enable '1' + option profile 'homeoffice' + list macaddr 'CC:DD:EE:33:44:55' + list macaddr 'EE:AA:BB:11:22:33' + diff --git a/urlfilter/Makefile b/urlfilter/Makefile index 31a51b4..67413ca 100644 --- a/urlfilter/Makefile +++ b/urlfilter/Makefile @@ -1,8 +1,10 @@ # Makefile for qosmngr CC=gcc +GCOV = gcov SRC_DIR = src +CODECOVERAGE_SRC = $(addprefix $(SRC_DIR)/, filter.c config.c ) PROG = urlfilter PROG_CFLAGS = $(CFLAGS) -Wall -fstrict-aliasing -fPIC @@ -19,5 +21,10 @@ all: $(PROG) $(PROG): $(OBJS) $(CC) -o $@ $^ $(PROG_LDFLAGS) +coverage: CFLAGS += -g -O0 -fprofile-arcs -ftest-coverage -fPIC +coverage: LDFLAGS += --coverage +coverage: $(PROG) + $(foreach testprog, $(CODECOVERAGE_SRC), $(GCOV) $(testprog);) + clean: - rm -f urlfilter *.o + rm -f $(PROG) $(addprefix $(SRC_DIR)/, *.o) *.log *.xml -- GitLab