From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26741 invoked by alias); 4 Oct 2011 16:09:49 -0000 Received: (qmail 26730 invoked by uid 22791); 4 Oct 2011 16:09:48 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,MSGID_MULTIPLE_AT X-Spam-Check-By: sourceware.org Received: from mailhost.u-strasbg.fr (HELO mailhost.u-strasbg.fr) (130.79.200.154) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 04 Oct 2011 16:09:24 +0000 Received: from md1.u-strasbg.fr (md1.u-strasbg.fr [IPv6:2001:660:2402::186]) by mailhost.u-strasbg.fr (8.14.3/jtpda-5.5pre1) with ESMTP id p94G9L1A086622 for ; Tue, 4 Oct 2011 18:09:21 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) Received: from mailserver.u-strasbg.fr (ms3.u-strasbg.fr [130.79.204.12]) by md1.u-strasbg.fr (8.14.4/jtpda-5.5pre1) with ESMTP id p94G9LkC047065 for ; Tue, 4 Oct 2011 18:09:21 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) Received: from E6510Muller (gw-ics.u-strasbg.fr [130.79.210.225]) (user=mullerp mech=LOGIN) by mailserver.u-strasbg.fr (8.14.4/jtpda-5.5pre1) with ESMTP id p94G9Kat034682 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NO) for ; Tue, 4 Oct 2011 18:09:20 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) From: "Pierre Muller" To: References: <006301cc8292$367539b0$a35fad10$@muller@ics-cnrs.unistra.fr> <20111004134506.GB24369@calimero.vinschen.de> <000901cc82a4$dfba7cd0$9f2f7670$@muller@ics-cnrs.unistra.fr> <20111004151236.GC15757@calimero.vinschen.de> In-Reply-To: <20111004151236.GC15757@calimero.vinschen.de> Subject: [RFA-v2] testsuite: Add a test for passing of environment variables to inferior Date: Tue, 04 Oct 2011 16:09:00 -0000 Message-ID: <003601cc82af$f9714720$ec53d560$@muller@ics-cnrs.unistra.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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-10/txt/msg00093.txt.bz2 Here is an updated version that also checks that removing of an environment variable that was set already on GDB startup works correctly. This last added test currently fails for the cygwin patch I submitted ear= lier... So the only solution seems to unset all environment variables both in environ list before calling CreateProcess and in in_env after... 2011-10-04 Pierre Muller Add tests for passing of environment variables to inferior. * gdb.base/testenv.c: New test source. * gdb.base/testenv.exp: New expect test. Index: testsuite/gdb.base/testenv.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: testsuite/gdb.base/testenv.c diff -N testsuite/gdb.base/testenv.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ testsuite/gdb.base/testenv.c 4 Oct 2011 16:04:12 -0000 @@ -0,0 +1,53 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2011 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 source is used to check that GDb correctly + passes on environment variables down to inferior. + One of the tests checks that 'unset' variables also are removed from + inferior environment list. */ + +#include + +#ifdef PROTOTYPES +int main (int argc, char **argv, char **envp) +#else +main (argc, argv, envp) + int argc; + char **argv; + char **envp; +#endif +{ + int i, j; +#ifdef usestubs + set_debug_traps(); + breakpoint(); +#endif + + j =3D 0; + for (i =3D 0; envp[i]; i++) + { + if (strncmp ("TEST_GDB", envp[i], 8) =3D=3D 0) + { + printf ("%s\n", envp[i]); + j++; + } + } + printf ("Program found %d variables starting with TEST_GDB\n", j); + return 0; /* set breakpoint here. */ +} + Index: testsuite/gdb.base/testenv.exp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: testsuite/gdb.base/testenv.exp diff -N testsuite/gdb.base/testenv.exp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ testsuite/gdb.base/testenv.exp 4 Oct 2011 16:04:12 -0000 @@ -0,0 +1,127 @@ +# Copyright 2011 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 was written by Pierre Muller +# +# Check if environment variables are correctly passed to inferiors +# + +if $tracelevel then { + strace $tracelevel +} + + +set testfile "testenv" +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} +if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile} executable {de= bug}] !=3D "" } { + untested testenv.exp + return -1 +} + +# Start with a fresh gdb + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +# make sure $pc is sane, in case we're talking to a board. +if { ![runto_main] } { + gdb_suppress_tests; +} + +set bp_line [gdb_get_line_number "set breakpoint here"] +gdb_breakpoint $bp_line + +# +# Test gdb set/unset environment commands. +# Executable lists and counts all environment variables +# starting with TEST_GDB. + + +# First test with no TEST_GDB_VAR +gdb_test "continue" \ + ".*Program found 0 variables starting with TEST_GDB.*" \ + "Test no TEST_GDB var" + +gdb_test_no_output "set env TEST_GDB_VAR1 test1" \ + "Set TEST_GDB_VAR1" + +runto main +gdb_breakpoint $bp_line + +# Second test with one TEST_GDB_VAR +gdb_test "continue" \ + ".*Program found 1 variables starting with TEST_GDB.*" \ + "Test with one TEST_GDB var" + +gdb_test_no_output "set env TEST_GDB_VAR2 test2" \ + "Set TEST_GDB_VAR2" + +runto main +gdb_breakpoint $bp_line + +# Third test with two TEST_GDB_VAR +gdb_test "continue" \ + ".*Program found 2 variables starting with TEST_GDB.*" \ + "Test with two TEST_GDB var" + +gdb_test_no_output "unset env TEST_GDB_VAR1" \ + "Unset TEST_GDB_VAR1" + +runto main +gdb_breakpoint $bp_line + +# Fourth test with one TEST_GDB_VAR left, after one was removed +# with unset command. +gdb_test "continue" \ + ".*Program found 1 variables starting with TEST_GDB.*" \ + "Test with one TEST_GDB var, after unset" + +gdb_exit + +set env(TEST_GDB_GLOBAL) "Global environment value" + +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +# make sure $pc is sane, in case we're talking to a board. +if { ![runto_main] } { + gdb_suppress_tests; +} + +set bp_line [gdb_get_line_number "set breakpoint here"] +gdb_breakpoint $bp_line + +gdb_test "show env" ".*TEST_GDB_GLOBAL=3D.*" "Test passing TEST_GDB_GLOBAL= to GDB" +# First test with only inherited TEST_GDB_GLOBAL +gdb_test "continue" \ + ".*TEST_GDB_GLOBAL=3DGlobal environment value.*Program found 1 variables= starting with TEST_GDB.*" \ + "Test with TEST_GDB_GLOBAL" + +gdb_test_no_output "unset env TEST_GDB_GLOBAL" \ + "Unset TEST_GDB_GLOBAL" + +runto main +gdb_breakpoint $bp_line + +# Second test with one TEST_GDB_VAR +gdb_test "continue" \ + ".*Program found 0 variables starting with TEST_GDB.*" \ + "Test with TEST_GDB_GLOBAL unset" + +gdb_exit