33namespace React \Tests \Socket ;
44
55use React \Dns \Resolver \Factory as ResolverFactory ;
6+ use React \EventLoop \Loop ;
7+ use React \Socket \ConnectionInterface ;
68use React \Socket \Connector ;
79use React \Socket \DnsConnector ;
810use React \Socket \SecureConnector ;
@@ -19,13 +21,15 @@ public function gettingStuffFromGoogleShouldWork()
1921 $ connector = new Connector (array ());
2022
2123 $ conn = \React \Async \await ($ connector ->connect ('google.com:80 ' ));
24+ assert ($ conn instanceof ConnectionInterface);
2225
2326 $ this ->assertContainsString (':80 ' , $ conn ->getRemoteAddress ());
2427 $ this ->assertNotEquals ('google.com:80 ' , $ conn ->getRemoteAddress ());
2528
2629 $ conn ->write ("GET / HTTP/1.0 \r\n\r\n" );
2730
2831 $ response = $ this ->buffer ($ conn , self ::TIMEOUT );
32+ assert (!$ conn ->isReadable ());
2933
3034 $ this ->assertMatchesRegExp ('#^HTTP/1\.0# ' , $ response );
3135 }
@@ -40,10 +44,12 @@ public function gettingEncryptedStuffFromGoogleShouldWork()
4044 $ secureConnector = new Connector (array ());
4145
4246 $ conn = \React \Async \await ($ secureConnector ->connect ('tls://google.com:443 ' ));
47+ assert ($ conn instanceof ConnectionInterface);
4348
4449 $ conn ->write ("GET / HTTP/1.0 \r\n\r\n" );
4550
4651 $ response = $ this ->buffer ($ conn , self ::TIMEOUT );
52+ assert (!$ conn ->isReadable ());
4753
4854 $ this ->assertMatchesRegExp ('#^HTTP/1\.0# ' , $ response );
4955 }
@@ -66,10 +72,12 @@ public function gettingEncryptedStuffFromGoogleShouldWorkIfHostIsResolvedFirst()
6672 );
6773
6874 $ conn = \React \Async \await ($ connector ->connect ('google.com:443 ' ));
75+ assert ($ conn instanceof ConnectionInterface);
6976
7077 $ conn ->write ("GET / HTTP/1.0 \r\n\r\n" );
7178
7279 $ response = $ this ->buffer ($ conn , self ::TIMEOUT );
80+ assert (!$ conn ->isReadable ());
7381
7482 $ this ->assertMatchesRegExp ('#^HTTP/1\.0# ' , $ response );
7583 }
@@ -80,13 +88,15 @@ public function gettingPlaintextStuffFromEncryptedGoogleShouldNotWork()
8088 $ connector = new Connector (array ());
8189
8290 $ conn = \React \Async \await ($ connector ->connect ('google.com:443 ' ));
91+ assert ($ conn instanceof ConnectionInterface);
8392
8493 $ this ->assertContainsString (':443 ' , $ conn ->getRemoteAddress ());
8594 $ this ->assertNotEquals ('google.com:443 ' , $ conn ->getRemoteAddress ());
8695
8796 $ conn ->write ("GET / HTTP/1.0 \r\n\r\n" );
8897
8998 $ response = $ this ->buffer ($ conn , self ::TIMEOUT );
99+ assert (!$ conn ->isReadable ());
90100
91101 $ this ->assertDoesNotMatchRegExp ('#^HTTP/1\.0# ' , $ response );
92102 }
@@ -148,6 +158,13 @@ public function testWaitingForRejectedConnectionShouldNotCreateAnyGarbageReferen
148158 $ this ->markTestSkipped ('Not supported on legacy Promise v1 API ' );
149159 }
150160
161+ // let loop tick for reactphp/async v4 to clean up any remaining stream resources
162+ // @link https://github.com/reactphp/async/pull/65 reported upstream // TODO remove me once merged
163+ if (function_exists ('React\Async\async ' )) {
164+ \React \Async \await (\React \Promise \Timer \sleep (0 ));
165+ Loop::run ();
166+ }
167+
151168 $ connector = new Connector (array ('timeout ' => false ));
152169
153170 gc_collect_cycles ();
@@ -377,6 +394,7 @@ public function testSelfSignedResolvesIfVerificationIsDisabled()
377394 ));
378395
379396 $ conn = \React \Async \await (\React \Promise \Timer \timeout ($ connector ->connect ('tls://self-signed.badssl.com:443 ' ), self ::TIMEOUT ));
397+ assert ($ conn instanceof ConnectionInterface);
380398 $ conn ->close ();
381399
382400 // if we reach this, then everything is good
0 commit comments