From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24963 invoked by alias); 6 May 2011 16:22:05 -0000 Received: (qmail 24929 invoked by uid 22791); 6 May 2011 16:22:02 -0000 X-SWARE-Spam-Status: No, hits=-6.9 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 06 May 2011 16:21:44 +0000 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p46GLhZn006052 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 6 May 2011 12:21:43 -0400 Received: from dhcp-25-89.brq.redhat.com (pdp-11.brq.redhat.com [10.34.24.63]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id p46GLgrt012006 for ; Fri, 6 May 2011 12:21:43 -0400 Message-ID: <4DC42016.5060801@redhat.com> Date: Fri, 06 May 2011 16:22:00 -0000 From: Marek Polacek User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.9) Gecko/20100827 Red Hat Thunderbird/3.1.3 MIME-Version: 1.0 To: "gdb-patches@sourceware.org" Subject: [PATCH] gdb.mi/mi-basics.exp: fix racy tests (PR testsuite/12649) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-05/txt/msg00196.txt.bz2 Hi! This test, when using read1(), fails completely since it doesn't pass the `test_mi_interpreter_selection' which leads to aborting whole test file. This one I've solved by a) replacing `gdb_test_multiple' with `mi_gdb_test' and b) using "~\"" at the start of the regexp. We generally want to avoid using gdb_test_multiply in gdb.mi/*.exp, see e.g. PR 12647. Next fail was in `test_exec_and_symbol_mi_operatons'. Here I've also replaced `gdb_test_multiple' with `mi_gdb_test' even though the comment suggested that this is not possible since we want to use return 0 when fail. IMHO it is possible using the if [mi_gdb_test "*" "*" "*"] { return 0 }. Furthermore, the return value of this procedure is ignored, I think this is wrong, there is even a comment "# FIXME: if we cannot load we have to skip all other tests." Thus, at the end of the file, I've changed the condition to honour the return value of this procedure. Therefore, if the `test_exec_and_symbol_mi_operatons' fails, we bail out. In addition, I've used simpler regexp which doesn't fail with read1(). Next, in `test_path_specification' I've only replaced `gdb_test_multiple' with `send_gdb'+`gdb_expect'. I cannot use `mi_gdb_test' here because with this the `$expect_out(1,string);' didn't work (unknown variable). Tested with both read{,1}. Ok? 2011-05-06 Marek Polacek * gdb.mi/mi-basics.exp: Fix races. Honour the `test_exec_and_symbol_mi_operatons' return value. (test_mi_interpreter_selection): Use mi_gdb_test instead of gdb_test_multiple. (test_exec_and_symbol_mi_operatons): Likewise. (test_path_specification): Use send_gdb+gdb_expect instead of gdb_test_multiple. Index: mi-basics.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-basics.exp,v retrieving revision 1.26 diff -u -r1.26 mi-basics.exp --- mi-basics.exp 1 Jan 2011 15:33:47 -0000 1.26 +++ mi-basics.exp 6 May 2011 16:09:34 -0000 @@ -60,18 +60,10 @@ # All this test expects is to get the prompt back # with no syntax error message - gdb_test_multiple "-gdb-version" "acceptance of MI operations" { - -re "GNU gdb .*\r\n$mi_gdb_prompt$" { - pass "acceptance of MI operations" - return 1 - } - -re ".*\r\n$mi_gdb_prompt$" { - fail "acceptance of MI operations" - } - -re "Undefined command.*$gdb_prompt $" { - fail "acceptance of MI operations" - } - } + if ![mi_gdb_test "-gdb-version" "~\"GNU gdb.*" "acceptance of MI operations"] { + return 1 + } + note "Skipping all other MI tests." return 0 } @@ -84,19 +76,11 @@ # Tests: # -file-exec-and-symbols - # Can't use mi_gdb_test as if this doesn't work, - # we must give up on the whole test file - gdb_test_multiple "-file-exec-and-symbols ${binfile}" \ - "-file-exec-and-symbols ${binfile}" { - -re "\[\r\n\]*\\\^done\r\n$mi_gdb_prompt$" { - pass "file-exec-and-symbols operation" - } - timeout { - fail "file-exec-and-symbols operation (timeout)" - note "Skipping all other MI tests." - return 0 - } - } + if [mi_gdb_test "-file-exec-and-symbols ${binfile}" "\\\^done" \ + "file-exec-and-symbols operation"] { + note "Skipping all other MI tests." + return 0 + } # The following is not used by mi-support.exp, but we test here so # we get done with loading a program basics. @@ -121,7 +105,8 @@ "\\\^done" \ "file-symbol-file operation" - # FIXME: if we cannot load we have to skip all other tests. + # We need to return != 0. + return 1 } proc test_breakpoints_deletion {} { @@ -207,7 +192,8 @@ # -environment-path -r dir # -environment-path -r - gdb_test_multiple "-environment-path" "-environment-path" { + send_gdb "-environment-path\n" + gdb_expect { -re "\\\^done,path=\"\(.*\)\"\r\n$mi_gdb_prompt" { set orig_path $expect_out(1,string); } @@ -276,8 +262,8 @@ "verify tty is correct" } -if [test_mi_interpreter_selection] { - test_exec_and_symbol_mi_operatons +if { [test_mi_interpreter_selection] + && [test_exec_and_symbol_mi_operatons] } { test_breakpoints_deletion test_dir_specification test_cwd_specification