|
1 | 1 | Перем юТест; |
2 | 2 |
|
3 | 3 | Перем мАдресРесурса; // URL ресурса (хоста) для тестирования запросов |
| 4 | +Перем ПортТестовогоСервера; |
4 | 5 |
|
5 | 6 | Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт |
6 | 7 |
|
|
36 | 37 | ВсеТесты.Добавить("ТестДолженПроверитьЧтоМожноЗадатьТелоЗапросаСПомощьюПотока"); |
37 | 38 |
|
38 | 39 | ВсеТесты.Добавить("ТестДолженПроверитьЧтоМетодыБезТелаПриУстановленномТелеУспешноВыполняются"); |
| 40 | + ВсеТесты.Добавить("ТестДолженПроверитьЧтоРаботаетПолучениеДвоичныхДанныхИзОтвета"); |
| 41 | + |
| 42 | + ВсеТесты.Добавить("ТестДолженПроверитьПолучениеStreamEvent"); |
39 | 43 |
|
40 | 44 | Возврат ВсеТесты; |
41 | 45 | КонецФункции |
|
376 | 380 |
|
377 | 381 | КонецПроцедуры |
378 | 382 |
|
| 383 | +Процедура ТестДолженПроверитьЧтоРаботаетПолучениеДвоичныхДанныхИзОтвета() Экспорт |
| 384 | + |
| 385 | + Запрос = Новый HttpЗапрос("/bytes/10"); |
| 386 | + Соединение = Новый HttpСоединение(мАдресРесурса); |
| 387 | + Ответ = Соединение.ВызватьHTTPМетод("GET", Запрос); |
| 388 | + |
| 389 | + ДД = Ответ.ПолучитьТелоКакДвоичныеДанные(); |
| 390 | + юТест.ПроверитьТип(ДД, Тип("ДвоичныеДанные")); |
| 391 | + юТест.ПроверитьРавенство(ДД.Размер(), 10); |
| 392 | + |
| 393 | +КонецПроцедуры |
| 394 | + |
| 395 | +Процедура ТестДолженПроверитьПолучениеStreamEvent() Экспорт |
| 396 | + |
| 397 | + МенеджерФоновыхЗаданий = Новый МенеджерФоновыхЗаданий; |
| 398 | + ЗаданиеВебсервера = МенеджерФоновыхЗаданий.Выполнить(ЭтотОбъект, "Вебсервер"); |
| 399 | + |
| 400 | + ПортТестовогоСервера = 8181; |
| 401 | + Соединение = Новый HTTPСоединение("http://127.0.0.1:" + ПортТестовогоСервера); |
| 402 | + Запрос = Новый HTTPЗапрос("/"); |
| 403 | + |
| 404 | + // Подождем пока поднимится сервер |
| 405 | + Приостановить(1000); |
| 406 | + |
| 407 | + Старт = ТекущаяУниверсальнаяДатаВМиллисекундах(); |
| 408 | + |
| 409 | + Ответ = Соединение.ВызватьHTTPМетод("GET", Запрос); |
| 410 | + |
| 411 | + Прошло = ТекущаяУниверсальнаяДатаВМиллисекундах() - Старт; |
| 412 | + ютест.ПроверитьМеньше(Прошло, 600); |
| 413 | + |
| 414 | + ТелоПоток = Ответ.ПолучитьТелоКакПоток(); |
| 415 | + юТест.ПроверитьТип(ТелоПоток, Тип("Поток")); |
| 416 | + |
| 417 | + ЧтениеДанных = Новый ЧтениеДанных(ТелоПоток); |
| 418 | + Таймаут = 600; |
| 419 | + Пока Истина Цикл |
| 420 | + |
| 421 | + ПрочтенныеДанные = ЧтениеДанных.Прочитать(20); |
| 422 | + |
| 423 | + Строка = ПолучитьСтрокуИзДвоичныхДанных(ПрочтенныеДанные.ПолучитьДвоичныеДанные()); |
| 424 | + Прошло = ТекущаяУниверсальнаяДатаВМиллисекундах() - Старт; |
| 425 | + |
| 426 | + ютест.ПроверитьМеньше(Прошло, Таймаут); |
| 427 | + |
| 428 | + Таймаут = Таймаут + Таймаут; |
| 429 | + Если Строка = "" ИЛИ Строка = "data: [DONE]" + Символы.ПС + Символы.ПС Тогда |
| 430 | + Прервать; |
| 431 | + КонецЕсли; |
| 432 | + |
| 433 | + юТест.ПроверитьРавенство(Строка, "data: [1]" + Символы.ПС + Символы.ПС); |
| 434 | + |
| 435 | + КонецЦикла; |
| 436 | + |
| 437 | + ТелоПоток.Закрыть(); |
| 438 | + |
| 439 | + МенеджерФоновыхЗаданий.Очистить(); |
| 440 | +КонецПроцедуры |
| 441 | + |
| 442 | +Функция ОбработчикЗапроса(Контекст, СледующийОбработчик) Экспорт |
| 443 | + |
| 444 | + Контекст.Ответ.КодСостояния = 200; |
| 445 | + Контекст.Ответ.ТипКонтента = "text/event-stream"; |
| 446 | + |
| 447 | + ПотокОтвета = ПолучитьДвоичныеДанныеИзСтроки("data: [1]" + Символы.ПС + Символы.ПС).ОткрытьПотокДляЧтения(); |
| 448 | + ПотокОтвета.КопироватьВ(Контекст.Ответ.Тело); |
| 449 | + |
| 450 | + Приостановить(500); |
| 451 | + ПотокОтвета = ПолучитьДвоичныеДанныеИзСтроки("data: [1]" + Символы.ПС + Символы.ПС).ОткрытьПотокДляЧтения(); |
| 452 | + ПотокОтвета.КопироватьВ(Контекст.Ответ.Тело); |
| 453 | + |
| 454 | + Приостановить(500); |
| 455 | + ПотокОтвета = ПолучитьДвоичныеДанныеИзСтроки("data: [DONE]" + Символы.ПС + Символы.ПС).ОткрытьПотокДляЧтения(); |
| 456 | + ПотокОтвета.КопироватьВ(Контекст.Ответ.Тело); |
| 457 | + |
| 458 | +КонецФункции |
| 459 | + |
| 460 | +Процедура Вебсервер() Экспорт |
| 461 | + |
| 462 | + Вебсервер = Новый ВебСервер(ПортТестовогоСервера); |
| 463 | + Вебсервер.ДобавитьОбработчикЗапросов(ЭтотОбъект, "ОбработчикЗапроса"); |
| 464 | + Вебсервер.Запустить(); |
| 465 | + |
| 466 | +КонецПроцедуры |
| 467 | + |
379 | 468 | Функция JsonВОбъект(Json) |
380 | 469 |
|
381 | 470 | ЧтениеJSON = Новый ЧтениеJSON; |
|
418 | 507 |
|
419 | 508 | // Пробуем типовые варианты httpbin |
420 | 509 | Кандидаты = Новый Массив; |
| 510 | + Кандидаты.Добавить("http://127.0.0.1:8085"); |
421 | 511 | Кандидаты.Добавить("https://httpbin.org"); |
422 | 512 | Кандидаты.Добавить("https://httpbingo.org"); |
423 | 513 |
|
|
0 commit comments