/
Wolf84
/
sandbox
Обзор
Документация
Войти
/
Wolf84
/
sandbox
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
scripts/tests.py
108 строк
5 KB
Aleksandr Tambovskiy
Реструктурировал проект
30 янв 2026, 20:23
30 янв 2026, 20:23
7a47d95
Код
Авторство
О чём код?
import os from unittest import TestCase from scripts.repos_to_config import repos_to_config, read_repos class TestReposToConfig(TestCase): tpl_project = "project.tpl" tpl_host = "host.tpl" config_file = "../compose/repos.yml" @classmethod def get_file_lines(cls, file_name: str) -> int: with open(file_name, 'r', encoding='utf8') as f: lines = f.readlines() return len(lines) @classmethod def get_block_count(cls, blocks: dict) -> int: return len(blocks) @classmethod def get_project_count(cls, blocks: dict) -> int: count = 0 for block in blocks: for key, value in block.items(): count = count + cls.get_block_count(value) return count def test_empty_templates(self): """Тест преобразования конфигурации по пустому списку шаблонов""" config = repos_to_config(self.config_file) second = len(config) self.assertEqual(0, second, "Не пустой результат") def test_two_templates(self): """Тест преобразования конфигурации по 2м шаблонам""" repos = read_repos(self.config_file).get('manager') first = self.get_file_lines(self.tpl_project) * self.get_project_count(repos.get('projects')) first = first + self.get_file_lines(self.tpl_host) * self.get_block_count(repos.get('hosts')) config = repos_to_config(self.config_file, project=self.tpl_project, host=self.tpl_host) lines = config.split('\n') second = len(lines) self.assertEqual(first, second, "Не совпадает предполагаемое кол-во строк результата") class TestReposTemplate(TestCase): tmp_config = "tests_repos.tmp" tmp_template = "tests_tpl.tmp" @classmethod def setUpClass(cls): """Выполняется один раз перед всеми тестами класса.""" # Создаём временный файл и записываем туда конфигурацию with open(cls.tmp_config, mode="w+", encoding='utf8') as file: file.writelines([ 'manager:\n', ' projects: # список проектов\n', ' - FK0001: # Проект 1\n', ' - TEST_REPO1: { "host": "v-host", "db": "TEST_DB", "scheme": "public"}\n', ' - TEST_REPO2: { "host": "192.168.0.10", "db": "TEST_DB", "scheme": "public"}\n', ' hosts:\n', ' - v-host: {"address": "192.168.0.10", "driver": "POSTGRES", "audit": {"user": "FSAUDIT", "pass": "FSAUDIT"}}\n' ' - v-host2: {"address": "192.168.0.11", "driver": "POSTGRES", "audit": {"user": "FSAUDIT", "pass": "FSAUDIT"}}\n' ]) @classmethod def tearDownClass(cls): """Выполняется один раз после всех тестов класса.""" # Удаляем временные файлы, если они существуют if os.path.exists(cls.tmp_config): os.remove(cls.tmp_config) if os.path.exists(cls.tmp_template): os.remove(cls.tmp_template) def test_file_exists(self): """Тест существования временного файла""" self.assertTrue(os.path.exists(self.tmp_config)) def test_project_subs(self): """Тесты с возможными подстановками для проекта""" with open(self.tmp_template, mode="w+", encoding='utf8') as file: file.write("${project_number}_${project_name}_${project}_${project.host}_${project.db}_${project.scheme}") config = repos_to_config(self.tmp_config, project=self.tmp_template) self.assertEqual( '\n'.join(["0_FK0001.TEST_REPO1_TEST_REPO1_192.168.0.10_TEST_DB_public", "1_FK0001.TEST_REPO2_TEST_REPO2_192.168.0.10_TEST_DB_public"]), config ) def test_host_subs(self): """Тесты с возможными подстановками для хост""" with open(self.tmp_template, mode="w+", encoding='utf8') as file: file.write("${host_number}_${host_name}_${host}_${host.address}_${host.audit.user}_${host.audit.pass}") config = repos_to_config(self.tmp_config, host=self.tmp_template) self.assertEqual( '\n'.join(["0_v-host_v-host_192.168.0.10_FSAUDIT_FSAUDIT", "1_v-host2_v-host2_192.168.0.11_FSAUDIT_FSAUDIT"]), config )