diff --git a/src/context/.gitlab-ci.yml b/src/context/.gitlab-ci.yml
index 0da2b582edf879f793341887adef9cef5ad4fff2..ef780f7e3da5440f17f6a83cfcc7ba22201acf7c 100644
--- a/src/context/.gitlab-ci.yml
+++ b/src/context/.gitlab-ci.yml
@@ -49,22 +49,40 @@ unit test context:
   before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
     - if docker network list | grep teraflowbridge; then echo "teraflowbridge is already created"; else docker network create -d bridge teraflowbridge; fi
-    - if docker container ls | grep redis; then docker rm -f redis; else echo "redis image is not in the system"; fi
+    - if docker container ls | grep crdb; then docker rm -f crdb; else echo "CockroachDB container is not in the system"; fi
+    - if docker volume ls | grep crdb; then docker volume rm -f crdb; else echo "CockroachDB volume is not in the system"; fi
     - if docker container ls | grep $IMAGE_NAME; then docker rm -f $IMAGE_NAME; else echo "$IMAGE_NAME image is not in the system"; fi
   script:
     - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
-    - docker pull "redis:6.2"
-    - docker run --name redis -d --network=teraflowbridge redis:6.2
+    - docker pull "cockroachdb/cockroach:latest-v22.2"
+    - docker volume create crdb
+    - >
+      docker run --name crdb -d --network=teraflowbridge -p 26257:26257 -p 8080:8080
+      --env COCKROACH_DATABASE=tfs_test
+      --env COCKROACH_USER=tfs
+      --env COCKROACH_PASSWORD=tfs123
+      --volume "crdb:/cockroach/cockroach-data"
+      --volume "~/init-scripts:/docker-entrypoint-initdb.d"
+      cockroachdb/cockroach:latest-v22.2 start-single-node
     - sleep 10
-    - docker run --name $IMAGE_NAME -d -p 1010:1010 --env "DB_BACKEND=redis" --env "REDIS_SERVICE_HOST=redis" --env "REDIS_SERVICE_PORT=6379" --env "REDIS_DATABASE_ID=0" -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" --network=teraflowbridge $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
+    - CRDB_ADDRESS=$(docker inspect crdb --format "{{.NetworkSettings.Networks.teraflowbridge.IPAddress}}")
+    - >
+      docker run --name $IMAGE_NAME -d -p 1010:1010
+      --env "CRDB_URI=cockroachdb://tfs:tfs123@${CRDB_ADDRESS}:26257/tfs_test?sslmode=require"
+      --volume "$PWD/src/$IMAGE_NAME/tests:/opt/results"
+      --network=teraflowbridge
+      $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
     - docker ps -a
     - docker logs $IMAGE_NAME
-    - docker exec -i $IMAGE_NAME bash -c "coverage run -m pytest --log-level=INFO --verbose $IMAGE_NAME/tests/test_unitary.py --junitxml=/opt/results/${IMAGE_NAME}_report.xml"
+    - >
+      docker exec -i $IMAGE_NAME bash -c
+      "coverage run -m pytest --log-level=INFO --verbose $IMAGE_NAME/tests/*.py --junitxml=/opt/results/${IMAGE_NAME}_report.xml"
     - docker exec -i $IMAGE_NAME bash -c "coverage report --include='${IMAGE_NAME}/*' --show-missing"
   coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/'
   after_script:
     - docker rm -f $IMAGE_NAME
-    - docker rm -f  redis
+    - docker rm -f crdb
+    - docker volume rm -f crdb
     - docker network rm teraflowbridge
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
diff --git a/src/context/service/__main__.py b/src/context/service/__main__.py
index fbdabb2d7d624aa5ba97f859bd9cfd50e792b8b1..9960e94b519c5f4604557a70bab6c8e80eab6fc5 100644
--- a/src/context/service/__main__.py
+++ b/src/context/service/__main__.py
@@ -17,10 +17,9 @@ from prometheus_client import start_http_server
 from common.Settings import get_log_level, get_metrics_port
 from common.message_broker.Factory import get_messagebroker_backend
 from common.message_broker.MessageBroker import MessageBroker
-from sqlalchemy.orm import sessionmaker
-from .database import rebuild_database
 from .ContextService import ContextService
-from .Engine import Engine
+from .database.Engine import Engine
+from .database.models._Base import rebuild_database
 
 LOG_LEVEL = get_log_level()
 logging.basicConfig(level=LOG_LEVEL, format="[%(asctime)s] %(levelname)s:%(name)s:%(message)s")
@@ -46,7 +45,8 @@ def main():
     start_http_server(metrics_port)
 
     db_engine = Engine.get_engine()
-    rebuild_database(db_engine, drop_if_exists=False)
+    Engine.create_database(db_engine)
+    rebuild_database(db_engine)
 
     # Get message broker instance
     messagebroker = MessageBroker(get_messagebroker_backend())
diff --git a/src/context/service/Engine.py b/src/context/service/database/Engine.py
similarity index 100%
rename from src/context/service/Engine.py
rename to src/context/service/database/Engine.py
diff --git a/src/context/tests/conftest.py b/src/context/tests/conftest.py
index 38e488af476e0ef69533a6b2551c3bfe762b2330..dc54c8cdcbdc29e8bbdfb316f3214172c1a993b7 100644
--- a/src/context/tests/conftest.py
+++ b/src/context/tests/conftest.py
@@ -25,7 +25,7 @@ from common.message_broker.Factory import get_messagebroker_backend, BackendEnum
 from common.message_broker.MessageBroker import MessageBroker
 from context.client.ContextClient import ContextClient
 from context.service.ContextService import ContextService
-from context.service.Engine import Engine
+from context.service.database.Engine import Engine
 from context.service.database.models._Base import rebuild_database
 
 LOCAL_HOST = '127.0.0.1'