From ef7bcd9c4f83663f5e19944f7aa8a4e9568784c0 Mon Sep 17 00:00:00 2001 From: Ivan Nikolaev-Axenov Date: Thu, 26 Jun 2025 15:39:54 +0300 Subject: [PATCH] README.md added to clr_test --- clr_test/README.md | 273 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 273 insertions(+) create mode 100644 clr_test/README.md diff --git a/clr_test/README.md b/clr_test/README.md new file mode 100644 index 000000000..b71a57320 --- /dev/null +++ b/clr_test/README.md @@ -0,0 +1,273 @@ +# Описание тестирования клиринговой системы +## Описание проведения тестирования в GitLab CI/CD +Файл .gitlab-ci.yml определяет этапы тестирования, сейчас существуют 3 этапа: + +* preflight - загрузка тест-кейсов из репозитория clearing_test +* build - сборка jar-файлов +* test - запуск тестирования + +Во время запуска тестирования jar-файлы копируются в папку `./clr_test/clearing-all/bin`, +а sql-файлы в `./clr_test/clearing-all/db` + +Основное взаимодействие с Docker'ом происходит посредством python-скрипта + +Данный скрипт копирует следующие файлы: + +* Тестовые файлы в `./clr_test/clearing-all/clearing_testing_utils/` +* Подготовленную базу данных в `./clr_test/db/data` + +Для обновления базы данных скрипт ищет все файлы updateDDL_*.sql в `./clr_test/clearing-all/db` выше чем `DDL_VERSION_FROM` из скрипта и объединяет их в один sql-файл в `./clr_test/db-updater/combined_update_ddl.sql` + +Удаляются старые образы: +* `docker rmi -f clr_test-db` +* `docker rmi -f clr_test-db-updater` +* `docker rmi -f clr_test-clearing_system` + +Выполняется запуск Docker Compose командой `docker compose up --abort-on-container-exit --exit-code-from clearing_system --build --force-recreate` + +В зависимости от кода выхода Docker заполняется файл `clr_test/results.txt` + +После выполнения скрипта ищется строка со словом `failed`, если она есть, то тест завершается в ошибкой + +## Описание создания подготовленной базы данных для тест-кейса +Репозиторий clearing_test содержит индивидуальные директории для каждого из тест-кейса: +* clearing_testing_utils – содержит входные и ожидаемые файлы клиринговой системы; +* data – сохраненное состояние базы данных для рассматриваемого тест-кейса; +* db – содержит, уникальные для конкретного тест-кейса, sql-файлы. + +Для начала очистим папку data и добавим в директорию db следующие файлы с сохранением последовательности: +* DDL.sql +* DICTIONARIES.sql +* MARKET.sql +* export.sql – уникален для тест-кейса, уже присутствует в директории +* test-data.sql – уникален для тест-кейса, уже присутствует в директории + +В корневой папке создадим файл docker-compose.yml со следующим содержанием: +```yaml +services: + test_db: + image: postgres:14.1-alpine + restart: always + security_opt: + - seccomp:unconfined + environment: + POSTGRES_USER: clearing + POSTGRES_PASSWORD: Aa111111 + POSTGRES_DB: clearing + POSTGRES_HOST_AUTH_METHOD: trust + volumes: + - ./data:/var/lib/postgresql/data + - ./db:/docker-entrypoint-initdb.d/ +``` + +Запустим Docker командой docker compose up, после инициализации базы данных остановим контейнер командой docker compose down, сохраненное состояние базы данных будет находиться в директории data. Важно, для сохранения корректной структуры при загрузке в GitLab необходимо добавить пустые файлы в пустые директории. +Например, посредством данной PowerShell команды: +``` +Get-ChildItem -Directory -Recurse | Where-Object { + (Get-ChildItem -Path $_.FullName -File).Count -eq 0 -and (Get-ChildItem -Path $_.FullName -Directory).Count -eq 0 +} | ForEach-Object { + $newFilePath = Join-Path $_.FullName ".gitkeep" + New-Item -ItemType file -Path $newFilePath -Force | Out-Null + Write-Host "Created file in: $($_.FullName)" +} +``` + +Также, если добавить папки db и data в их соответствующие директории по наименованию тест-кейса, можно обновить базы данных для все тест-кейсов одновременно, например, посредством следующего docker-compose.yml файла: +```yaml +services: + 1_0_sesn_mkr_curr: + image: postgres:14.1-alpine + restart: always + security_opt: + - seccomp:unconfined + environment: + POSTGRES_USER: clearing + POSTGRES_PASSWORD: Aa111111 + POSTGRES_DB: clearing + POSTGRES_HOST_AUTH_METHOD: trust + volumes: + - ./1_0_sesn_mkr_curr/data:/var/lib/postgresql/data + - ./1_0_sesn_mkr_curr/db:/docker-entrypoint-initdb.d/ + + 1_1_sesn_mkr_curr: + image: postgres:14.1-alpine + restart: always + security_opt: + - seccomp:unconfined + environment: + POSTGRES_USER: clearing + POSTGRES_PASSWORD: Aa111111 + POSTGRES_DB: clearing + POSTGRES_HOST_AUTH_METHOD: trust + volumes: + - ./1_1_sesn_mkr_curr/data:/var/lib/postgresql/data + - ./1_1_sesn_mkr_curr/db:/docker-entrypoint-initdb.d/ + + 1_2_sesn_mkr_curr_tsoper: + image: postgres:14.1-alpine + restart: always + security_opt: + - seccomp:unconfined + environment: + POSTGRES_USER: clearing + POSTGRES_PASSWORD: Aa111111 + POSTGRES_DB: clearing + POSTGRES_HOST_AUTH_METHOD: trust + volumes: + - ./1_2_sesn_mkr_curr_tsoper/data:/var/lib/postgresql/data + - ./1_2_sesn_mkr_curr_tsoper/db:/docker-entrypoint-initdb.d/ + + 2_0_sesn_mkr_medm: + image: postgres:14.1-alpine + restart: always + security_opt: + - seccomp:unconfined + environment: + POSTGRES_USER: clearing + POSTGRES_PASSWORD: Aa111111 + POSTGRES_DB: clearing + POSTGRES_HOST_AUTH_METHOD: trust + volumes: + - ./2_0_sesn_mkr_medm/data:/var/lib/postgresql/data + - ./2_0_sesn_mkr_medm/db:/docker-entrypoint-initdb.d/ + + 3_0_sesn_mkr_finl: + image: postgres:14.1-alpine + restart: always + security_opt: + - seccomp:unconfined + environment: + POSTGRES_USER: clearing + POSTGRES_PASSWORD: Aa111111 + POSTGRES_DB: clearing + POSTGRES_HOST_AUTH_METHOD: trust + volumes: + - ./3_0_sesn_mkr_finl/data:/var/lib/postgresql/data + - ./3_0_sesn_mkr_finl/db:/docker-entrypoint-initdb.d/ + + 5_0_sesn_fond_trdt: + image: postgres:14.1-alpine + restart: always + security_opt: + - seccomp:unconfined + environment: + POSTGRES_USER: clearing + POSTGRES_PASSWORD: Aa111111 + POSTGRES_DB: clearing + POSTGRES_HOST_AUTH_METHOD: trust + volumes: + - ./5_0_sesn_fond_trdt/data:/var/lib/postgresql/data + - ./5_0_sesn_fond_trdt/db:/docker-entrypoint-initdb.d/ + + 5_1_sesn_fond_trdt_nodepo: + image: postgres:14.1-alpine + restart: always + security_opt: + - seccomp:unconfined + environment: + POSTGRES_USER: clearing + POSTGRES_PASSWORD: Aa111111 + POSTGRES_DB: clearing + POSTGRES_HOST_AUTH_METHOD: trust + volumes: + - ./5_1_sesn_fond_trdt_nodepo/data:/var/lib/postgresql/data + - ./5_1_sesn_fond_trdt_nodepo/db:/docker-entrypoint-initdb.d/ + + 6_0_sesn_fond_ipob: + image: postgres:14.1-alpine + restart: always + security_opt: + - seccomp:unconfined + environment: + POSTGRES_USER: clearing + POSTGRES_PASSWORD: Aa111111 + POSTGRES_DB: clearing + POSTGRES_HOST_AUTH_METHOD: trust + volumes: + - ./6_0_sesn_fond_ipob/data:/var/lib/postgresql/data + - ./6_0_sesn_fond_ipob/db:/docker-entrypoint-initdb.d/ + + 7_0_sesn_fond_ipo0: + image: postgres:14.1-alpine + restart: always + security_opt: + - seccomp:unconfined + environment: + POSTGRES_USER: clearing + POSTGRES_PASSWORD: Aa111111 + POSTGRES_DB: clearing + POSTGRES_HOST_AUTH_METHOD: trust + volumes: + - ./7_0_sesn_fond_ipo0/data:/var/lib/postgresql/data + - ./7_0_sesn_fond_ipo0/db:/docker-entrypoint-initdb.d/ + + 8_0_sesn_fond_ipot: + image: postgres:14.1-alpine + restart: always + security_opt: + - seccomp:unconfined + environment: + POSTGRES_USER: clearing + POSTGRES_PASSWORD: Aa111111 + POSTGRES_DB: clearing + POSTGRES_HOST_AUTH_METHOD: trust + volumes: + - ./8_0_sesn_fond_ipot/data:/var/lib/postgresql/data + - ./8_0_sesn_fond_ipot/db:/docker-entrypoint-initdb.d/ + + 9_0_sessn_mult_unit: + image: postgres:14.1-alpine + restart: always + security_opt: + - seccomp:unconfined + environment: + POSTGRES_USER: clearing + POSTGRES_PASSWORD: Aa111111 + POSTGRES_DB: clearing + POSTGRES_HOST_AUTH_METHOD: trust + volumes: + - ./9_0_sessn_mult_unit/data:/var/lib/postgresql/data + - ./9_0_sessn_mult_unit/db:/docker-entrypoint-initdb.d/ + + 9_1_sessn_mult_unit_tcr: + image: postgres:14.1-alpine + restart: always + security_opt: + - seccomp:unconfined + environment: + POSTGRES_USER: clearing + POSTGRES_PASSWORD: Aa111111 + POSTGRES_DB: clearing + POSTGRES_HOST_AUTH_METHOD: trust + volumes: + - ./9_1_sessn_mult_unit_tcr/data:/var/lib/postgresql/data + - ./9_1_sessn_mult_unit_tcr/db:/docker-entrypoint-initdb.d/ + + 9_2_sessn_mult_unit_tkr: + image: postgres:14.1-alpine + restart: always + security_opt: + - seccomp:unconfined + environment: + POSTGRES_USER: clearing + POSTGRES_PASSWORD: Aa111111 + POSTGRES_DB: clearing + POSTGRES_HOST_AUTH_METHOD: trust + volumes: + - ./9_2_sessn_mult_unit_tkr/data:/var/lib/postgresql/data + - ./9_2_sessn_mult_unit_tkr/db:/docker-entrypoint-initdb.d/ + + 9_3_sessn_mult_unit_dmav: + image: postgres:14.1-alpine + restart: always + security_opt: + - seccomp:unconfined + environment: + POSTGRES_USER: clearing + POSTGRES_PASSWORD: Aa111111 + POSTGRES_DB: clearing + POSTGRES_HOST_AUTH_METHOD: trust + volumes: + - ./9_3_sessn_mult_unit_dmav/data:/var/lib/postgresql/data + - ./9_3_sessn_mult_unit_dmav/db:/docker-entrypoint-initdb.d/ +``` \ No newline at end of file