1
+ <?php
2
+ namespace Gt \Fetch \Test \Helper ;
3
+
4
+ class ResponseSimulator {
5
+ const RANDOM_BODY_WORDS = ["pursuit " ,"forest " ,"gravel " ,"timber " ,"wonder " ,"eject " ,"slogan " ,"monkey " ,"construct " ,"earthquake " ,"respect " ,"publish " ,"forward " ,"circle " ,"summer " ,"define " ,"highlight " ,"refuse " ,"salon " ,"theater " ,"lily " ,"earwax " ,"variant " ,"account " ,"resource " ];
6
+ static protected $ headerCallback ;
7
+ static protected $ bodyCallback ;
8
+ static protected $ headerBuffer ;
9
+ static protected $ bodyBuffer ;
10
+ static protected $ started = false ;
11
+
12
+ static public function setHeaderCallback (callable $ callback ) {
13
+ self ::$ headerCallback = $ callback ;
14
+ }
15
+
16
+ static public function setBodyCallback (callable $ callback ) {
17
+ self ::$ bodyCallback = $ callback ;
18
+ }
19
+
20
+ static public function start () {
21
+ self ::$ started = true ;
22
+ self ::$ headerBuffer = self ::generateRandomHeaders ();
23
+ self ::$ bodyBuffer = self ::generateRandomBody ();
24
+ }
25
+
26
+ static protected function generateRandomHeaders ():array {
27
+ $ headers = [];
28
+
29
+ $ headers []= "HTTP/0.0 999 OK " ;
30
+ $ headers []= "Date: " . date ("D, d M Y H:i:s T " );
31
+ $ headers []= "Repository: PhpGt/Fetch " ;
32
+
33
+ $ length = rand (1 , 10 );
34
+ for ($ i = 0 ; $ i < $ length ; $ i ++) {
35
+ $ randIndex = array_rand (self ::RANDOM_BODY_WORDS );
36
+ $ key = self ::RANDOM_BODY_WORDS [$ randIndex ];
37
+ $ value = uniqid ();
38
+ $ headers []= "$ key: $ value " ;
39
+ }
40
+
41
+ foreach ($ headers as $ i => $ h ) {
42
+ $ headers [$ i ] .= "\r\n" ;
43
+ }
44
+
45
+ $ headers []= "\r\n" ;
46
+
47
+ return $ headers ;
48
+ }
49
+
50
+ static protected function generateRandomBody ():string {
51
+ $ body = "" ;
52
+ $ length = rand (10 , 100 );
53
+ for ($ i = 0 ; $ i < $ length ; $ i ++) {
54
+ $ randIndex = array_rand (self ::RANDOM_BODY_WORDS );
55
+ $ body .= self ::RANDOM_BODY_WORDS [$ randIndex ];
56
+ $ body .= " " ;
57
+ }
58
+
59
+ return $ body ;
60
+ }
61
+
62
+ static public function hasStarted ():bool {
63
+ return self ::$ started ;
64
+ }
65
+
66
+ static public function sendChunk ($ ch ):int {
67
+ if (!empty (self ::$ headerBuffer )) {
68
+ $ data = array_shift (self ::$ headerBuffer );
69
+
70
+ call_user_func (
71
+ self ::$ headerCallback ,
72
+ $ ch ,
73
+ $ data
74
+ );
75
+
76
+ return 1 ;
77
+ }
78
+ elseif (!empty (self ::$ bodyBuffer )) {
79
+ $ data = self ::$ bodyBuffer ;
80
+ self ::$ bodyBuffer = "" ;
81
+
82
+ call_user_func (
83
+ self ::$ bodyCallback ,
84
+ $ ch ,
85
+ $ data
86
+ );
87
+
88
+ return 1 ;
89
+ }
90
+ else {
91
+ return 0 ;
92
+ }
93
+ }
94
+ }
0 commit comments