# Описание тестирования клиринговой системы ## Описание проведения тестирования в 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-скрипта Для выбора определенных тест-кейсов можно задать переменную окружения TEST_CASES, например: `5.0.SESN.FOND.TRDT;5.1.SESN.FOND.TRDT.NODEPO` (для разделения используется `;`) Данный скрипт копирует следующие файлы: * Тестовые файлы в `./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/ ```