Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Marek Polacek <mpolacek@redhat.com>
To: "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: [PATCH] gdb.mi/mi-basics.exp: fix racy tests (PR testsuite/12649)
Date: Fri, 06 May 2011 16:22:00 -0000	[thread overview]
Message-ID: <4DC42016.5060801@redhat.com> (raw)

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  <mpolacek@redhat.com>

        * 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


             reply	other threads:[~2011-05-06 16:22 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-06 16:22 Marek Polacek [this message]
2011-05-11 18:41 ` Jan Kratochvil
2011-05-12  7:14   ` Marek Polacek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4DC42016.5060801@redhat.com \
    --to=mpolacek@redhat.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox