тестирование курла

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Наткнулся я на сложность с написанием тестов для моей обертки для курла GCurl.
Если в скрипте открыть сокет на порт и на него соединяться курлом, курл не отдаст управление чтобы обработать соединение с сокетом.

Форкаться и писать межпроцессную передачу данных как-то влом. Других вариантов нет?
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
наверное, я хочу неправильного.
тесты писать надо только на код на php, а работу курла принять как данность. хотя, данностью эта полудокументированная хрень никак не является :)
 

Вурдалак

Продвинутый новичок
У тебя в репозитории самого класса gCurl нет.

Мне кажется странным интерфейс: Options'у знать о cURL не стоит. Т.е. я бы сделал билдер request'а, который ничего не знает про cURL, и адаптер для выполнения request'а, который можно будет легко заменить на другой. Тогда вся задача бы сводилась к тому, чтобы мокать cURL при написании unit test к CurlAdapter.

Но вообще, зачем сейчас что-то писать, если есть всякие Guzzle?
 

Вурдалак

Продвинутый новичок
Хотя, конечно, это в теории. На практике я бы такой херней не занимался. :))

Вот Guzzle честно поднимает сервак на node.js в тестах.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Вурдалак, есть Single, в противоположность Multi.
Код:
GCurl\Single:POST($url,['a'=>1]);
Еще будет Chaner, который будет адаптером к Single, и предоставлять API для вызова типа GCurl\Chainer::GET($url)->addHeader('X-Custom-Header',$value)->exec();
Options - это хелпер, в котором собраны все вызовы curl_setopt, чтобы не искать по коду.

guzzle прикольная штука, только там многовато соглашений вроде
$client->put('/put', ['body' => $resource]);
впрочем, может быть быстрее написать обертку для него

но поднимать ноду - это изврат :)
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Вурдалак, ну, у меня хватало случаев за последние лет 10, когда надо было писать на низком уровне.
Все-таки gCurl я написал лет за 5 до guzzle, когда curl_multi был вообще без документации, а в самом курле регулярно отлавливались сегфолты

ситуаций много: скачивание файла большого размера - просто так он вылетает по таймауту соединения,
или 50 запросов в секунду, чтобы без утечек памяти

Buzz - детская поделка, только базовый функционал, который быстрее написать прямо на curl_setopt, чем читать их доку :)
 
Последнее редактирование:

Вурдалак

Продвинутый новичок
Так пиши обертку над Guzzle. Но ты же сейчас что-то новое явно пишешь.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
как-бы да. для @Eugene Bond и умная репликация неинтересна - говорит, зачем писать месяц, если можно купить за $30k/yr )))
каждому свое
 

Absinthe

жожо
Наткнулся я на сложность с написанием тестов для моей обертки для курла GCurl.
Если в скрипте открыть сокет на порт и на него соединяться курлом, курл не отдаст управление чтобы обработать соединение с сокетом.

Форкаться и писать межпроцессную передачу данных как-то влом. Других вариантов нет?
pthreads еще есть.
Ты же хочешь одновременного исполнения двух кусков кода.
 

AnrDaemon

Продвинутый новичок
наверное, я хочу неправильного.
тесты писать надо только на код на php, а работу курла принять как данность. хотя, данностью эта полудокументированная хрень никак не является :)
Поправка - тесты надо писать на свой код. cURL это библиотека, её тестировать ты не обязан. А вот своё взаимодействие с ней - надо.
То, что ты называешь "полудокументированной хренью", является такой только в глазах PHP-разработчика, за отсутствием нормальной документации со стороны PHP.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
да, можно. хотя, pthreads решает еще и вопрос организации среды разработки - можно писать через тесты
 

AnrDaemon

Продвинутый новичок
спасибо, AnrDaemon, ты открыл мне глаза, и теперь я вижу свет
Я понимаю, что это был сарказм... и я Вас не осуждаю.
Я не ставил себе задачу открыть вам на что-то глаза. Этот форум читаем не только мы с вами. Считайте, что я это написал для потомков.
А интерфейс cURL/PHP действительно хреново описан, в этом я с Вами совершенно согласен. Мало того, что хреново описан, так ещё и не полностью реализован.
 
Сверху