Рефакторинг: тесты, устранение дублирования, логирование - #16
Merged
Segate-ekb merged 9 commits intoAug 31, 2026
Merged
Segate-ekb merged 9 commits into
Segate-ekb merged 9 commits into
Conversation
- Новый модуль СлужебныйIbcmdRunner: общие функции трёх классов (сравнение версий, кавычки, yes/no-конверсии, проверка имён 1С, шаблоны переменных среды) — устранено дублирование между классами. - УправлениеИБ: выделены повторяющиеся блоки (проверка минимальной версии платформы, подготовка команды создания ИБ, параметры фоновой выгрузки, добавление массивов параметров, секретные параметры). - Подробное отладочное логирование всех операций: командная строка, длительность, код возврата; значения паролей в лог не попадают. - Сообщения об ошибках дополнены контекстом: команда, код возврата, ожидавшиеся коды, текущая версия платформы, подсказки по исправлению. - Разбор списка расширений выделен в тестируемый метод РазобратьСписокРасширений и устойчив к свойствам без значений. - Неявные проверки версии вида 'Если СравнитьВерсии(...) Тогда' заменены на явные '<> 0' с сохранением исторического поведения. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Исправленные ошибки: - опечатка 'Вставмит' роняла ПараметрыВеб_ПубликацияOData при передаче параметров повторного использования сеансов; - параметры http-сервисов добавлялись в массив веб-сервисов и публиковались в чужой подсекции; - секция application (ПараметрыВеб_Приложение) вообще не записывалась в конфигурационный файл; - рассинхрон ключей: 'allow-standart'/'allow-standard' — запрет стандартной аутентификации никогда не записывался; 'reuse-sessions'/'reuse-session' — параметры сеансов OData никогда не записывались; - все элементы массива разделителей ссылались на одно соответствие и получали значения последнего добавленного разделителя; - массивы разделителей и сервисов инициализировались как Соответствие; - незаполненные параметры (Неопределено) роняли запись секции — теперь пропускаются, сервер использует значения по умолчанию. Рефакторинг и логирование: - записи однотипных секций сведены к общим процедурам (ЗаписатьСекциюВерхнегоУровня, ЗаписатьПараметрыВеб_Сервисов, ЗаписатьПодсекциюВеб); - добавлено отладочное логирование установки параметров и записи секций; пароли в лог не выводятся; - текст ошибки о неизвестном типе значения дополнен именем параметра и списком допустимых типов. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Отладочное логирование установки параметров, командной строки запуска ibsrv, хода ожидания готовности сервера. - Ошибки дополнены контекстом: путь к несуществующим каталогам и файлам, диапазон допустимых портов, идентификатор уже запущенного процесса, файл готовности и время ожидания при неудачном запуске. - Префикс 'Процесс ibsrv не запустился!' сохранён — по нему работает ЭтоИсключенияЗапускаАС. - Общие функции (кавычки, имя лога) перенесены в СлужебныйIbcmdRunner. - Проверка номера порта выделена в общую процедуру. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- common_functions_tests: тесты служебного модуля (сравнение версий, кавычки, yes/no и true/false конверсии, проверка имён 1С, шаблоны переменных среды). - configfile_as_tests: характеризационные тесты генератора YAML — фиксируют содержимое всех секций конфигурационного файла автономного сервера, включая исправленные секции application, http-services, allow-standard и reuse-sessions. - ibcmdrunner_unit_tests: тесты УправлениеИБ без создания баз — версия, путь к приложению, разбор списка расширений по фиксированному тексту, контроль исключений при некорректных параметрах. - ibsrvrunner_tests: исправлен вызов несуществующего метода УстановитьВерсию — класс всегда предоставлял только УстановитьВерсиюПлатформы, тест падал. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
После переработки ИзменитьСвойстваРасширения (vanessa-opensource#15) имя профиля безопасности передаётся строкой, а не булевым значением - тест падал на проверке типа параметра. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Ручная построчная запись YAML заменена сборкой структуры данных (вложенные Соответствия и Массивы) и сериализацией библиотекой oscript-yaml (ПарсерYaml.ЗаписатьВФайл, UTF-8): - корректное экранирование значений (пути с обратными слэшами, строки с двоеточиями) гарантирует сериализатор; - номера портов записываются числами, а не строками в кавычках (ранее XMLСтрока превращала их в строки); - незаполненные (Неопределено) параметры не попадают в файл; - секции собираются функциями СобратьДанныеКонфигурации, СобратьСекциюHTTP, СобратьСекциюАутентификации, СобратьСекциюСервисов - код записи файла сведен к одному вызову. Тесты генератора переведены с текстовых сравнений на семантические: созданный файл разбирается обратно ПарсерYaml.ПрочитатьИзФайла и проверяется структура. Путь с обратными слэшами проверяется по тексту файла: в oscript-yaml 0.3.0 десериализатор некорректно разбирает последовательность \b (эскейп \b обрабатывается раньше \), сериализация при этом корректна. Требуемая версия среды поднята до 2.0.0 (требование oscript-yaml), добавлена зависимость oscript-yaml 0.3.0. Из служебного модуля удалена более не используемая БулевоВСтрокуTrueFalse. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Восстановлены байт-в-байт строки оригинала, отличавшиеся только пробелами и табами (хвостовые пробелы, пустые строки, отступы), а также случайно затронутые рефакторингом мелочи (Найти, имена локальных переменных). В диффе с апстримом остались только содержательные изменения. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- СравнитьВерсии: недостающие компоненты версии считаются нулями на месте вместо предварительного выравнивания массивов; - ЯвляетсяИменем: посимвольный перебор заменен регулярным выражением; - лог имен переменных среды перенесен в ДобавитьСекретныйПараметр, одноразовые хелперы ВыполнитьКоманду свернуты; - подготовка и выполнение команды создания ИБ слиты в ВыполнитьСозданиеИБ; - СобратьСекциюБазыДанных заинлайнена, в ПроверитьНомерПорта устранено дублирование текста ошибки. Итого -76 строк. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Цель
Масштабный рефакторинг библиотеки с сохранением обратной совместимости публичного API: покрытие тестами, устранение дублирования, подробное логирование и информативные сообщения об ошибках.
Обратная совместимость
Сигнатуры и семантика всех экспортных методов сохранены (кроме изменений, уже внесённых в апстриме в #15). Подтверждено прогоном интеграционных тестов на платформе 8.3.27.1859 до и после рефакторинга: результаты идентичны (27 пройдено / 1 падение
ТестДолжен_ОбновитьКонфигурациюДинамически, существовавшее до рефакторинга).Историческое поведение неявных проверок версии вида
Если СравнитьВерсии(Версия, "8.3.20") Тогда(истина при версии ≠ 8.3.20, включая более старые) сознательно сохранено и сделано явным (<> 0) с поясняющими комментариями — вероятно, имелось в виду> 0, но это отдельное решение мейнтейнеров.Тесты (38 новых, не требуют создания баз)
common_functions_tests.os— 15 тестов служебного модуля (сравнение версий, кавычки, конверсии yes/no и true/false, проверка имён 1С, шаблоны переменных среды);configfile_as_tests.os— 12 характеризационных тестов генератора YAML: фиксируют точное содержимое всех секций конфигурационного файла автономного сервера;ibcmdrunner_unit_tests.os— 9 тестовУправлениеИБбез создания баз (версия, путь, разбор списка расширений по фиксированному тексту, исключения при некорректных параметрах);ibsrvrunner_tests.os— починен вызов несуществующего методаУстановитьВерсию(класс всегда предоставлял толькоУстановитьВерсиюПлатформы), тест падал;ibcmdrunner-test.os— вызовИзменитьСвойстваРасширенияприведён к новому интерфейсу из Добавлена возможность выборочной установки свойств расширения #15 (имя профиля безопасности — строка), тест падал на проверке типа.Рефакторинг
СлужебныйIbcmdRunner— единая реализация функций, дублировавшихся в трёх классах:СравнитьВерсии,ОбернутьВКавычки, конверсии Булево↔yes/no и Булево→true/false,ЯвляетсяИменем,ШаблонПеременнойСреды,ИмяЛога.УправлениеИБ: четыре методаСоздатьИБ*сведены к одному шаблонному (ПодготовитьКомандуСозданияИБ); guard-проверки версии платформы и имён вынесены вПроверитьМинимальнуюВерсиюПлатформы/ПроверитьИмя; трижды повторявшийся блок--archive/--server/--threads— вДобавитьПараметрыФоновойВыгрузки; секретные параметры (логин/пароль через переменные среды) — вДобавитьСекретныйПараметр; разбор выводаextension listвыделен в тестируемый методРазобратьСписокРасширений.КонфигурационныйФайлАС: ручная построчная запись YAML заменена сборкой структуры данных (вложенные Соответствия/Массивы) и сериализацией библиотекой oscript-yaml (ПарсерYaml.ЗаписатьВФайл). Экранирование значений (пути с\, строки с:) гарантирует сериализатор; номера портов записываются числами (ранееXMLСтрокапревращала их в строки). Тесты генератора — семантические: файл разбирается обратноПрочитатьИзФайлаи проверяется структура.УправлениеАС: проверка порта вынесена в общую процедуру, общие функции — в модуль.Логирование
Подробный отладочный лог (
oscript.lib.ibcmdrunner, раздел добавлен в Readme):Сообщения об ошибках дополнены контекстом (исходный текст сохранён как префикс/часть сообщения — проверки по подстроке продолжают работать): команда и код возврата с ожидавшимися кодами; текущая и требуемая версия платформы; фактическое некорректное значение параметра; пути несуществующих каталогов/файлов; файл готовности и время ожидания при неудачном запуске ibsrv (префикс
Процесс ibsrv не запустился!сохранён дляЭтоИсключенияЗапускаАС).Исправленные ошибки (
КонфигурационныйФайлАС)Вставмит— крахПараметрыВеб_ПубликацияODataпри передаче параметров повторного использования сеансов.ДобавитьПараметрыХТТПСервисадобавлял сервис в массив веб-сервисов — http-сервисы публиковались в чужой подсекции.application(ПараметрыВеб_Приложение) вообще не записывалась в файл.allow-standart/allow-standard: запрет стандартной аутентификации никогда не записывался.reuse-sessions/reuse-session: параметры сеансов OData никогда не записывались.Соответствие— вызовДобавить*с флагом «не первый» падал.Неопределено) параметры роняли запись секции — теперь пропускаются (сервер использует значения по умолчанию).УправлениеИБ.РазобратьСписокРасширенийустойчив к строкам свойств без значения (раньше — выход за границы массива).Все исправления зафиксированы характеризационными тестами.
На заметку мейнтейнерам
shedule-jobsв секцииinfobaseпохож на опечатку (schedule-jobs?) — поведение сохранено, не менял.lib.config, зависимость oscript-yaml, исправления поведения генератора YAML).\bобрабатывается раньше\\, поэтому"d:\\bases"разбирается какd:<BS>ases(Десериализатор.os, строки 636–647 — цепочкаСтрЗаменить). Тест пути с обратными слэшами из-за этого проверяет текст файла, а не round-trip.🤖 Generated with Claude Code