@@ -1053,6 +1053,8 @@ def test_the_same_port(self):
10531053node .init ().start ()
10541054self .assertTrue (node ._should_free_port )
10551055self .assertEqual (type (node .port ),int )
1056+ node_port_copy = node .port
1057+ self .assertEqual (node .safe_psql ("SELECT 1;" ),b'1\n ' )
10561058
10571059with get_new_node (port = node .port )as node2 :
10581060self .assertEqual (type (node2 .port ),int )
@@ -1064,6 +1066,11 @@ def test_the_same_port(self):
10641066
10651067self .assertIn ("Cannot start node" ,str (ctx .exception ))
10661068
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+
10671074class tagPortManagerProxy :
10681075sm_prev_testgres_reserve_port = None
10691076sm_prev_testgres_release_port = None
@@ -1159,13 +1166,16 @@ def _proxy__release_port(dummyPortNumber):
11591166return __class__ .sm_prev_testgres_release_port (dummyPortNumber )
11601167
11611168def test_port_rereserve_during_node_start (self ):
1169+ assert testgres .PostgresNode ._C_MAX_START_ATEMPTS == 5
1170+
11621171C_COUNT_OF_BAD_PORT_USAGE = 3
11631172
11641173with get_new_node ()as node1 :
11651174node1 .init ().start ()
11661175self .assertTrue (node1 ._should_free_port )
11671176self .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 ' )
11691179
11701180with __class__ .tagPortManagerProxy (node1 .port ,C_COUNT_OF_BAD_PORT_USAGE ):
11711181assert __class__ .tagPortManagerProxy .sm_DummyPortNumber == node1 .port
@@ -1176,10 +1186,54 @@ def test_port_rereserve_during_node_start(self):
11761186node2 .init ().start ()
11771187
11781188self .assertNotEqual (node2 .port ,node1 .port )
1189+ self .assertTrue (node2 ._should_free_port )
11791190self .assertEqual (__class__ .tagPortManagerProxy .sm_DummyPortCurrentUsage ,0 )
11801191self .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 )
11811232
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 ' )
11831237
11841238def test_simple_with_bin_dir (self ):
11851239with get_new_node ()as node :