Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions src/Классы/ibcmdrunner.os
Original file line number Diff line number Diff line change
Expand Up @@ -1085,6 +1085,12 @@
УспешныеКодыВозврата.Добавить(УстановленныйКодВозврата);
КонецЕсли;

// При ошибке аутентификации ibcmd запрашивает пароль в консоли: без ввода команда зависает
Если ПараметрыЗапуска.Найти("<") = Неопределено Тогда
ПараметрыЗапуска.Добавить("<");
ПараметрыЗапуска.Добавить(?(ЭтоWindows, "NUL", "/dev/null"));
КонецЕсли;

КомандаВыполнения = ПутьКПриложению;

Лог.Отладка("Запуск: %1 %2", КомандаВыполнения, СтрСоединить(ПараметрыЗапуска, " "));
Expand Down Expand Up @@ -1213,8 +1219,8 @@
Лог.Отладка("Значение параметра %1 передается через переменную среды %2", ИмяПараметра, ИмяПеременнойСреды);

ПеременныеСредыКоманды.Вставить(ИмяПеременнойСреды, Значение);
МассивПараметров.Добавить(СтрШаблон("%1=%2", ИмяПараметра,
СлужебныйIbcmdRunner.ШаблонПеременнойСреды(ИмяПеременнойСреды, ЭтоWindows)));
Подстановка = ОбернутьВКавычки(СлужебныйIbcmdRunner.ШаблонПеременнойСреды(ИмяПеременнойСреды, ЭтоWindows));
МассивПараметров.Добавить(СтрШаблон("%1=%2", ИмяПараметра, Подстановка));

КонецПроцедуры

Expand Down Expand Up @@ -1336,7 +1342,7 @@
СтрокаДляЗаписи = "";
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайлаПараметров, Кодировка);
Для Каждого ВыбранныйФайл Из ВыбранныеФайлы Цикл
СтрокаДляЗаписи = ?(СтрокаДляЗаписи = "", "", Символы.ПС) + СокрЛП(ВыбранныйФайл);
СтрокаДляЗаписи = СтрокаДляЗаписи + ?(СтрокаДляЗаписи = "", "", Символы.ПС) + СокрЛП(ВыбранныйФайл);
КонецЦикла;
ЗаписьТекста.ЗаписатьСтроку(СокрЛП(СтрокаДляЗаписи), "");
ЗаписьТекста.Закрыть();
Expand Down
73 changes: 73 additions & 0 deletions tests/ibcmdrunner-test.os
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@
СписокТестов.Добавить("ТестДолжен_ЗагрузитьВыбранныйФайлКонфигурации");
СписокТестов.Добавить("ТестДолжен_ВернутьНомерВерсии");
СписокТестов.Добавить("ТестДолжен_СоздатьПустуюФайловуюБазу");
СписокТестов.Добавить("ТестДолжен_ПередатьВсеВыбранныеФайлы");
СписокТестов.Добавить("ТестДолжен_ПередатьПараметрыАвторизацииСоСпецсимволами");
СписокТестов.Добавить("ТестДолжен_ЗавершитьсяОшибкойПриЗапросеПароля");

Если ВерсияПлатформыБольше("8.3.21") Тогда
СписокТестов.Добавить("ТестДолжен_СоздатьФайловуюБазуИзАрхива");
Expand Down Expand Up @@ -586,6 +589,33 @@

КонецПроцедуры

Процедура ТестДолжен_ПередатьВсеВыбранныеФайлы() Экспорт

// Дано
УстановитьПараметрыВременнойИБ();
КаталогВыгрузки = ПолныйПутьШаблонаДанных("1.0", "files");
УправлениеИБ.СоздатьИБИзФайловКонфигурации(КаталогВыгрузки);
УправлениеИБ.УстановитьПараметрыАвторизацииИБ(""); // в ИБ из файлов нет пользователей

ВыбранныеФайлы = Новый Массив;
ВыбранныеФайлы.Добавить("Missing.xml");
ВыбранныеФайлы.Добавить("Configuration.xml");

ПараметрыМетода = Новый Массив;
ПараметрыМетода.Добавить(КаталогВыгрузки);
ПараметрыМетода.Добавить(ВыбранныеФайлы);
ПараметрыМетода.Добавить("");
ПараметрыМетода.Добавить(Истина);

// Тогда: первый файл списка дошёл до ibcmd, и она сообщила, что его нет
Ожидаем.Что(УправлениеИБ)
.Метод("ЗагрузитьВыбранныеФайлыКонфигурации", ПараметрыМетода)
.ВыбрасываетИсключение("Missing.xml");

УдалитьФайлы(ВременныйКаталог);

КонецПроцедуры

Процедура ТестДолжен_ВернутьНомерВерсии() Экспорт

// Когда
Expand Down Expand Up @@ -634,6 +664,49 @@

КонецПроцедуры

Процедура ТестДолжен_ПередатьПараметрыАвторизацииСоСпецсимволами() Экспорт

// Когда
Пользователь = "user & (x) ^ %PATH% $HOME";
ТекстОшибки = ТекстОшибкиАутентификации(Пользователь, "pass & word");

// Тогда: ibcmd называет пользователя в ошибке, значит имя дошло целиком
Утверждения.ПроверитьИстину(СтрНайти(ТекстОшибки, Пользователь) > 0,
"Имя пользователя должно дойти до ibcmd целиком: " + ТекстОшибки);

КонецПроцедуры

Процедура ТестДолжен_ЗавершитьсяОшибкойПриЗапросеПароля() Экспорт

// Когда: ibcmd запрашивает пароль в консоли
ТекстОшибки = ТекстОшибкиАутентификации("admin", "admin");

// Тогда
Утверждения.ПроверитьИстину(ЗначениеЗаполнено(ТекстОшибки),
"Команда должна завершиться ошибкой, а не ждать ввода пароля");

КонецПроцедуры

Функция ТекстОшибкиАутентификации(Пользователь, Пароль)

// В пустой ИБ нет пользователей: аутентификация заведомо не проходит
УстановитьПараметрыВременнойИБ();
УправлениеИБ.СоздатьИБ();
УправлениеИБ.УстановитьПараметрыАвторизацииИБ(Пользователь, Пароль);

ТекстОшибки = "";
Попытка
УправлениеИБ.ВыгрузитьКонфигурациюВФайл(ОбъединитьПути(ВременныйКаталог, "1Cv8.cf"));
Исключение
ТекстОшибки = ОписаниеОшибки();
КонецПопытки;

УдалитьФайлы(ВременныйКаталог);

Возврат ТекстОшибки;

КонецФункции

Функция ПолучитьПутьКIBCMD()
Возврат ПолучитьПеременнуюСреды("IBCMD_PATH", РасположениеПеременнойСреды.Процесс);
КонецФункции
Expand Down
Loading