@@ -1053,6 +1053,8 @@ def test_the_same_port(self):
1053
1053
node .init ().start ()
1054
1054
self .assertTrue (node ._should_free_port )
1055
1055
self .assertEqual (type (node .port ), int )
1056
+ node_port_copy = node .port
1057
+ self .assertEqual (node .safe_psql ("SELECT 1;" ), b'1\n ' )
1056
1058
1057
1059
with get_new_node (port = node .port ) as node2 :
1058
1060
self .assertEqual (type (node2 .port ), int )
@@ -1064,6 +1066,11 @@ def test_the_same_port(self):
1064
1066
1065
1067
self .assertIn ("Cannot start node" , str (ctx .exception ))
1066
1068
1069
+ # node is still working
1070
+ self .assertEqual (node .port , node_port_copy )
1071
+ self .assertTrue (node ._should_free_port )
1072
+ self .assertEqual (node .safe_psql ("SELECT 3;" ), b'3\n ' )
1073
+
1067
1074
class tagPortManagerProxy :
1068
1075
sm_prev_testgres_reserve_port = None
1069
1076
sm_prev_testgres_release_port = None
@@ -1159,13 +1166,16 @@ def _proxy__release_port(dummyPortNumber):
1159
1166
return __class__ .sm_prev_testgres_release_port (dummyPortNumber )
1160
1167
1161
1168
def test_port_rereserve_during_node_start (self ):
1169
+ assert testgres .PostgresNode ._C_MAX_START_ATEMPTS == 5
1170
+
1162
1171
C_COUNT_OF_BAD_PORT_USAGE = 3
1163
1172
1164
1173
with get_new_node () as node1 :
1165
1174
node1 .init ().start ()
1166
1175
self .assertTrue (node1 ._should_free_port )
1167
1176
self .assertEqual (type (node1 .port ), int ) # noqa: E721
1168
- node1 .safe_psql ("SELECT 1;" )
1177
+ node1_port_copy = node1 .port
1178
+ self .assertEqual (node1 .safe_psql ("SELECT 1;" ), b'1\n ' )
1169
1179
1170
1180
with __class__ .tagPortManagerProxy (node1 .port , C_COUNT_OF_BAD_PORT_USAGE ):
1171
1181
assert __class__ .tagPortManagerProxy .sm_DummyPortNumber == node1 .port
@@ -1176,10 +1186,54 @@ def test_port_rereserve_during_node_start(self):
1176
1186
node2 .init ().start ()
1177
1187
1178
1188
self .assertNotEqual (node2 .port , node1 .port )
1189
+ self .assertTrue (node2 ._should_free_port )
1179
1190
self .assertEqual (__class__ .tagPortManagerProxy .sm_DummyPortCurrentUsage , 0 )
1180
1191
self .assertEqual (__class__ .tagPortManagerProxy .sm_DummyPortTotalUsage , C_COUNT_OF_BAD_PORT_USAGE )
1192
+ self .assertTrue (node2 .is_started )
1193
+
1194
+ self .assertEqual (node2 .safe_psql ("SELECT 2;" ), b'2\n ' )
1195
+
1196
+ # node1 is still working
1197
+ self .assertEqual (node1 .port , node1_port_copy )
1198
+ self .assertTrue (node1 ._should_free_port )
1199
+ self .assertEqual (node1 .safe_psql ("SELECT 3;" ), b'3\n ' )
1200
+
1201
+ def test_port_conflict (self ):
1202
+ assert testgres .PostgresNode ._C_MAX_START_ATEMPTS > 1
1203
+
1204
+ C_COUNT_OF_BAD_PORT_USAGE = testgres .PostgresNode ._C_MAX_START_ATEMPTS
1205
+
1206
+ with get_new_node () as node1 :
1207
+ node1 .init ().start ()
1208
+ self .assertTrue (node1 ._should_free_port )
1209
+ self .assertEqual (type (node1 .port ), int ) # noqa: E721
1210
+ node1_port_copy = node1 .port
1211
+ self .assertEqual (node1 .safe_psql ("SELECT 1;" ), b'1\n ' )
1212
+
1213
+ with __class__ .tagPortManagerProxy (node1 .port , C_COUNT_OF_BAD_PORT_USAGE ):
1214
+ assert __class__ .tagPortManagerProxy .sm_DummyPortNumber == node1 .port
1215
+ with get_new_node () as node2 :
1216
+ self .assertTrue (node2 ._should_free_port )
1217
+ self .assertEqual (node2 .port , node1 .port )
1218
+
1219
+ with self .assertRaises (StartNodeException ) as ctx :
1220
+ node2 .init ().start ()
1221
+
1222
+ self .assertIn ("Cannot start node" , str (ctx .exception ))
1223
+
1224
+ self .assertEqual (node2 .port , node1 .port )
1225
+ self .assertTrue (node2 ._should_free_port )
1226
+ self .assertEqual (__class__ .tagPortManagerProxy .sm_DummyPortCurrentUsage , 1 )
1227
+ self .assertEqual (__class__ .tagPortManagerProxy .sm_DummyPortTotalUsage , C_COUNT_OF_BAD_PORT_USAGE )
1228
+ self .assertFalse (node2 .is_started )
1229
+
1230
+ # node2 must release our dummyPort (node1.port)
1231
+ self .assertEqual (__class__ .tagPortManagerProxy .sm_DummyPortCurrentUsage , 0 )
1181
1232
1182
- node2 .safe_psql ("SELECT 1;" )
1233
+ # node1 is still working
1234
+ self .assertEqual (node1 .port , node1_port_copy )
1235
+ self .assertTrue (node1 ._should_free_port )
1236
+ self .assertEqual (node1 .safe_psql ("SELECT 3;" ), b'3\n ' )
1183
1237
1184
1238
def test_simple_with_bin_dir (self ):
1185
1239
with get_new_node () as node :
0 commit comments