Commit a8008d85 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

PathComp component

- Arranged GitLab CI/CD and Docker build
- Configured code coverage
- Grouped test scripts
- Instrumented source code and Makefile for code coverage reporting
parent 5e98c5a7
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ build pathcomp-backend:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
  script:
    # This first build tags the builder resulting image to prevent being removed by dangling image removal command
    - docker build -t "${IMAGE_NAME}-backend:builder" --target builder -f ./src/$IMAGE_NAME/backend/Dockerfile .
    - docker build -t "${IMAGE_NAME}-backend:$IMAGE_TAG-builder" --target builder -f ./src/$IMAGE_NAME/backend/Dockerfile .
    - docker build -t "${IMAGE_NAME}-backend:$IMAGE_TAG" -f ./src/$IMAGE_NAME/backend/Dockerfile .
    - docker tag "${IMAGE_NAME}-backend:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/${IMAGE_NAME}-backend:$IMAGE_TAG"
    - docker push "$CI_REGISTRY_IMAGE/${IMAGE_NAME}-backend:$IMAGE_TAG"
@@ -83,11 +83,14 @@ unit test pathcomp-backend:
    - if docker container ls | grep ${IMAGE_NAME}-backend; then docker rm -f ${IMAGE_NAME}-backend; else echo "${IMAGE_NAME}-backend image is not in the system"; fi
  script:
    - docker pull "$CI_REGISTRY_IMAGE/${IMAGE_NAME}-backend:$IMAGE_TAG"
    - docker run --name ${IMAGE_NAME}-backend -d -p 8081:8081 -v "$PWD/src/${IMAGE_NAME}/backend/tests:/opt/results" --network=teraflowbridge $CI_REGISTRY_IMAGE/${IMAGE_NAME}-backend:$IMAGE_TAG
    - docker run --name ${IMAGE_NAME}-backend -d -p 8081:8081 -v "$PWD/src/${IMAGE_NAME}/backend/tests:/opt/results" --network=teraflowbridge $CI_REGISTRY_IMAGE/${IMAGE_NAME}-backend:$IMAGE_TAG-builder
    - sleep 5
    - docker ps -a
    - docker logs ${IMAGE_NAME}-backend
    - docker exec -i $IMAGE_NAME-backend bash -c "curl -0 -v -X POST -H 'Content-Type:application/json' http://127.0.0.1:8081/pathComp/api/v1/compRoute -d @/var/teraflow/test/inter_domain_test.txt"
    - docker exec -i $IMAGE_NAME-backend bash -c "killall -USR1 pathComp-cvr"
    - docker exec -i $IMAGE_NAME-backend bash -c "gcovr"
  coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/'
  after_script:
    - docker rm -f ${IMAGE_NAME}-backend
    - docker network rm teraflowbridge
@@ -103,10 +106,10 @@ unit test pathcomp-backend:
      - src/$IMAGE_NAME/backend/Dockerfile
      - manifests/${IMAGE_NAME}service.yaml
      - .gitlab-ci.yml
  artifacts:
      when: always
      reports:
        junit: src/$IMAGE_NAME/backend/tests/${IMAGE_NAME}-backend_report.xml
  #artifacts:
  #    when: always
  #    reports:
  #      junit: src/$IMAGE_NAME/backend/tests/${IMAGE_NAME}-backend_report.xml

# Apply unit test to the component
unit test pathcomp-frontend:
@@ -132,7 +135,7 @@ unit test pathcomp-frontend:
    - docker logs ${IMAGE_NAME}-frontend
    - docker logs ${IMAGE_NAME}-backend
    - docker exec -i $IMAGE_NAME-frontend bash -c "coverage run -m pytest --log-level=INFO --verbose $IMAGE_NAME/frontend/tests/test_unitary.py --junitxml=/opt/results/${IMAGE_NAME}-frontend_report.xml"
    - docker exec -i $IMAGE_NAME bash -c "coverage report --include='${IMAGE_NAME}/*' --show-missing"
    - docker exec -i $IMAGE_NAME-frontend bash -c "coverage report --include='${IMAGE_NAME}/*' --show-missing"
  coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/'
  after_script:
    - docker rm -f ${IMAGE_NAME}-frontend
+19 −7
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ FROM ubuntu:20.04 AS builder
ARG DEBIAN_FRONTEND=noninteractive

# Install build software
RUN apt-get update -y && apt-get install build-essential libglib2.0-dev -y
RUN apt-get update -y && apt-get install build-essential gcovr libglib2.0-dev -y

# mkdir
RUN mkdir -p /var/teraflow
@@ -29,7 +29,21 @@ WORKDIR /var/teraflow

# Copy every file in working directory
COPY src/pathcomp/backend/. ./
RUN make

# Build release version and move it to bin folder
RUN make release
RUN mkdir /var/teraflow/bin
RUN mv pathComp /var/teraflow/bin

# Build code coverage version
RUN make clean
RUN make coverage

EXPOSE 8081

# builder defines coverage version of pathcomp by default
ENTRYPOINT [ "./pathComp-cvr", "config/pathcomp.conf", "pathcomp.log" ] 


# Stage 2
FROM ubuntu:20.04 AS release
@@ -39,15 +53,13 @@ ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -y && apt-get install curl libglib2.0-bin -y

# mkdir
RUN mkdir -p /var/teraflow
RUN mkdir -p /var/teraflow/config

# Define working directory
WORKDIR /var/teraflow

# We make four distinct layers so if there are application changes the library layers can be re-used
COPY --from=builder /var/teraflow/ ./

EXPOSE 8081
COPY --from=builder /var/teraflow/bin/pathComp .
COPY --from=builder /var/teraflow/config/pathcomp.conf ./config

ENTRYPOINT [ "./pathComp", "config/pathcomp.conf", "pathcomp.log" ] 
+27 −10
Original line number Diff line number Diff line
@@ -14,19 +14,36 @@
# limitations under the License.
#
# Author: CTTC/CERCA PONS RU Ricardo Martínez (ricardo.martinez@cttc.es)

CC       = gcc
# FLAGS         =  -O6 -Wall -DPOSIX_SOURCE
FLAGS = -O0 -ggdb -g
CFLAGS    =  $(FLAGS) -I. -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include/ -DDEBUG
CFLAGS   = -I. -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include/
LDLIBS   = -lm
LDFLAGS   =   -g 
LDFLAGS  = 

all: pathComp

release: CFLAGS += -O6 -Wall -DPOSIX_SOURCE
release: pathComp

debug: CFLAGS  += -O0 -ggdb -g -DDEBUG
debug: LDFLAGS += -g
debug: pathComp-dbg

coverage: CFLAGS  += -O0 -ggdb -g -DDEBUG -fprofile-arcs -ftest-coverage -DGCOV
coverage: LDFLAGS += -g -lgcov --coverage -fprofile-arcs -ftest-coverage -DGCOV
coverage: pathComp-cvr

pathComp: pathComp.o pathComp_log.o pathComp_cjson.o pathComp_tools.o pathComp_ksp.o pathComp_RESTapi.o 
	gcc -o pathComp pathComp.o pathComp_log.o pathComp_cjson.o pathComp_tools.o pathComp_ksp.o pathComp_RESTapi.o -L/usr/lib/x86_64-linux-gnu/ -lglib-2.0  -luuid $(LDFLAGS) $(LDLIBS)
	gcc -o pathComp pathComp.o pathComp_log.o pathComp_cjson.o pathComp_tools.o pathComp_ksp.o pathComp_RESTapi.o \
		-L/usr/lib/x86_64-linux-gnu/ -lglib-2.0 -luuid $(LDFLAGS) $(LDLIBS)

pathComp-dbg: pathComp.o pathComp_log.o pathComp_cjson.o pathComp_tools.o pathComp_ksp.o pathComp_RESTapi.o 
	gcc -o pathComp-dbg pathComp.o pathComp_log.o pathComp_cjson.o pathComp_tools.o pathComp_ksp.o pathComp_RESTapi.o \
		-L/usr/lib/x86_64-linux-gnu/ -lglib-2.0 -luuid $(LDFLAGS) $(LDLIBS)

# strip pathComp
pathComp-cvr: pathComp.o pathComp_log.o pathComp_cjson.o pathComp_tools.o pathComp_ksp.o pathComp_RESTapi.o 
	gcc -o pathComp-cvr pathComp.o pathComp_log.o pathComp_cjson.o pathComp_tools.o pathComp_ksp.o pathComp_RESTapi.o \
		-L/usr/lib/x86_64-linux-gnu/ -lglib-2.0 -luuid $(LDFLAGS) $(LDLIBS)

pathComp_log.o: pathComp_log.h pathComp_log.c
	$(CC) $(CFLAGS) -c pathComp_log.c -o pathComp_log.o  
@@ -47,4 +64,4 @@ pathComp.o: pathComp_log.h pathComp_RESTapi.h pathComp.c pathComp.h
	$(CC) $(CFLAGS) -c pathComp.c -o pathComp.o 

clean:	
	rm -f *.o pathComp
 No newline at end of file
	rm -f *.o *.gcno *.gcda *.gcov *.log pathComp pathComp-dbg pathComp-cvr
+28 −2
Original line number Diff line number Diff line
@@ -31,6 +31,21 @@
#include <glib.h>
#include <sys/time.h>

#ifdef GCOV
// Instrumentation to report code coverage live
// Ref: https://www.osadl.org/fileadmin/dam/interface/docbook/howtos/coverage.pdf
#include <signal.h>

// Code coverage flush method; used to update code coverage reports while the server is running
void __gcov_flush(void); /* check in gcc sources gcc/gcov-io.h for the prototype */

void my_gcov_handler(int signum)
{
  printf("signal received: running __gcov_flush()\n");
  __gcov_flush(); /* dump coverage data on receiving SIGUSR1 */
}
#endif

#include "pathComp_log.h"
#include "pathComp_RESTapi.h"
#include "pathComp.h"
@@ -90,6 +105,17 @@ void read_pathComp_config_file(FILE *fp)
/////////////////////////////////////////////////////////////////////////////////////////
int main(int argc, char *argv[])
{
	#ifdef GCOV
	struct sigaction new_action, old_action;
	/* setup signal hander */
 	new_action.sa_handler = my_gcov_handler;
 	sigemptyset(&new_action.sa_mask);
 	new_action.sa_flags = 0;
 	sigaction(SIGUSR1, NULL, &old_action);
 	if (old_action.sa_handler != SIG_IGN)
 		sigaction (SIGUSR1, &new_action, NULL);
	#endif

	DEBUG_PC ("********************************************************************"); 
	DEBUG_PC ("********************************************************************");
	DEBUG_PC (" ---------------------- Path Computation Server---------------------");
+1 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@
# limitations under the License.

docker build -t "pathcomp-frontend:latest" -f ./src/pathcomp/frontend/Dockerfile .
docker build -t "pathcomp-backend:builder" --target builder -f ./src/pathcomp/backend/Dockerfile .
docker build -t "pathcomp-backend:latest" -f ./src/pathcomp/backend/Dockerfile .
docker build -t "pathcomp-backend:gdb" -f ./src/pathcomp/backend/Dockerfile-gdb .

Loading