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