/
EvilBeaver
/
OneScript
Обзор
Документация
Войти
/
EvilBeaver
/
OneScript
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
v1.8.0
tests/binary-objects.os
352 строки
21 KB
Vladimir Bondarevskiy
Научить ХешированиеДанных работать с потоками
28 окт 2019, 03:36
Не верифицирован
28 окт 2019, 03:36
9316ff1
Код
Авторство
О чём код?
Перем юТест; //////////////////////////////////////////////////////////////////// // Программный интерфейс Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт юТест = ЮнитТестирование; ВсеТесты = Новый Массив; ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСоздаетсяБуферДвоичныхДанных"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоМожноЗаписатьБайты"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоМожноПрочитатьБайты"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоМожноЗаписатьПрочитатьЦелое16"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоМожноЗаписатьПрочитатьЦелое16BigEndian"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоМожноЗаписатьПрочитатьЦелое32"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоМожноЗаписатьПрочитатьЦелое32BigEndian"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоМожноЗаписатьПрочитатьЦелое64"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоМожноЗаписатьПрочитатьЦелое64BigEndian"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСоздаетсяФайловыйПоток"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСоздаетсяПотокВПамяти"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоВозможнаЗаписьВФайл"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСчитываетсяТекстДвоичнымЧтением"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоЧтениеДанныхЧитаетВсеДанныеМетодомПрочитатьСимволы"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоЗаписьДанныхНеЗакрываетПоток"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоПриЗаписиВБуферСНевернымИндексомВыбрасываетсяИсключение"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоКорректноРаботаютПобитовыеОперацииЗаписиВБуферДвоичныхДанных"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоМетодОткрытьПотокДляЧтенияВозвращаетПотокТолькоДляЧтения"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоХешированиеРаботаетСПотоком"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоХешированиеРаботаетСДвоичнымиДанными"); Возврат ВсеТесты; КонецФункции Процедура ПослеЗапускаТеста() Экспорт юТест.УдалитьВременныеФайлы(); КонецПроцедуры Функция ПолучитьБуферСДанными() Буфер = Новый БуферДвоичныхДанных(10); Для Сч = 0 По 9 Цикл Буфер[Сч] = Сч+1; КонецЦикла; Возврат Буфер; КонецФункции Процедура ТестДолжен_ПроверитьЧтоСоздаетсяБуферДвоичныхДанных() Экспорт Б = ПолучитьБуферСДанными(); юТест.ПроверитьРавенство(10, Б.Размер); Для Сч = 0 По Б.Размер-1 Цикл юТест.ПроверитьРавенство(Сч+1, Б[Сч], "Проверка значения в индексе " + Сч); КонецЦикла; КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоМожноЗаписатьБайты() Экспорт Б = ПолучитьБуферСДанными(); Чистый = Новый БуферДвоичныхДанных(Б.Размер); Чистый.Записать(0, Б); юТест.ПроверитьРавенство(Б.Размер, Чистый.Размер); Для Сч = 0 По Чистый.Размер-1 Цикл юТест.ПроверитьРавенство(Б[Сч], Чистый[Сч], "Сверка в индексе " + Сч); юТест.ПроверитьРавенство(Сч+1, Чистый[Сч], "Сверка значения в индексе " + Сч); КонецЦикла; Чистый = Новый БуферДвоичныхДанных(5); Чистый.Записать(0, Б, 5); Для Сч = 0 По Чистый.Размер-1 Цикл юТест.ПроверитьРавенство(Б[Сч], Чистый[Сч], "Сверка частичной записи в индексе " + Сч); КонецЦикла; КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоМожноПрочитатьБайты() Экспорт Б = ПолучитьБуферСДанными(); Прочитанный = Б.Прочитать(2,2); юТест.ПроверитьРавенство(2, Прочитанный.Размер); юТест.ПроверитьРавенство(3, Прочитанный[0]); юТест.ПроверитьРавенство(4, Прочитанный[1]); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоМожноЗаписатьПрочитатьЦелое16() Экспорт Б = Новый БуферДвоичныхДанных(4); Б.ЗаписатьЦелое16(0, 255); юТест.ПроверитьРавенство(255, Б.ПрочитатьЦелое16(0)); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоМожноЗаписатьПрочитатьЦелое16BigEndian() Экспорт Б = Новый БуферДвоичныхДанных(4); Б.ЗаписатьЦелое16(0, 255); юТест.ПроверитьРавенство(65280, Б.ПрочитатьЦелое16(0, ПорядокБайтов.BigEndian)); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоМожноЗаписатьПрочитатьЦелое32() Экспорт юТест.ПодробныеОписанияОшибок(Истина); Б = Новый БуферДвоичныхДанных(4); Б.ЗаписатьЦелое32(0, 4278190080); юТест.ПроверитьРавенство(4278190080, Б.ПрочитатьЦелое32(0)); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоМожноЗаписатьПрочитатьЦелое32BigEndian() Экспорт Б = Новый БуферДвоичныхДанных(4); Б.ЗаписатьЦелое32(0, 255); юТест.ПроверитьРавенство(4278190080, Б.ПрочитатьЦелое32(0, ПорядокБайтов.BigEndian)); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоМожноЗаписатьПрочитатьЦелое64() Экспорт Б = Новый БуферДвоичныхДанных(8); Б.ЗаписатьЦелое32(0, 255); юТест.ПроверитьРавенство(255, Б.ПрочитатьЦелое32(0)); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоМожноЗаписатьПрочитатьЦелое64BigEndian() Экспорт Б = Новый БуферДвоичныхДанных(8); Б.ЗаписатьЦелое64(0, 255); юТест.ПроверитьРавенство(18374686479671623680, Б.ПрочитатьЦелое64(0, ПорядокБайтов.BigEndian)); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоСоздаетсяПотокВПамяти() Экспорт ПотокСЕмкостью = Новый ПотокВПамяти(100); ПростоПоток = Новый ПотокВПамяти; Буфер = Новый БуферДвоичныхДанных(10); ПотокПоБуферу = Новый ПотокВПамяти(Буфер); юТест.ПроверитьРавенство(10, ПотокПоБуферу.Размер()); ПотокПоБуферу.КопироватьВ(ПотокСЕмкостью); юТест.ПроверитьРавенство(10, ПотокСЕмкостью.Размер()); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоСоздаетсяФайловыйПоток() Экспорт Поток = ФайловыеПотоки.Открыть(ТекущийСценарий().Источник, РежимОткрытияФайла.Открыть); Поток.Закрыть(); Поток = Новый ФайловыйПоток(ТекущийСценарий().Источник, РежимОткрытияФайла.Открыть); Поток.Закрыть(); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоВозможнаЗаписьВФайл() Экспорт Буфер = ПолучитьБуферСДанными(); Файл = юТест.ИмяВременногоФайла(); Поток = ФайловыеПотоки.Создать(Файл); Поток.Записать(Буфер, 0, Буфер.Размер); Поток.Закрыть(); ФайлОбъект = Новый Файл(Файл); юТест.ПроверитьИстину(ФайлОбъект.Существует()); юТест.ПроверитьРавенство(10, ФайлОбъект.Размер()); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоСчитываетсяТекстДвоичнымЧтением() Экспорт ДД = Новый ДвоичныеДанные(ОбъединитьПути(ТекущийСценарий().Каталог, "templateslib/TemplateData.txt")); ЧтениеДанных = Новый ЧтениеДанных(ДД); Строка = ЧтениеДанных.ПрочитатьСтроку(); юТест.ПроверитьРавенство("ПРИВЕТ, Я МАКЕТ", Строка); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоЧтениеДанныхЧитаетВсеДанныеМетодомПрочитатьСимволы() Экспорт ДД = Новый ДвоичныеДанные(ОбъединитьПути(ТекущийСценарий().Каталог, "templateslib/TemplateData.txt")); ЧтениеДанных = Новый ЧтениеДанных(ДД); ЧтениеДанных.Пропустить(3); Строка = ЧтениеДанных.ПрочитатьСимволы(); юТест.ПроверитьРавенство("ПРИВЕТ, Я МАКЕТ", Строка, "Неопределено"); ЧтениеДанных.Закрыть(); ЧтениеДанных = Новый ЧтениеДанных(ДД); ЧтениеДанных.Пропустить(3); Строка = ЧтениеДанных.ПрочитатьСимволы(0); юТест.ПроверитьРавенство("ПРИВЕТ, Я МАКЕТ", Строка, "Ноль символов"); ЧтениеДанных.Закрыть(); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоЗаписьДанныхНеЗакрываетПоток() Экспорт Текст = "Какой-то текст"; Кодировка = "UTF-8"; ПотокВПамяти = Новый ПотокВПамяти; Запись = Новый ЗаписьДанных(ПотокВПамяти, Кодировка); Запись.ЗаписатьСтроку(Текст, Кодировка); Запись.Закрыть(); ПотокВПамяти.Перейти(0, ПозицияВПотоке.Начало); ДвоичныеДанные = ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные(); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоПриЗаписиВБуферСНевернымИндексомВыбрасываетсяИсключение() Экспорт ВторойБуфер = ПолучитьБуферДвоичныхДанныхИзHexСтроки("01 02 03 04"); Попытка Буфер = ПолучитьБуферДвоичныхДанныхИзHexСтроки("01 02 03"); Буфер.ЗаписатьПобитовоеИсключительноеИли(3, ВторойБуфер); Исключение юТест.ПроверитьВхождение(ОписаниеОшибки(), "Переполнение при работе с буфером"); КонецПопытки; Попытка Буфер = ПолучитьБуферДвоичныхДанныхИзHexСтроки("01 02 03"); Буфер.ЗаписатьПобитовоеИсключительноеИли(0, ВторойБуфер); Исключение юТест.ПроверитьВхождение(ОписаниеОшибки(), "Переполнение при работе с буфером"); КонецПопытки; Попытка Буфер = ПолучитьБуферДвоичныхДанныхИзHexСтроки("01 02 03"); Буфер.ЗаписатьПобитовоеИсключительноеИли(1, ВторойБуфер, 3); Исключение юТест.ПроверитьВхождение(ОписаниеОшибки(), "Переполнение при работе с буфером"); КонецПопытки; Попытка Буфер = ПолучитьБуферДвоичныхДанныхИзHexСтроки("01 02 03"); Буфер.ЗаписатьПобитовоеИсключительноеИли(-1, ВторойБуфер, 3); Исключение юТест.ПроверитьВхождение(ОписаниеОшибки(), "Значение индекса выходит за границы диапазона"); КонецПопытки; КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоКорректноРаботаютПобитовыеОперацииЗаписиВБуферДвоичныхДанных() Экспорт ВторойБуфер = ПолучитьБуферДвоичныхДанныхИзHexСтроки("01 02 03 04"); Буфер = ПолучитьБуферДвоичныхДанныхИзHexСтроки("01 02 03"); Буфер.ЗаписатьПобитовоеИсключительноеИли(0, ПолучитьБуферДвоичныхДанныхИзHexСтроки("01 02 03")); юТест.ПроверитьРавенство(ПолучитьHexСтрокуИзБуфераДвоичныхДанных(Буфер), "000000"); Буфер = ПолучитьБуферДвоичныхДанныхИзHexСтроки("01 02 03"); Буфер.ЗаписатьПобитовоеИсключительноеИли(0, ВторойБуфер, 3); юТест.ПроверитьРавенство(ПолучитьHexСтрокуИзБуфераДвоичныхДанных(Буфер), "000000"); Буфер = ПолучитьБуферДвоичныхДанныхИзHexСтроки("01 02 03"); Буфер.ЗаписатьПобитовоеИ(1, ВторойБуфер, 2); юТест.ПроверитьРавенство(ПолучитьHexСтрокуИзБуфераДвоичныхДанных(Буфер), "010002"); Буфер = ПолучитьБуферДвоичныхДанныхИзHexСтроки("01 02 03"); Буфер.ЗаписатьПобитовоеИли(1, ВторойБуфер, 2); юТест.ПроверитьРавенство(ПолучитьHexСтрокуИзБуфераДвоичныхДанных(Буфер), "010303"); Буфер = ПолучитьБуферДвоичныхДанныхИзHexСтроки("01 02 03"); Буфер.ЗаписатьПобитовоеИНе(1, ВторойБуфер, 2); юТест.ПроверитьРавенство(ПолучитьHexСтрокуИзБуфераДвоичныхДанных(Буфер), "010201"); Буфер = ПолучитьБуферДвоичныхДанныхИзHexСтроки("01 02 03"); Буфер.ЗаписатьПобитовоеИсключительноеИли(1, ВторойБуфер, 2); юТест.ПроверитьРавенство(ПолучитьHexСтрокуИзБуфераДвоичныхДанных(Буфер), "010301"); Буфер = ПолучитьБуферДвоичныхДанныхИзHexСтроки("00 00 00"); Буфер.ЗаписатьПобитовоеИли(1, ВторойБуфер, 2); юТест.ПроверитьРавенство(ПолучитьHexСтрокуИзБуфераДвоичныхДанных(Буфер), "000102"); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоМетодОткрытьПотокДляЧтенияВозвращаетПотокТолькоДляЧтения() Экспорт Поток = ПолучитьДвоичныеДанныеИзHexСтроки("1b1ec4166a11c03b3afefaea442e7709").ОткрытьПотокДляЧтения(); юТест.ПроверитьЛожь(Поток.ДоступнаЗапись); юТест.ПроверитьИстину(Поток.ДоступноИзменениеПозиции); юТест.ПроверитьИстину(Поток.ДоступноЧтение); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоХешированиеРаботаетСПотоком() Экспорт ДвоичныеДанные = ПолучитьДвоичныеДанныеИзHexСтроки("1b1e c416 6a11 c03b 3afe faea 442e 7709"); Поток = ДвоичныеДанные.ОткрытьПотокДляЧтения(); Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256); Хеширование.Добавить(Поток, 2); юТест.ПроверитьРавенство( "0b427acd4088d248408e38b34fb378172a05bd71e58b384f5b279beea7aea467", НРег(ПолучитьHexСтрокуИзДвоичныхДанных(Хеширование.ХешСумма))); юТест.ПроверитьРавенство(2, Поток.ТекущаяПозиция()); Хеширование.Добавить(Поток, 12); юТест.ПроверитьРавенство( "2a0815b87888a03406d7ab482b965361eb96112db88e8ab6ea214cb107ee8469", НРег(ПолучитьHexСтрокуИзДвоичныхДанных(Хеширование.ХешСумма))); юТест.ПроверитьРавенство(14, Поток.ТекущаяПозиция()); Хеширование.Добавить(Поток, 4); юТест.ПроверитьРавенство( "817eece1eff577a2d28f1478f496e3880f360611d1f264086fd77cf338464654", НРег(ПолучитьHexСтрокуИзДвоичныхДанных(Хеширование.ХешСумма))); юТест.ПроверитьРавенство(16, Поток.ТекущаяПозиция()); Хеширование.Добавить(Поток, 4); юТест.ПроверитьРавенство( "817eece1eff577a2d28f1478f496e3880f360611d1f264086fd77cf338464654", НРег(ПолучитьHexСтрокуИзДвоичныхДанных(Хеширование.ХешСумма))); юТест.ПроверитьРавенство(16, Поток.ТекущаяПозиция()); Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256); Поток = ДвоичныеДанные.ОткрытьПотокДляЧтения(); Поток.Перейти(2, ПозицияВПотоке.Начало); Хеширование.Добавить(Поток); юТест.ПроверитьРавенство( "bda43a0f1c70decfa45d8a2825e6f6facfe0ef11e385794803a165f209b56737", НРег(ПолучитьHexСтрокуИзДвоичныхДанных(Хеширование.ХешСумма))); юТест.ПроверитьРавенство(16, Поток.ТекущаяПозиция()); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоХешированиеРаботаетСДвоичнымиДанными() Экспорт ДвоичныеДанные = ПолучитьДвоичныеДанныеИзHexСтроки("1b1e c416 6a11 c03b 3afe faea 442e 7709"); Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256); Хеширование.Добавить(ДвоичныеДанные); юТест.ПроверитьРавенство( "817eece1eff577a2d28f1478f496e3880f360611d1f264086fd77cf338464654", НРег(ПолучитьHexСтрокуИзДвоичныхДанных(Хеширование.ХешСумма))); КонецПроцедуры