diff --git a/README.md b/README.md index cf8bc58..2c33abb 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,24 @@ Сообщить(ПроксиСервер); +``` +* Чтение параметров из vault +```bsl + + НастройкиVault = Новый Структура; + НастройкиVault.Вставить("Адрес", "https://vault.server.local"); + НастройкиVault.Вставить("Токен", ПолучитьПеременнуюСреды("VAULT_TOKEN")); + НастройкиVault.Вставить("Запрос", "v1/my_secret_store/super_secret"); + + МенеджерПараметров = Новый МенеджерПараметров(); + МенеджерПараметров.ИспользоватьПровайдерVAULT(); + МенеджерПараметров.УстановитьНастройкиVault(НастройкиVault); + МенеджерПараметров.Прочитать(); + + ПроксиСервер = МенеджерПараметров.Параметр("Настройки.Глобальные.НастройкиПрокси.Сервер") + + Сообщить(ПроксиСервер); + ``` * Чтения параметров через конструктор параметров diff --git a/packagedef b/packagedef index 2fbb049..a18a2ff 100644 --- a/packagedef +++ b/packagedef @@ -4,7 +4,7 @@ // Описание.Имя("configor") - .Версия("0.9.1") + .Версия("0.10.0") .Автор("Khorev Aleksey") .АдресАвтора("Khorevaa@gmail.com") .Описание("Библиотека для работы с конфигурационными файлами в формате json, yaml") @@ -18,10 +18,13 @@ .ЗависитОт("fluent", "0.6.0") .ЗависитОт("notify", "0.2.0") .ЗависитОт("tempfiles") + .ЗависитОт("1connector", "2.3.3") .ЗависитОт("reflector", "0.3.1") .РазработкаЗависитОт("coverage", "0.6.1") .РазработкаЗависитОт("1testrunner", "1.8.0") .РазработкаЗависитОт("1bdd", "1.14.0") + .РазработкаЗависитОт("1commands", "1.5.0") + .РазработкаЗависитОт("winow", "0.11.0") .ОпределяетКласс("МенеджерПараметров", "src/Классы/МенеджерПараметров.os") .ОпределяетКласс("КонструкторПараметров", "src/Классы/КонструкторПараметров.os") ; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260Vault.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260Vault.os" new file mode 100644 index 0000000..b268a9d --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260Vault.os" @@ -0,0 +1,69 @@ + +Перем Адрес; // Строка +Перем Токен; // Строка +Перем Запрос; // Строка + +#Область Публичное_API + +// Устанавливает путь к корню API +// +// Параметры: +// АдресАпи - Строка - URL сервера + корень API +// +// Возвращаемое значение: +// Объект.НастройкиПровайдераVault - ссылка на текущий элемент класса <НастройкиПровайдераVault> +// +Функция УстановитьАдрес(Знач АдресАпи) Экспорт + Адрес = АдресАпи; + Возврат ЭтотОбъект; +КонецФункции + +// Устанавливает токен авторизации +// +// Параметры: +// ТокенАвторизации - Строка - токен авторизации +// +// Возвращаемое значение: +// Объект.НастройкиПровайдераVault - ссылка на текущий элемент класса <НастройкиПровайдераVault> +// +Функция УстановитьТокен(Знач ТокенАвторизации) Экспорт + Токен = ТокенАвторизации; + Возврат ЭтотОбъект; +КонецФункции + +// Устанавливает путь к корню API +// +// Параметры: +// УРЛЗапроса - Строка - URL запроса данных vault +// +// Возвращаемое значение: +// Объект.НастройкиПровайдераVault - ссылка на текущий элемент класса <НастройкиПровайдераVault> +// +Функция УстановитьЗапрос(Знач УРЛЗапроса) Экспорт + Запрос = УРЛЗапроса; + Возврат ЭтотОбъект; +КонецФункции + +// Возвращает структуру настроек провайдера +// +// Возвращаемое значение: +// Структура - подготовленная структура настроек для файловых провайдеров +// * Адрес - Строка - путь к API +// * Токен - Строка - токен авторизации +// * Запрос - Строка - путь к данным vault +// +Функция ПолучитьНастройки() Экспорт + + Настройка = Новый Структура(); + Настройка.Вставить("Адрес", Адрес); + Настройка.Вставить("Токен", Токен); + Настройка.Вставить("Запрос", Запрос); + + Возврат Настройка; +КонецФункции + +#КонецОбласти + +#Область Вспомогательные_процедуры_и_функции + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index 3a8a141..35b8b40 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -83,6 +83,10 @@ КонецФункции +Функция ЭтоПровайдерVault() Экспорт + Возврат ВРег(ТипПровайдера) = ВРег("vault"); +КонецФункции + Процедура ПриСозданииОбъекта(Знач ВходящийКлассПровайдера) ИнтерфейсПровайдера = Новый ИнтерфейсОбъекта; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262VAULT.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262VAULT.os" new file mode 100644 index 0000000..2bafcce --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262VAULT.os" @@ -0,0 +1,137 @@ +#Использовать asserts +#Использовать logos +#Использовать 1connector + +Перем Лог; + +#Область ПрограммныйИнтерфейс + +// Возвращает приоритет провайдера +// +// Возвращаемое значение: +// Число - текущий приоритет провайдера +// +Функция Приоритет() Экспорт + Возврат 1; +КонецФункции + +// Возвращает идентификатор провайдера +// +// Возвращаемое значение: +// Строка - текущий идентификатор провайдера +// +Функция Идентификатор() Экспорт + Возврат "vault"; +КонецФункции + +// Возвращает тип провайдера +// +// Возвращаемое значение: +// Строка - текущий тип провайдера +// +Функция ТипПровайдера() Экспорт + Возврат "vault"; +КонецФункции + +// Выполняет чтение параметров для провайдера +// +// Параметры: +// НастройкиПровайдера - Структура - структура настроек провайдера +// +// Возвращаемое значение: +// Соответствие - результат чтения провайдера +// +Функция ПрочитатьПараметры(Знач НастройкиПровайдера) Экспорт + + ПрочитанныеПараметры = Новый Соответствие; + + Адрес = НастройкиПровайдера.Адрес; + Токен = НастройкиПровайдера.Токен; + Запрос = НастройкиПровайдера.Запрос; + + Если Не ЗначениеЗаполнено(Адрес) Тогда + Лог.Отладка("Не указан адрес сервера. Чтение невозможно"); + Возврат ПрочитанныеПараметры; + КонецЕсли; + + Лог.Отладка("Выполняю чтение данных vault из <%1>/%2", Адрес, Запрос); + ПрочитанныеПараметры = Прочитать(Адрес, Токен, Запрос); + + Возврат ПрочитанныеПараметры; +КонецФункции + +#КонецОбласти + +// Выполнить чтение настроек из vault +// +// Параметры: +// Адрес - Cтрока - URL сервера vault +// Токен - Cтрока - токен авторизации +// Запрос - Cтрока - путь к данным vault +// Возвращаемое значение: +// Соответствие - итоговые параметры +// +Функция Прочитать(Знач Адрес, Знач Токен, Знач Запрос) + + Настройки = Новый Соответствие; + + URL = СтрШаблон("%1/%2", Адрес, Запрос); + Заголовки = Новый Соответствие; + + Если ЗначениеЗаполнено(Токен) Тогда + Заголовки.Вставить("Authorization", СтрШаблон("Bearer %1", Токен)); + КонецЕсли; + + ДопПараметры = Новый Структура("Заголовки", Заголовки); + + Попытка + + Ответ = КоннекторHTTP.Get(URL, , ДопПараметры); + ВолтОтветил = ВолтОтветил(Ответ); + Если Не ВолтОтветил Тогда + Лог.Отладка("Ошибка получения данных из vault: + |%1", КодыСостоянияHTTP.Представление(Ответ.КодСостояния)); + КонецЕсли; + + ДесериализованныйОтвет = Ответ.Json(); + Ошибки = ДесериализованныйОтвет.Получить("errors"); + Если Не Ошибки = Неопределено Тогда + Для Каждого Ошибка Из Ошибки Цикл + Лог.Отладка(Ошибка["message"]); + КонецЦикла; + КонецЕсли; + + Настройки = ?(ВолтОтветил, ДесериализованныйОтвет["data"], Новый Соответствие); + + Лог.Отладка("Итоговые параметры:"); + ПоказатьПараметрыВРежимеОтладки(Настройки); + + Исключение + + Лог.Отладка("Ошибка чтения настроек vault из %1 + |%2", URL, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ВызватьИсключение; + + КонецПопытки; + + Возврат Настройки; +КонецФункции + +Функция ВолтОтветил(Знач Ответ) + + ХорошиеКоды = Новый Массив; + ХорошиеКоды.Добавить(200); + ХорошиеКоды.Добавить(204); + + Возврат Не ХорошиеКоды.Найти(Ответ.КодСостояния) = Неопределено; +КонецФункции + +Процедура ПоказатьПараметрыВРежимеОтладки(ЗначенияПараметров) + + ПроцессорВывода = Новый ВыводВРежимеОтладки(Лог); + ПроцессорВывода.ПоказатьНастройкиВРежимеОтладки(ЗначенияПараметров); + +КонецПроцедуры + +Лог = Логирование.ПолучитьЛог("oscript.lib.configor.vault"); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\271\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\271\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index a135ddb..7d0e690 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\271\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\271\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -336,7 +336,7 @@ ОбработатьПараметрыРекурсивно(Значение, ИмяФайлаПараметров); Иначе - Лог.Отладка("Ищю ключ чтения файла: <%1>", Ключ); + Лог.Отладка("Ищу ключ чтения файла: <%1>", Ключ); Если СтрНачинаетсяС( ВРег(Ключ), ВРег(ПрефиксПараметрФайл)) Тогда КлючиКДополнительномуЧтению.Добавить(Ключ); КонецЕсли; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index b4bf79d..7ee8028 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -15,6 +15,7 @@ Перем ПровайдерыПараметров; // Соответствие Перем НастройкаФайловогоПровайдера; // Класс НастройкиФайловогоПровайдера +Перем НастройкаПровайдераVault; // Класс НастройкиПровайдераVault Перем ИнтерфейсПриемника; // Класс ИнтерфейсОбъекта @@ -112,6 +113,20 @@ КонецПроцедуры +// Устанавливает настройки провайдера параметров +// +// Параметры: +// Настройки - Структура - настройки провайдера +// +Процедура УстановитьНастройкиVault(Знач Настройки) Экспорт + + НастройкаПровайдераVault = ПолучитьНастройкуПровайдераVault(); + + НастройкаПровайдераVault.УстановитьАдрес(Настройки.Адрес) + .УстановитьТокен(Настройки.Токен) + .УстановитьЗапрос(Настройки.Запрос); +КонецПроцедуры + // Добавляет в таблицу провайдеров произвольный класс-провайдер // // Параметры: @@ -180,6 +195,17 @@ КонецПроцедуры +// Добавляет и включает встроенный провайдер VAULT +// +// Параметры: +// Приоритет - Число - Числовой приоритет выполнения провайдеры (по умолчанию 0) +// +Процедура ИспользоватьПровайдерVAULT(Знач Приоритет = 0) Экспорт + + ДобавитьПровайдерПараметров(Новый ПровайдерПараметровVAULT, Приоритет); + +КонецПроцедуры + // Производит автоматическую настройку провайдеров // // Параметры: @@ -324,9 +350,12 @@ ИдентификаторПровайдера = КлассПровайдера.Идентификатор; - ПараметрыПровайдера = Новый Структура; Если КлассПровайдера.ЭтоФайловыйПровайдер() Тогда ПараметрыПровайдера = ПолучитьНастройкуФайловогоПровайдера().ПолучитьНастройки(); + ИначеЕсли КлассПровайдера.ЭтоПровайдерVault() Тогда + ПараметрыПровайдера = ПолучитьНастройкуПровайдераVault().ПолучитьНастройки(); + Иначе + ПараметрыПровайдера = Новый Структура; КонецЕсли; Попытка @@ -419,6 +448,16 @@ КонецФункции +Функция ПолучитьНастройкуПровайдераVault() + + Если НастройкаПровайдераVault = Неопределено Тогда + НастройкаПровайдераVault = Новый НастройкиПровайдераVault; + КонецЕсли; + + Возврат НастройкаПровайдераVault; + +КонецФункции + #КонецОбласти #Область Инициализация @@ -450,4 +489,4 @@ #КонецОбласти -Лог = Логирование.ПолучитьЛог("oscript.lib.configor"); \ No newline at end of file +Лог = Логирование.ПолучитьЛог("oscript.lib.configor"); diff --git "a/tests/fixtures/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271Vault/app/controls/test_controller.os" "b/tests/fixtures/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271Vault/app/controls/test_controller.os" new file mode 100644 index 0000000..f9ea842 --- /dev/null +++ "b/tests/fixtures/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271Vault/app/controls/test_controller.os" @@ -0,0 +1,48 @@ +&Пластилин Перем ВебСервер; + +&Контроллер("/v1") +Процедура ПриСозданииОбъекта() + +КонецПроцедуры + +&ТочкаМаршрута("my_secret_store/super_secret") +Процедура ДанныеVault(ТелоЗапросОбъект, Ответ) Экспорт + + ТестовыйОтвет = "{ + | ""data"" : { + | ""owner"" : { + | ""contact"" : { + | ""email"" : """", + | ""tel"" : ""77777777"" + | }, + | ""person"" : { + | ""address"" : ""Alpha Centauri"" + | } + | }, + | ""admin"" : { + | ""contact"" : { + | ""email"" : ""admin.ru"", + | } + | } + | } + |}"; + + Ответ.УстановитьТипКонтента("json"); + Ответ.ТелоТекст = ТестовыйОтвет; +КонецПроцедуры + +&ТочкаМаршрута("kill") +Процедура ЗавершениеРаботы(ТелоЗапросОбъект, Ответ) Экспорт + ФоновыеЗадания.Выполнить(ЭтотОбъект, "ОстановитсяОтложено"); +КонецПроцедуры + +&ТочкаМаршрута("ping") +Процедура Проверка(ТелоЗапросОбъект, Ответ) Экспорт + Ответ.УстановитьТипКонтента("txt"); + Ответ.ТелоТекст = "ОК"; +КонецПроцедуры + +Процедура ОстановитсяОтложено() Экспорт + Приостановить(100); + ВебСервер.Стоп(); +КонецПроцедуры diff --git "a/tests/fixtures/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271Vault/main.os" "b/tests/fixtures/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271Vault/main.os" new file mode 100644 index 0000000..eb78900 --- /dev/null +++ "b/tests/fixtures/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271Vault/main.os" @@ -0,0 +1,16 @@ +#Использовать autumn +#Использовать winow +#Использовать autumn-logos + +НастройкиВина = Новый Соответствие(); +НастройкиВина.Вставить("Автостарт", true); +НастройкиВина.Вставить("Порт", 3333); + +Детальки = Новый Соответствие(); +Детальки.Вставить("winow", НастройкиВина); + +СоветДругогоМастера = Новый СоветДругогоМастера(); +СоветДругогоМастера.ЗначенияДеталек(Детальки); + +Поделка = Новый Поделка(СоветДругогоМастера); +Поделка.ЗапуститьПриложение(); diff --git "a/tests/fixtures/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271Vault/oscript.cfg" "b/tests/fixtures/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271Vault/oscript.cfg" new file mode 100644 index 0000000..d353076 --- /dev/null +++ "b/tests/fixtures/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271Vault/oscript.cfg" @@ -0,0 +1 @@ +lib.system=../../../oscript_modules diff --git "a/tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262VAULT.os" "b/tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262VAULT.os" new file mode 100644 index 0000000..39a60d6 --- /dev/null +++ "b/tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262VAULT.os" @@ -0,0 +1,96 @@ +#Использовать "../src" +#Использовать asserts +#Использовать 1connector +#Использовать 1commands + +Перем ПроцессВина; +Перем АдресВина; + +&ПередКаждым +Процедура ЗапуститьВино() Экспорт + ЗапуститьТестовыйВолт(); +КонецПроцедуры + +&ПослеКаждого +Процедура ОстановитьВино() Экспорт + УбитьТестовыйВолт(); +КонецПроцедуры + +&Тест +Процедура ПроверитьПолучениеПараметровИзVault() Экспорт + + // Дано + НастройкиVault = Новый Структура; + НастройкиVault.Вставить("Адрес", АдресВина); + НастройкиVault.Вставить("Токен", "VAULT_TOKEN"); + НастройкиVault.Вставить("Запрос", "v1/my_secret_store/super_secret"); + + МенеджерПараметров = Новый МенеджерПараметров(); + МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровVAULT()); + МенеджерПараметров.УстановитьНастройкиVault(НастройкиVault); + + // Когда + МенеджерПараметров.Прочитать(); + + // Тогда + Ожидаем.Что(МенеджерПараметров.Параметр("owner.contact.email")).Равно(""); + Ожидаем.Что(МенеджерПараметров.Параметр("owner.contact.tel")).Равно("77777777"); + Ожидаем.Что(МенеджерПараметров.Параметр("owner.person.address")).Равно("Alpha Centauri"); + Ожидаем.Что(МенеджерПараметров.Параметр("admin.contact.email")).Равно("admin.ru"); + Ожидаем.Что(МенеджерПараметров.Параметр("person.address")).ЭтоНеопределено(); + +КонецПроцедуры + +Функция КаталогFixtures() + Возврат ОбъединитьПути(КаталогБиблиотеки(), "tests", "fixtures"); +КонецФункции + +Функция КаталогБиблиотеки() + Возврат ОбъединитьПути(ТекущийСценарий().Каталог, ".."); +КонецФункции + +Процедура ЗапуститьТестовыйВолт() + + Путь = ОбъединитьПути(КаталогFixtures(), "ТестовыйVault"); + + ЗапускВина = Новый Команда; + ЗапускВина.УстановитьСтрокуЗапуска("oscript main.os"); + ЗапускВина.УстановитьРабочийКаталог(Путь); + + ПроцессВина = ЗапускВина.ЗапуститьПроцесс(); + + Для Сч = 0 По 10 Цикл + + Приостановить(1000); + + Попытка + + Ответ = КоннекторHTTP.Get( + СтрШаблон("%1/v1/ping", АдресВина), , + Новый Структура("Заголовки", Новый Соответствие) + ).Текст(); + + Если Ответ = "ОК" Тогда + Прервать; + КонецЕсли; + + Исключение + Продолжить; + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + +Процедура УбитьТестовыйВолт() + + КоннекторHTTP.Get( + СтрШаблон("%1/v1/kill", АдресВина), , + Новый Структура("Заголовки", Новый Соответствие) + ); + + ПроцессВина.Завершить(); + +КонецПроцедуры + +АдресВина = "http://localhost:3333";