@@ -41,6 +41,33 @@ public function testOpenMemoryDatabaseResolvesWithDatabaseAndRunsUntilQuit()
41
41
$ loop ->run ();
42
42
}
43
43
44
+ public function testOpenMemoryDatabaseShouldNotInheritActiveFileDescriptors ()
45
+ {
46
+ $ server = stream_socket_server ('tcp://127.0.0.1:0 ' );
47
+ $ address = stream_socket_get_name ($ server , false );
48
+
49
+ if (@stream_socket_server ('tcp:// ' . $ address ) !== false ) {
50
+ $ this ->markTestSkipped ('Platform does not prevent binding to same address (Windows?) ' );
51
+ }
52
+
53
+ $ loop = Factory::create ();
54
+
55
+ $ promise = Database::open ($ loop , ':memory: ' );
56
+
57
+ // close server and ensure we can start a new server on the previous address
58
+ // the pending SQLite process should not inherit the existing server socket
59
+ fclose ($ server );
60
+ $ server = stream_socket_server ('tcp:// ' . $ address );
61
+ $ this ->assertTrue (is_resource ($ server ));
62
+ fclose ($ server );
63
+
64
+ $ promise ->then (function (Database $ db ) {
65
+ $ db ->close ();
66
+ });
67
+
68
+ $ loop ->run ();
69
+ }
70
+
44
71
public function testOpenInvalidPathRejects ()
45
72
{
46
73
$ loop = Factory::create ();
@@ -83,6 +110,30 @@ public function testQuitResolvesAndRunsUntilQuit()
83
110
$ loop ->run ();
84
111
}
85
112
113
+
114
+ public function testQuitResolvesAndRunsUntilQuitWhenParentHasManyFileDescriptors ()
115
+ {
116
+ $ servers = array ();
117
+ for ($ i = 0 ; $ i < 100 ; ++$ i ) {
118
+ $ servers [] = stream_socket_server ('tcp://127.0.0.1:0 ' );
119
+ }
120
+
121
+ $ loop = Factory::create ();
122
+
123
+ $ promise = Database::open ($ loop , ':memory: ' );
124
+
125
+ $ once = $ this ->expectCallableOnce ();
126
+ $ promise ->then (function (Database $ db ) use ($ once ){
127
+ $ db ->quit ()->then ($ once );
128
+ });
129
+
130
+ $ loop ->run ();
131
+
132
+ foreach ($ servers as $ server ) {
133
+ fclose ($ server );
134
+ }
135
+ }
136
+
86
137
public function testQuitTwiceWillRejectSecondCall ()
87
138
{
88
139
$ loop = Factory::create ();
0 commit comments