HttpConnectionTest.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. use GuzzleHttp\Client;
  3. use GuzzleHttp\Cookie\CookieJar;
  4. use GuzzleHttp\Psr7\Utils;
  5. use Symfony\Component\Process\PhpProcess;
  6. $process = null;
  7. beforeAll(function () use (&$process) {
  8. $code = file_get_contents(__DIR__ . '/Stub/HttpServer.php');
  9. $process = new PhpProcess($code);
  10. $process->start();
  11. sleep(1);
  12. });
  13. afterAll(function () use (&$process) {
  14. echo $process->getOutput();
  15. $process->stop();
  16. });
  17. it('tests http connection', function () {
  18. $client = new Client([
  19. 'base_uri' => 'http://127.0.0.1:8080',
  20. 'cookies' => true,
  21. 'http_errors' => false,
  22. ]);
  23. $response = $client->get('/');
  24. expect($response->getStatusCode())
  25. ->toBe(200)
  26. ->and($response->getHeaderLine('Server'))
  27. ->tobe('workerman')
  28. ->and($response->getHeaderLine('Content-Length'))
  29. ->tobe('12')
  30. ->and($response->getBody()->getContents())
  31. ->toBe('Hello Chance');
  32. $data = [
  33. 'foo' => 'bar',
  34. 'key' => ['hello', 'chance']
  35. ];
  36. $response = $client->get('/get', [
  37. 'query' => $data
  38. ]);
  39. expect($response->getBody()->getContents())
  40. ->toBeJson()
  41. ->json()
  42. ->toBe($data);
  43. $response = $client->post('/post', [
  44. 'json' => $data
  45. ]);
  46. expect($response->getBody()->getContents())
  47. ->toBeJson()
  48. ->json()
  49. ->toBe($data);
  50. $response = $client->post('/header', [
  51. 'headers' => [
  52. 'foo' => 'bar'
  53. ]
  54. ]);
  55. expect($response->getBody()->getContents())
  56. ->toBe('bar');
  57. $cookie = new CookieJar();
  58. $client->get('/setSession', [
  59. 'cookies' => $cookie
  60. ]);
  61. $response = $client->get('/session', [
  62. 'cookies' => $cookie
  63. ]);
  64. expect($response->getBody()->getContents())
  65. ->toBe('bar');
  66. $response = $client->get('/session', [
  67. 'cookies' => $cookie
  68. ]);
  69. expect($response->getBody()->getContents())
  70. ->toBe('');
  71. $response = $client->get('/sse', [
  72. 'stream' => true,
  73. ]);
  74. $stream = $response->getBody();
  75. $i = 0;
  76. while (!$stream->eof()) {
  77. if ($i >= 5) {
  78. expect($stream->read(1024))->toBeEmpty();
  79. continue;
  80. }
  81. $i++;
  82. expect($stream->read(1024))->toBe("data: hello$i\n\n");
  83. }
  84. $file = Utils::tryFopen(__DIR__ . '/Stub/HttpServer.php', 'r');
  85. $response = $client->post('/file', [
  86. 'multipart' => [
  87. [
  88. 'name' => 'file',
  89. 'contents' => $file
  90. ]
  91. ]
  92. ]);
  93. expect($response->getBody()->getContents())
  94. ->toBeJson()
  95. ->json()
  96. ->toMatchArray([
  97. 'name' => 'HttpServer.php',
  98. 'error' => 0,
  99. ]);
  100. $response = $client->get('/404');
  101. expect($response->getStatusCode())
  102. ->toBe(404)
  103. ->and($response->getBody()->getContents())
  104. ->toBe('404 not found');
  105. });