diff --git a/templates/test_jobs.gitlab-ci.yml b/templates/test_jobs.gitlab-ci.yml
index b5b279301caa2332221be07b10de5581cae07136..6a860fe31a7c8288ffb4ed9a29f6312087637379 100644
--- a/templates/test_jobs.gitlab-ci.yml
+++ b/templates/test_jobs.gitlab-ci.yml
@@ -26,6 +26,7 @@ variables:
 
 .pytest_based_template:
   variables:
+    FF_NETWORK_PER_BUILD: 1
     JUNIT_REPORT: "report.xml"  # should be ovverided by derived jobs
     PYTEST_BASED_IMAGE_NAME: ""  # "$CI_REGISTRY_IMAGE/ci-base-image$TEST_IMAGE_TAG"
     POETRY_INSTALL_ROOT_DIR: ""  # $CI_PROJECT_DIR/tests/hive-local-tools
@@ -35,7 +36,10 @@ variables:
   before_script:
     - python3 -m venv venv/
     - . venv/bin/activate
-    - (cd "${POETRY_INSTALL_ROOT_DIR}" && poetry install)
+    - echo "Entering ${POETRY_INSTALL_ROOT_DIR}"
+    - cd "${POETRY_INSTALL_ROOT_DIR}"
+    - poetry install
+
   artifacts:
     reports:
       junit: $JUNIT_REPORT
@@ -47,6 +51,58 @@ variables:
     when: always
     expire_in: 1 week
 
+.pattern_test_executor:
+  extends: .pytest_based_template
+  variables:
+    TESTED_ENDPOINT: ""    # To be overrided in derived job
+    TEST_SUITE: ""         # To be overrided in derived job
+    PATTERN_TESTS_DIR: ""  # To be overrided in derived job
+    DIRECT_CALLS: 0        # To be overrided in derived job
+
+  script:
+    # run pattern tests
+    - cd "${PATTERN_TESTS_DIR}"
+    - ./run_tests.sh ${TESTED_ENDPOINT} `git rev-parse --show-toplevel` "${TEST_SUITE}" ${DIRECT_CALLS}
+
+
+# Special version of pattern tests to be executed against Hived API node instance
+# Defined here, to be shared between .comparison_tests_template and finally reused at Hived CI to verify AH node
+.hived_pattern_tests_template:
+  extends: .pattern_test_executor
+  variables:
+    HIVED_IMAGE_NAME: ""  # Must be overrided at derived job
+    TESTED_ENDPOINT: hived-instance:8091
+  services:
+    - name: $HIVED_IMAGE_NAME
+      alias: hived-instance
+      variables:
+        DATADIR: $DATA_CACHE_HIVE/datadir
+        SHM_DIR: $DATA_CACHE_HIVE/shm_dir
+        LOG_FILE: $CI_JOB_NAME.log
+      command: ["--replay-blockchain", "--stop-replay-at-block=5000000"]
+
+
+.haf_app_pattern_tests_template:
+  extends: .pattern_test_executor
+  variables:
+    HAF_IMAGE_NAME: ""  # Must be overrided at derived job
+    HAF_APP_IMAGE: ""  # Image path name to be used at app testing. App will be instantiated as a service.
+    HAF_APP_PORT: ""  # To be specified by derived job
+    TESTED_ENDPOINT: app:${HAF_APP_PORT}
+  services:
+    - name: ${HAF_IMAGE_NAME}
+      alias: haf-instance
+      variables:
+        # Allow access from any network to eliminate CI IP addressing problems
+        PG_ACCESS: "host    haf_block_log    haf_app_admin    0.0.0.0/0    trust"
+        DATADIR: $DATA_CACHE_HAF/datadir
+        SHM_DIR: $DATA_CACHE_HAF/shm_dir
+        LOG_FILE: $CI_JOB_NAME.log
+      command: ["--replay-blockchain", "--stop-replay-at-block=5000000"]
+    - name: ${HAF_APP_IMAGE}
+      alias: app
+
+
 .tox_test_job:
   image: registry.gitlab.syncad.com/hive/common-ci-configuration/tox-test-runner:${TOX_IMAGE_TAG}
   artifacts:
@@ -71,15 +127,23 @@ variables:
       alias: app
 
 .comparison_tests_template:
-  extends: .pattern_tests_template
+  extends: .haf_app_pattern_tests_template
   variables:
+    COMPARISON_TESTS_DIR: ""  # Must be specified by derived job
+
     HIVED_ENDPOINT: hived-instance:8091
+    JUNIT_REPORT: "comparsion_tests.xml"
+
   services:
-    - !reference [.pattern_tests_template, services]
-    - name: $HIVED_IMAGE_NAME
-      alias: hived-instance
-      variables:
-        DATADIR: $DATA_CACHE_HIVE/datadir
-        SHM_DIR: $DATA_CACHE_HIVE/shm_dir
-        LOG_FILE: $CI_JOB_NAME.log
-      command: ["--replay-blockchain", "--stop-replay-at-block=5000000"]
+    - !reference [.hived_pattern_tests_template, services]
+    - !reference [.haf_app_pattern_tests_template, services]
+  script:
+    - cd "${COMPARISON_TESTS_DIR}"
+    - pytest -n 8 --junitxml="${JUNIT_REPORT}" --ref http://$HIVED_ENDPOINT --test http://$TESTED_ENDPOINT --start 4900000 --stop 4915000
+
+  artifacts:
+    paths:
+      - "$CI_JOB_NAME"
+      - "**/from_node.log"
+      - "**/ah.log"
+      - "**/*.out.json"