Re: again: ping: testcase for "absolute source" patch

Baurzhan Ismagulov
2005-05-05T11:12:15Z

[-- Attachment #1: Type: text/plain, Size: 263 bytes --]

Sorry, forgot to include the testcase.

With kind regards,
Baurzhan.

2005-05-05 Baurzhan Ismagulov <ibr@ata.cs.hun.edu.tr>

* gdb.base/openp.c: New testcase.
* gdb.base/openp.exp: New testcase checking for source, binary
and compilation directory handling.

[-- Attachment #2: openp.c --]
[-- Type: text/x-csrc, Size: 22 bytes --]

int main(){return 0;}

[-- Attachment #3: openp.exp --]
[-- Type: text/plain, Size: 16708 bytes --]

# 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 Baurzhan Ismagulov <ibr@ata.cs.hun.edu.tr>.
# $Id: openp.exp,v 1.9 2004/10/15 15:04:04 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

# This is checked for binaries as well as for sources. To do that, we
# place them in some specific locations, such as compilation directory,
# $PATH, gdb source path ("directory" command), etc. As the files from
# the previous tests could interfere with the test currently running
# (sometimes we expect gdb to find a file, sometimes -- not), we define
# a certain state of files and directories as canonical, move the files
# around before each test, and move them back thereafter.

# 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
}
set our_bin $bin_dir/$binname
} else {
set our_bin $binfile
}
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
}
pass "test_bin: We are in $gdb_wd, our binary is $our_bin, and we've added \"$path_dir\" to PATH."
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
}
set our_src $srcfile_dir/$srcname
} else {
set our_src $srcfile
}
if [catch {cd $gdb_wd} msg] {
perror $msg
return -1
}
pass "test_src: We are in $gdb_wd, our source is $our_src and was compiled under $comp_dir as $comp_srcfile."
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

# At this point our canonical environment is ready. The binary is in
# $binfile. It can be moved by some test if necessary, but must be moved
# back after the test; leaving it where it was during the test may cause
# false passes or failures in the next tests. Since we test where gdb
# should find or not find a given file, we should have exactly one
# binary for the binary tests, otherwise we cannot be sure which one was
# found by gdb.

# Likewise, the source is in $srcfile, and we should have exactly one
# source for the source tests. The binaries are compiled by every test
# and deleted afterwards.

# 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 <PATH_dir>/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 <PATH_dir>/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 <PATH_dir>/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 <PATH_dir>/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 <PATH_dir>/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 <PATH_dir>/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)"