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