Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
Nivanchenko committed Jan 10, 2025
1 parent dc0db28 commit f51d72e
Show file tree
Hide file tree
Showing 12 changed files with 278 additions and 9 deletions.
1 change: 1 addition & 0 deletions autumn-properties.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
{
"КаталогСПриложениями": "./tests/app",
"ЗадержкаПередЧтениемСокета": 65,
"РазмерБуфера": 0,
"КаталогиСФайлами": {
"/tests": "./tests/app/files"
}
Expand Down
1 change: 1 addition & 0 deletions example/autumn-properties.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"Порт": 3333,
"ИмяХоста": "localhost",
"АвтоСтарт": true,
"РазмерБуфера": 0,
"КаталогСПриложениями": "./hwapp",
"КаталогиСФайлами": {
"/images": "./hwapp/files"
Expand Down
4 changes: 3 additions & 1 deletion example/hwapp/ОтправкаФайлов.os
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@

&Отображение("./hwapp/view/result-form.html")
&ТочкаМаршрута("uploadForm")
Процедура ОбработкаФормы(ДанныеФормы, Ответ) Экспорт
Процедура ОбработкаФормы(ДанныеФормы, Ответ, Запрос) Экспорт

Запрос.ТелоДвоичныеДанные.Записать(ОбъединитьПути("..","tests", "tmp", "q_" + Новый УникальныйИдентификатор() + ".txt"));

Ответ.Модель = Новый Структура("Имя, ДатаРождения, Фото");

Expand Down
100 changes: 100 additions & 0 deletions input.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
1234567890qwertyuiopasdfghjklzxcvbnm-1234567890QWERTYUIOPASDFGHJKLZXCVBNM
3 changes: 2 additions & 1 deletion packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@


Описание.Имя("winow")
.Версия("0.8.4")
.Версия("0.8.5")
.Автор("Никита Иванченко")
.АдресАвтора("https://github.com/Nivanchenko")
.Описание("Минималистичный веб-сервер на нативном OneScript")
Expand All @@ -91,4 +91,5 @@
.РазработкаЗависитОт("1commands")
.РазработкаЗависитОт("1testrunner")
.РазработкаЗависитОт("coverage")
.РазработкаЗависитОт("1connector")
;
27 changes: 23 additions & 4 deletions src/Классы/ВходящийЗапрос.os
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@

ЧастьРазделителя = ПолучитьДвоичныеДанныеИзСтроки("--");
ЧастьРазделителяСВКПС = ПолучитьДвоичныеДанныеИзСтроки("--" + Символы.ВК + Символы.ПС);
РазделительСтрок = ПолучитьДвоичныеДанныеИзСтроки(Символы.ВК + Символы.ПС);
РазделительВКПС = ПолучитьДвоичныеДанныеИзСтроки(Символы.ВК + Символы.ПС);
РазделительСтрок = ПолучитьДвоичныеДанныеИзBase64Строки("77u/");

Если СтрНайти(НРег(Заголовки["Content-Type"]), "multipart/form-data") > 0 Тогда
РазделительДанных = СокрЛП(СтрЗаменить(Заголовки["Content-Type"], "multipart/form-data; boundary=", ""));
Expand All @@ -97,12 +98,12 @@
Если РазделеннаяЧастьФормы.Количество() = 1 Тогда
Метаданные = РазделеннаяЧастьФормы[0];
ИначеЕсли РазделеннаяЧастьФормы.Количество() > 1 Тогда
Структура.Значение = РазделеннаяЧастьФормы[РазделеннаяЧастьФормы.ВГраница()];
Структура.Значение = УдалитьДвойнойДефисВКонцеДД(РазделеннаяЧастьФормы[РазделеннаяЧастьФормы.ВГраница()]);
РазделеннаяЧастьФормы.Удалить(РазделеннаяЧастьФормы.ВГраница());
МетаданныеДД = Новый Массив();
Для Каждого РазделеннаяЧасть из РазделеннаяЧастьФормы Цикл
МетаданныеДД.Добавить(РазделеннаяЧасть);
МетаданныеДД.Добавить(РазделительСтрок);
МетаданныеДД.Добавить(РазделительВКПС);
КонецЦикла;
Метаданные = СоединитьДвоичныеДанные(МетаданныеДД);
Иначе
Expand All @@ -124,13 +125,31 @@

ДанныеФормы.Добавить(Структура);

КонецЦикла
КонецЦикла;

КонецЕсли;

Возврат ДанныеФормы;
КонецФункции

Функция УдалитьДвойнойДефисВКонцеДД(ДвоичныеДанные)
Массив = РазделитьДвоичныеДанные(ДвоичныеДанные, 1);
СимволКУдалению = ПолучитьДвоичныеДанныеИзСтроки("-");
ВГраница = Массив.ВГраница();
Если Массив.Количество() > 1
И Массив[ВГраница] = СимволКУдалению
И Массив[ВГраница - 1] = СимволКУдалению Тогда

Массив.Удалить(Массив.ВГраница());
Массив.Удалить(Массив.ВГраница());

Возврат СоединитьДвоичныеДанные(Массив);

Иначе
Возврат ДвоичныеДанные;
КонецЕсли;
КонецФункции

Функция УбратьКовычкиИзЗначенийСоответствия(Соответствие)
Результат = Новый Соответствие();
Для Каждого КиЗ Из Соответствие Цикл
Expand Down
16 changes: 16 additions & 0 deletions tests/app/КонтролМультипарт.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@

&Контроллер("/multipart")
Процедура ПриСозданииОбъекта()

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

&ТочкаМаршрута("upload")
Процедура Загрузить(Запрос, ДанныеФормы) Экспорт

Запрос.ТелоДвоичныеДанные.Записать(ОбъединитьПути("tests", "tmp", "q_" + Новый УникальныйИдентификатор() + ".txt"));

Файл = ОбъединитьПути("tests", "tmp", "output.txt");
ДД = ДанныеФормы.НайтиЗначениеПоМетаданным(Новый Структура("name", "f1"));

ДД.Записать(Файл);
КонецПроцедуры
Binary file modified tests/features/multipart-form-data
Binary file not shown.
Binary file added tests/features/multipart-form-data1
Binary file not shown.
100 changes: 100 additions & 0 deletions tests/multipartformdata.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
#Использовать autumn
#Использовать ".."
#Использовать asserts
#Использовать 1connector

Перем Поделка;
Перем КаталогСФайлами;

Процедура ПередЗапускомТеста() Экспорт
ВключитьСервер();
КаталогСФайлами = ОбъединитьПути("tests", "tmp");
// ФС.ОбеспечитьПустойКаталог(КаталогСФайлами);
КонецПроцедуры

Процедура ПослеЗапускаТеста() Экспорт
КонецПроцедуры

Процедура ВключитьСервер()

Если Поделка = Неопределено Тогда
Поделка = Новый Поделка();
Поделка.ЗапуститьПриложение();
ВебСервер = Поделка.НайтиЖелудь("ВебСервер");
ФоновыеЗадания.Выполнить(ВебСервер, "Старт");
// Подождем что бы сервер успел запустится и проинициализироваться.
Приостановить(1000);
Настройки = Поделка.НайтиЖелудь("Настройки");
Настройки.ЗадержкаПередЗакрытиемСокета = 300;
Настройки.ИнтервалПроверкиСоединенийСерверныхСобытий = 100;
КонецЕсли;

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

Функция СгенерироватьФайл(ИмяФайла, КоличествоСтрок)
Текст = "1234567890qwertyuiopasdfghjklzxcvbnm-" + ВРег("1234567890qwertyuiopasdfghjklzxcvbnm");
ПутьКФайлу = ОбъединитьПути(КаталогСФайлами, ИмяФайла);
ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, , "");
Для Сч = 1 по КоличествоСтрок Цикл
ЗаписьТекста.ЗаписатьСтроку(Текст);
КонецЦикла;
ЗаписьТекста.Закрыть();

Возврат ПутьКФайлу;
КонецФункции

Функция ХешФайла(ПутьКФайлу)
ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5);
ХешированиеДанных.ДобавитьФайл(ПутьКФайлу);
Хеш = ХешированиеДанных.ХешСуммаСтрокой;

Возврат Хеш;
КонецФункции

&Тест
Процедура ОтправкаМаленькогоФайла() Экспорт

// Дано
ФайлИмя = СгенерироватьФайл("input.txt", 10);

Хеш1 = ХешФайла(ФайлИмя);

Файлы = Новый Структура;
Файлы.Вставить("Имя", "f1");
Файлы.Вставить("ИмяФайла", "file1.txt");
Файлы.Вставить("Данные", Новый ДвоичныеДанные(ФайлИмя));
Файлы.Вставить("Тип", "text/plain");

// Когда
Ответ = КоннекторHTTP.Post("http://localhost:3333/multipart/upload", Неопределено, Неопределено, Новый Структура("Файлы,Таймаут", Файлы, 500));
Хеш2 = ХешФайла(ОбъединитьПути(КаталогСФайлами, "output.txt"));

// Тогда
Ожидаем.Что(Ответ.КодСостояния).Равно(200);
Ожидаем.Что(Хеш1).Равно(Хеш2);

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

&Тест
Процедура ОтправкаБольшогоФайла()

// Дано
ФайлИмя = СгенерироватьФайл("input.txt", 30000);

Хеш1 = ХешФайла(ФайлИмя);

Файлы = Новый Структура;
Файлы.Вставить("Имя", "f1");
Файлы.Вставить("ИмяФайла", "file1.txt");
Файлы.Вставить("Данные", Новый ДвоичныеДанные(ФайлИмя));
Файлы.Вставить("Тип", "text/plain");

// Когда
Ответ = КоннекторHTTP.Post("http://localhost:3333/multipart/upload", Неопределено, Неопределено, Новый Структура("Файлы,Таймаут", Файлы, 500));
Хеш2 = ХешФайла(ОбъединитьПути(КаталогСФайлами, "output.txt"));

// Тогда
Ожидаем.Что(Ответ.КодСостояния).Равно(200);
Ожидаем.Что(Хеш1).Равно(Хеш2);

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

0 comments on commit f51d72e

Please sign in to comment.