@@ -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 :