diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..56fb957899e90c34e6b373c30b14359d4736e73a
--- /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 0000000000000000000000000000000000000000..4cd6410c5209c117830aa7194084a98da294012c
--- /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 0000000000000000000000000000000000000000..bdffc62f878c14001e73eef71db7acccce2d6213
--- /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 0000000000000000000000000000000000000000..966cc14276b68a4f5e8b42a0db2a9989e246fa97
--- /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 0000000000000000000000000000000000000000..77a7dd5210dcc32b98cd2875ea4406bb42adf88f
--- /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 0000000000000000000000000000000000000000..05d2c1a766cca44f1664ee371730efea6a250dba
--- /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 31a51b4a713c7f6271021f59ec66e1917a4ed0d0..67413ca2c6dad1f91b623998617c7d91465e73a9 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