From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23400 invoked by alias); 25 Sep 2004 21:12:38 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 23376 invoked from network); 25 Sep 2004 21:12:36 -0000 Received: from unknown (HELO burundai.radix50.net) (82.83.198.209) by sourceware.org with SMTP; 25 Sep 2004 21:12:36 -0000 Received: from burundai.radix50.net (localhost [127.0.0.1]) by burundai.radix50.net (8.12.3/8.12.3/Debian -4) with ESMTP id i8PLG9Fn024236 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=FAIL) for ; Sat, 25 Sep 2004 23:16:09 +0200 Received: (from ibr@localhost) by burundai.radix50.net (8.12.3/8.12.3/Debian -4) id i8PLG9Fn024235 for gdb-patches@sources.redhat.com; Sat, 25 Sep 2004 23:16:09 +0200 Date: Sat, 25 Sep 2004 21:12:00 -0000 From: Baurjan Ismagulov To: gdb-patches@sources.redhat.com Subject: Re: testcase for "absolute source" patch Message-ID: <20040925211608.GA6223@ata.cs.hun.edu.tr> Mail-Followup-To: gdb-patches@sources.redhat.com References: <20040818130626.GB1411@ata.cs.hun.edu.tr> <4123763C.nailM3P11DT7E@mindspring.com> <20040818155324.GC1411@ata.cs.hun.edu.tr> <4123A736.nail5OO17XN7L@mindspring.com> <20040818220613.GA3143@ata.cs.hun.edu.tr> <4123E749.nail65Z1YIZ3O@mindspring.com> <20040826203603.GA18267@ata.cs.hun.edu.tr> <412F4235.nailDKT1M7PGM@mindspring.com> <20040827164839.GC31959@ata.cs.hun.edu.tr> <413492EA.nailCGN1URW10@mindspring.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="vkogqOf2sHV7VnPd" Content-Disposition: inline In-Reply-To: <413492EA.nailCGN1URW10@mindspring.com> User-Agent: Mutt/1.5.6+20040523i X-SW-Source: 2004-09/txt/msg00435.txt.bz2 --vkogqOf2sHV7VnPd Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 2451 Hello Michael, here is the new version. On Tue, Aug 31, 2004 at 11:02:02AM -0400, Michael Chastain wrote: > . ChangeLog entry * gdb.base/openp.c: New testcase. * gdb.base/openp.exp: New testcase checking for source, binary and compilation directory handling. > . error checking on calls to remote_exec > . gdb_suppress_entire_file is rotten and obsolete. > . the convention for gdb_start and gdb_exit is to assume that the > previous test script left a gdb running and to call gdb_exit > first, followed by gdb_start. > . in test_src, drop the semicolons here: > . don't bother to do "remote_exec host rm $srcfile" Done. > . in test_bin, don't move the file back and forth -- just copy > the file and then leave the copy in place. disk space is cheap, > and "mv $binfile $bin_dir ... $mv $bin_dir/$binname $binfile" > is vulnerable to cascade failures when you call test_bin 13 > times in a row and one of them might de-synchronize. > same with test_src. > > Or am i missing something and it will screw up some tests if > you let the prime copies of $srcfile and $binfile exist > all the time? All tests verify whether gdb finds (doesn't find) the files as expected. To achieve that, we place them in some specific locations, such as compilation directory, $PATH, gdb source path ("directory" command), etc. The files from previous tests could cause false failures for the tests where gdb is supposed not to find the file (all tests with '-'), or false passes for the tests where gdb could find the wrong file (e.g., in the compilation directory rather than in the source path). Actually, I hadn't moved the files around as I first started writing the test; I just had been removing the files before a test if it was necessary. However, the tests were depending on the state left from the previous one, thus making the process of modifying and adding new tests very difficult: to add the 14th test, you have to trace the first 13 ones. That is why I decided to delete all files after each test, thus making the tests independent of each other. It might seem difficult to debug at the first glance, but it is easily trackable from the log once you know that each test expects to find the directory hierarchy in some "standard" state (created til the line 206, just before the first test_bin) and has to leave it in the same state. This greatly simplifies both debugging and maintenance. With kind regards, Baurjan. --vkogqOf2sHV7VnPd Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="openp.exp" Content-length: 15257 # Copyright (C) 2004 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 2 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, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # This file was written by Baurjan Ismagulov . # $Id: openp.exp,v 1.7 2004/09/25 21:14:05 ibr Exp $ # This file tests whether gdb finds the files properly given the # following file names: # 1. basename: file # 2. absolute: /dir/file # 3. relative: dir/file # 4. in current: ./file # 5. in upper: ../file # Resolve possibe /./ and /../ within the given path. We are paranoid # about cases like "mkdir -p a/../b" (although GNU coreutils and Solaris # 8 seem to handle this particular case). # XXX: Can this be replaced with tcl path manipulation routines? proc canonize_path {dir} { set old_dir [pwd] cd $dir set new_dir [pwd] cd $old_dir return $new_dir } # Compile $src to $bin in $cdir. # XXX: build == host. proc cdir_compile {cdir src bin} { if [catch {set old_dir [pwd]} msg] { perror $msg return -1 } if [catch {cd $cdir} msg] { perror $msg return -1 } if {[gdb_compile $src $bin executable debug] != ""} { perror "Testcase compile failed." return -1 } if [catch {cd $old_dir} msg] { perror $msg return -1 } return 0 } # Move the binary to $bin_dir, add $path_dir to PATH, gdb_test in the # $gdb_wd directory. # XXX: build == host. proc test_bin {gdb_wd bin_dir path_dir gdb_test_cmd gdb_resp txt} { global binname global binfile global env if {$bin_dir != ""} { if {[lindex [remote_exec host "mv $binfile $bin_dir"] 0] != 0} { unresolved "Failed to move $binfile to $bin_dir." return -1 } } if {$path_dir != "" && [info exists env(PATH)]} { if [catch {set old_path $env(PATH)} msg] { perror $msg return -1 } # XXX: Directory separator in PATH? if [catch {set env(PATH) $env(PATH):$path_dir} msg] { perror $msg return -1 } } if [catch {set old_dir [pwd]} msg] { perror $msg return -1 } if [catch {cd $gdb_wd} msg] { perror $msg return -1 } gdb_start gdb_test $gdb_test_cmd $gdb_resp $txt gdb_exit if [catch {cd $old_dir} msg] { perror $msg return -1 } if [info exists old_path] { if [catch {set env(PATH) $old_path} msg] { perror $msg return -1 } } if {$bin_dir != ""} { if {[lindex [remote_exec host "mv $bin_dir/$binname $binfile"] 0] != 0} { unresolved "Failed to move $bin_dir/$binname to $binfile." return -1 } } return 0 } # Compile in $comp_dir, move the source to $srcfile_dir, perform $cmd1 # and $cmd2, gdb_test in gdb_wd. # XXX: build == host. proc test_src {comp_dir comp_srcfile comp_binfile srcfile_dir gdb_wd cmd1 cmd2 gdb_test_cmd gdb_resp txt} { global srcname global srcfile if [catch {set old_dir [pwd]} msg] { perror $msg return -1 } if {[cdir_compile $comp_dir $comp_srcfile $comp_binfile] != 0} { unresolved "Failed to compile $comp_srcfile to $comp_binfile in $comp_dir." return -1 } if {$srcfile_dir != ""} { if {[lindex [remote_exec host "mv $srcfile $srcfile_dir"] 0] != 0} { unresolved "Failed to move $srcfile to $srcfile_dir." return -1 } } if [catch {cd $gdb_wd} msg] { perror $msg return -1 } gdb_start if {$cmd1 != ""} { gdb_test $cmd1 "" } if {$cmd2 != ""} { gdb_test $cmd2 "" } gdb_test $gdb_test_cmd $gdb_resp $txt gdb_exit if [catch {cd $old_dir} msg] { perror $msg return -1 } if {$srcfile_dir != ""} { if {[lindex [remote_exec host "mv $srcfile_dir/$srcname $srcfile"] 0] != 0} { unresolved "Failed to move $srcfile_dir/$srcname to $srcfile." return -1 } } return 0 } if {[is_remote host]} { unresolved "This test script does not work on a remote host." return -1 } if $tracelevel then { strace $tracelevel } set prms_id 0 set bug_id 0 set testname "openp" set srcname $testname.c set binname $testname.bin set testtmpdir [canonize_path $objdir/$subdir]/$testname set srcfile $testtmpdir/subdir/src/$srcname set binfile $testtmpdir/subdir/bin/$binname set src_txt {1.int main\(\){return 0;}.*} if {[lindex [remote_exec host "mkdir -p \ $testtmpdir/subdir/src/subdir \ $testtmpdir/subdir/bin/subdir \ $testtmpdir/subdir/cwd/bin \ $testtmpdir/subdir/cwd/src \ $testtmpdir/subdir/dir$testtmpdir/subdir/src/subdir \ $testtmpdir/subdir/dir$testtmpdir/subdir/bin \ $testtmpdir/subdir/dir/src"] 0] != 0} { unresolved "Failed to create the directories under $testtmpdir/subdir." return -1 } if {[lindex [remote_exec host "cp $srcdir/$subdir/$testname.c $srcfile"] 0] != 0} { unresolved "Failed to copy $srcdir/$subdir/$testname.c to $srcfile." return -1 } if {[cdir_compile $testtmpdir $srcfile $binfile] != 0} { unresolved "Failed to compile $srcfile to $binfile in $testtmpdir." return -1 } gdb_exit # b1+ test_bin $testtmpdir/subdir/bin \ "" \ "" \ "file $binname" \ "Reading symbols from $binfile\\.\\.\\.done\\..*" \ "openp b1+ (existing binary, basename)" # b1- test_bin $testtmpdir/subdir/cwd \ "" \ $testtmpdir/subdir/bin \ "file $binname" \ "Reading symbols from $binfile\\.\\.\\..*done\\..*" \ "openp b1- (non-existent binary, basename, find in PATH)" # b2+ test_bin $testtmpdir/subdir/cwd \ "" \ "" \ "file $binfile" \ "Reading symbols from $binfile\\.\\.\\.done\\..*" \ "openp b2+ (existing binary, absolute name)" # b2-a # XXX: Should we match locale-specific messages? test_bin $testtmpdir/subdir/cwd \ $testtmpdir/subdir/dir$testtmpdir/subdir/bin \ $testtmpdir/subdir/dir \ "file $binfile" \ "$binfile: .*" \ "openp b2-a (non-existent binary, absolute name, don't look in /absolute)" # b2- # XXX: Should we match locale-specific messages? test_bin $testtmpdir/subdir/cwd \ $testtmpdir/subdir/dir \ $testtmpdir/subdir/dir \ "file $binfile" \ "$binfile: .*" \ "openp b2- (non-existent binary, absolute name, don't look for /basename)" # b3+ test_bin $testtmpdir/subdir \ "" \ "" \ "file bin/$binname" \ "Reading symbols from $binfile\\.\\.\\.done\\..*" \ "openp b3+ (existing binary, relative name)" # b3-r # XXX: locale test_bin $testtmpdir/subdir/cwd \ "" \ $testtmpdir/subdir \ "file bin/$binname" \ "bin/$binname: .*" \ "openp b3-r (non-existent binary, relative name, don't look in /relative)" # b3- # XXX: locale test_bin $testtmpdir/subdir/cwd \ "" \ $testtmpdir/subdir/bin \ "file bin/$binname" \ "bin/$binname: .*" \ "openp b3- (non-existent binary, relative name, don't look in /basename)" # b4+ test_bin $testtmpdir/subdir/bin \ "" \ "" \ "file ./$binname" \ "Reading symbols from $binfile\\.\\.\\.done\\..*" \ "openp b4+ (existing binary, in the current dir)" # b4- # XXX: locale test_bin $testtmpdir/subdir/cwd \ "" \ $testtmpdir/subdir/bin \ "file ./$binname" \ "\\./$binname: .*" \ "openp b4- (non-existent binary, in the current dir, don't look in PATH)" # b5+ test_bin $testtmpdir/subdir/bin/subdir \ "" \ "" \ "file ../$binname" \ "Reading symbols from $binfile\\.\\.\\.done\\..*" \ "openp b5+ (existing binary, in the upper dir)" # b5-r # XXX: locale test_bin $testtmpdir/subdir/cwd \ "" \ $testtmpdir/subdir/bin/subdir \ "file ../$binname" \ "\\.\\./$binname: .*" \ "openp b5-r (non-existent binary, in the upper dir name, don't look in /relative)" # b5- # XXX: locale test_bin $testtmpdir/subdir/cwd \ "" \ $testtmpdir/subdir/bin \ "file ../$binname" \ "\\.\\./$binname: .*" \ "openp b5- (non-existent binary, in the upper dir name, don't look in /basename)" # s1+ test_src $testtmpdir/subdir/src $srcname $binfile \ "" \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s1+ (existing source, basename)" # s1-. test_src $testtmpdir/subdir/src $srcname $binfile \ $testtmpdir/subdir/cwd \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s1-. (non-existent source, basename, find in \$cwd/basename)" # s1-da test_src $testtmpdir/subdir/src $srcname $binfile \ $testtmpdir/subdir/dir$testtmpdir/subdir/src \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s1-da (non-existent source, basename, find in /\$cdir/basename)" # s1-d test_src $testtmpdir/subdir/src $srcname $binfile \ $testtmpdir/subdir/dir \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s1-d (non-existent source, basename, find in /basename)" # s2+ test_src $testtmpdir $srcfile $binfile \ "" \ $testtmpdir/subdir/cwd \ "file $binfile" ""\ "l main" \ $src_txt \ "openp s2+ (existing source, absolute name)" # s2-. test_src $testtmpdir $srcfile $binfile \ $testtmpdir/subdir/cwd \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s2-. (non-existent source, absolute name, find in \$cwd/basename)" # s2-da test_src $testtmpdir $srcfile $binfile \ $testtmpdir/subdir/dir$testtmpdir/subdir/src \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s2-da (non-existent source, absolute name, find in /absolute)" # s2-d test_src $testtmpdir $srcfile $binfile \ $testtmpdir/subdir/dir \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s2-d (non-existent source, absolute name, find in /basename)" # s3+ test_src $testtmpdir/subdir src/$srcname $binfile \ "" \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s3+ (existing source, relative name)" # s3-.r test_src $testtmpdir/subdir src/$srcname $binfile \ $testtmpdir/subdir/cwd/src \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s3-.r (non-existent source, relative name, find in \$cwd/relative)" # s3-c test_src $testtmpdir/subdir src/$srcname $binfile \ $testtmpdir/subdir \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s3-c (non-existent source, relative name, find in \$cdir/basename)" # s3-. test_src $testtmpdir/subdir src/$srcname $binfile \ $testtmpdir/subdir/cwd \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s3-. (non-existent source, relative name, find in \$cwd/basename)" # s3-da test_src $testtmpdir/subdir src/$srcname $binfile \ $testtmpdir/subdir/dir$testtmpdir/subdir \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s3-da (non-existent source, relative name, find in /\$cdir/relative)" # s3-dr test_src $testtmpdir/subdir src/$srcname $binfile \ $testtmpdir/subdir/dir/src \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s3-dr (non-existent source, relative name, find in /relative)" # s3-d test_src $testtmpdir/subdir src/$srcname $binfile \ $testtmpdir/subdir/dir \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s3-d (non-existent source, relative name, find in /basename)" # s4+ test_src $testtmpdir/subdir/src ./$srcname $binfile \ "" \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s4+ (existing source, in the current dir)" # s4-. test_src $testtmpdir/subdir/src ./$srcname $binfile \ $testtmpdir/subdir/cwd \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s4-. (non-existent source, in the current dir, find in \$cwd/basename)" # s4-da test_src $testtmpdir/subdir/src ./$srcname $binfile \ $testtmpdir/subdir/dir$testtmpdir/subdir/src \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s4-da (non-existent source, in the current dir, find in /\$cdir/basename)" # s4-d test_src $testtmpdir/subdir/src ./$srcname $binfile \ $testtmpdir/subdir/dir \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s4-d (non-existent source, in the current dir, find in /basename)" # s5+ test_src $testtmpdir/subdir/src/subdir ../$srcname $binfile \ "" \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s5+ (existing source, in the upper dir)" # s5-.r test_src $testtmpdir/subdir/src/subdir ../$srcname $binfile \ $testtmpdir/subdir \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s5-.r (non-existent source, in the upper dir, find in \$cwd/relative)" # s5-c test_src $testtmpdir/subdir/src/subdir ../$srcname $binfile \ $testtmpdir/subdir/src/subdir \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s5-c (non-existent source, in the upper dir, find in \$cdir/basename)" # s5-. test_src $testtmpdir/subdir/src/subdir ../$srcname $binfile \ $testtmpdir/subdir/cwd \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s5-. (non-existent source, in the upper dir, find in \$cdir/basename)" # s5-da test_src $testtmpdir/subdir/src/subdir ../$srcname $binfile \ $testtmpdir/subdir/dir$testtmpdir/subdir/src/subdir \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s5-da (non-existent source, in the upper dir, find in /\$cdir/relative)" # s5-dr test_src $testtmpdir/subdir/src/subdir ../$srcname $binfile \ $testtmpdir/subdir \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s5-dr (non-existent source, in the upper dir, find in /relative)" # s5-d test_src $testtmpdir/subdir/src/subdir ../$srcname $binfile \ $testtmpdir/subdir/dir \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s5-d (non-existent source, in the upper dir, find in /basename)" --vkogqOf2sHV7VnPd Content-Type: text/x-csrc; charset=us-ascii Content-Disposition: attachment; filename="openp.c" Content-length: 22 int main(){return 0;} --vkogqOf2sHV7VnPd--