@@ -522,7 +522,7 @@ class Tester
522
522
}
523
523
524
524
/**
525
- * Execute request.
525
+ * Get request params array .
526
526
*
527
527
* @param string $query
528
528
* @param array $headers
@@ -531,20 +531,13 @@ class Tester
531
531
* @param string|null $successMessage
532
532
* @param string|null $errorMessage
533
533
* @param bool $connKeepAlive
534
- * @return Response
534
+ * @return array
535
535
*/
536
- public function request (
536
+ private function getRequestParams (
537
537
string $ query = '' ,
538
538
array $ headers = [],
539
- string $ uri = null ,
540
- string $ address = null ,
541
- string $ successMessage = null ,
542
- string $ errorMessage = null ,
543
- bool $ connKeepAlive = false
539
+ string $ uri = null
544
540
) {
545
- if ($ this ->hasError ()) {
546
- return new Response (null , true );
547
- }
548
541
if (is_null ($ uri )) {
549
542
$ uri = $ this ->makeSourceFile ();
550
543
}
@@ -571,9 +564,38 @@ class Tester
571
564
],
572
565
$ headers
573
566
);
574
- $ params = array_filter ($ params , function ($ value ) {
567
+
568
+ return array_filter ($ params , function ($ value ) {
575
569
return !is_null ($ value );
576
570
});
571
+ }
572
+
573
+ /**
574
+ * Execute request.
575
+ *
576
+ * @param string $query
577
+ * @param array $headers
578
+ * @param string|null $uri
579
+ * @param string|null $address
580
+ * @param string|null $successMessage
581
+ * @param string|null $errorMessage
582
+ * @param bool $connKeepAlive
583
+ * @return Response
584
+ */
585
+ public function request (
586
+ string $ query = '' ,
587
+ array $ headers = [],
588
+ string $ uri = null ,
589
+ string $ address = null ,
590
+ string $ successMessage = null ,
591
+ string $ errorMessage = null ,
592
+ bool $ connKeepAlive = false
593
+ ) {
594
+ if ($ this ->hasError ()) {
595
+ return new Response (null , true );
596
+ }
597
+
598
+ $ params = $ this ->getRequestParams ($ query , $ headers , $ uri );
577
599
578
600
try {
579
601
$ this ->response = new Response (
@@ -594,6 +616,66 @@ class Tester
594
616
return $ this ->response ;
595
617
}
596
618
619
+ /**
620
+ * Execute multiple requests in parallel.
621
+ *
622
+ * @param array|int $requests
623
+ * @param string|null $address
624
+ * @param string|null $successMessage
625
+ * @param string|null $errorMessage
626
+ * @param bool $connKeepAlive
627
+ * @return Response[]
628
+ * @throws \Exception
629
+ */
630
+ public function multiRequest (
631
+ $ requests ,
632
+ string $ address = null ,
633
+ string $ successMessage = null ,
634
+ string $ errorMessage = null ,
635
+ bool $ connKeepAlive = false
636
+ ) {
637
+ if ($ this ->hasError ()) {
638
+ return new Response (null , true );
639
+ }
640
+
641
+ if (is_numeric ($ requests )) {
642
+ $ requests = array_fill (0 , $ requests , []);
643
+ } elseif (!is_array ($ requests )) {
644
+ throw new \Exception ('Requests can be either numeric or array ' );
645
+ }
646
+
647
+ try {
648
+ $ connections = array_map (function ($ requestData ) use ($ address , $ connKeepAlive ) {
649
+ $ client = $ this ->getClient ($ address , $ connKeepAlive );
650
+ $ params = $ this ->getRequestParams (
651
+ $ requestData ['query ' ] ?? '' ,
652
+ $ requestData ['headers ' ] ?? [],
653
+ $ requestData ['uri ' ] ?? null
654
+ );
655
+ return [
656
+ 'client ' => $ client ,
657
+ 'requestId ' => $ client ->async_request ($ params , false ),
658
+ ];
659
+ }, $ requests );
660
+
661
+ $ responses = array_map (function ($ conn ) {
662
+ $ response = new Response ($ conn ['client ' ]->wait_for_response_data ($ conn ['requestId ' ]));
663
+ if ($ this ->debug ) {
664
+ $ response ->debugOutput ();
665
+ }
666
+ return $ response ;
667
+ }, $ connections );
668
+ $ this ->message ($ successMessage );
669
+ return $ responses ;
670
+ } catch (\Exception $ exception ) {
671
+ if ($ errorMessage === null ) {
672
+ $ this ->error ("Request failed " , $ exception );
673
+ } else {
674
+ $ this ->message ($ errorMessage );
675
+ }
676
+ }
677
+ }
678
+
597
679
/**
598
680
* Get client.
599
681
*
0 commit comments