# Copyright (C) 2021-2023 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # This file is for testing the gdb.TargetConnection API. This API is # already tested in gdb.multi/multi-target-info-inferiors.exp and # gdb.python/py-inferior.exp, this file just covers some edge cases # that are not tested in other places. load_lib gdb-python.exp standard_testfile if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } { return -1 } # Skip all tests if Python scripting is not enabled. if { [skip_python_tests] } { continue } if {![runto_main]} { return 0 } if { [target_info exists gdb_protocol] } { set connection_type "RemoteTargetConnection" } else { set connection_type "TargetConnection" } # Create a gdb.TargetConnection object and check it is initially # valid. gdb_test_no_output "python conn = gdb.selected_inferior().connection" gdb_test "python print(conn)" \ "" \ "print gdb.${connection_type} while it is still valid" gdb_test "python print(conn.is_valid())" "True" "is_valid returns True" # Get the connection again, and ensure we get the exact same object. gdb_test_no_output "python conn2 = gdb.selected_inferior().connection" gdb_test "python print('Same object: %s' % (conn is conn2))" "True" # Now invalidate the connection, and ensure that the is_valid method # starts to return False. gdb_test "info connections" "\r\n\\* 1 .*" \ "info connections while the connection is still around" gdb_test "with confirm off -- kill" "" "kill inferior" gdb_test "disconnect" gdb_test "info connections" "No connections\\." \ "info connections now all the connections have gone" gdb_test "python print(conn)" "" \ "print gdb.${connection_type} now its invalid" gdb_test "python print(conn.is_valid())" "False" "is_valid returns False" # Now check that accessing properties of the invalid connection cases # an error. gdb_test "python print(conn.num)" \ "RuntimeError: Connection no longer exists\\.\r\n.*" gdb_test "python print(conn.type)" \ "RuntimeError: Connection no longer exists\\.\r\n.*" gdb_test "python print(conn.description)" \ "RuntimeError: Connection no longer exists\\.\r\n.*" gdb_test "python print(conn.details)" \ "RuntimeError: Connection no longer exists\\.\r\n.*"