Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/bsd/atf/dist Fix import conflicts.



details:   https://anonhg.NetBSD.org/src/rev/f55cb3c4cf1d
branches:  trunk
changeset: 763715:f55cb3c4cf1d
user:      jmmv <jmmv%NetBSD.org@localhost>
date:      Thu Mar 31 16:44:17 2011 +0000

description:
Fix import conflicts.

diffstat:

 external/bsd/atf/dist/atf-run/atf-run.cpp      |  83 ++++++++++++++-----------
 external/bsd/atf/dist/atf-sh/atf-check.cpp     |   2 +
 external/bsd/atf/dist/atf-sh/atf-check_test.sh |   6 +-
 external/bsd/atf/dist/doc/atf-test-case.4      |   7 +-
 4 files changed, 57 insertions(+), 41 deletions(-)

diffs (193 lines):

diff -r 2b7fac99c68e -r f55cb3c4cf1d external/bsd/atf/dist/atf-run/atf-run.cpp
--- a/external/bsd/atf/dist/atf-run/atf-run.cpp Thu Mar 31 16:41:07 2011 +0000
+++ b/external/bsd/atf/dist/atf-run/atf-run.cpp Thu Mar 31 16:44:17 2011 +0000
@@ -1,7 +1,7 @@
 //
 // Automated Testing Framework (atf)
 //
-// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc.
+// Copyright (c) 2007, 2008, 2009, 2010, 2011 The NetBSD Foundation, Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -99,6 +99,45 @@
     int main(void);
 };
 
+static void
+dump_stacktrace(const atf::fs::path& tp, const atf::process::status& s,
+                const atf::fs::path& workdir, impl::atf_tps_writer& w)
+{
+    PRE(s.signaled() && s.coredump());
+
+    w.stderr_tc("Test program crashed; attempting to get stack trace");
+
+    const atf::fs::path corename = workdir / (tp.leaf_name() + ".core");
+    if (!atf::fs::exists(corename)) {
+        w.stderr_tc("Expected file " + corename.str() + " not found");
+        return;
+    }
+
+    const atf::fs::path gdb(GDB);
+    const atf::fs::path gdbout = workdir / "gdb.out";
+    const atf::process::argv_array args(gdb.leaf_name().c_str(), "-batch",
+                                        "-q", "-ex", "bt", tp.c_str(),
+                                        corename.c_str(), NULL);
+    atf::process::status status = atf::process::exec(
+        gdb, args,
+        atf::process::stream_redirect_path(gdbout),
+        atf::process::stream_redirect_path(atf::fs::path("/dev/null")));
+    if (!status.exited() || status.exitstatus() != EXIT_SUCCESS) {
+        w.stderr_tc("Execution of " GDB " failed");
+        return;
+    }
+
+    std::ifstream input(gdbout.c_str());
+    if (input) {
+        std::string line;
+        while (std::getline(input, line).good())
+            w.stderr_tc(line);
+        input.close();
+    }
+
+    w.stderr_tc("Stack trace complete");
+}
+
 const char* atf_run::m_description =
     "atf-run is a tool that runs tests programs and collects their "
     "results.";
@@ -370,8 +409,8 @@
                 if (user.first != -1 && user.second != -1) {
                     if (::chown(workdir.get_path().c_str(), user.first,
                                 user.second) == -1) {
-                        throw atf::system_error("chmod(" +
-                            workdir.get_path().str() + ")", "chmod(2) failed",
+                        throw atf::system_error("chown(" +
+                            workdir.get_path().str() + ")", "chown(2) failed",
                             errno);
                     }
                     resfile = workdir.get_path() / "tcr";
@@ -380,45 +419,17 @@
                 std::pair< std::string, const atf::process::status > s =
                     impl::run_test_case(tp, tcname, "body", tcmd, config,
                                             resfile, workdir.get_path(), w);
+                if (s.second.signaled() && s.second.coredump())
+                    dump_stacktrace(tp, s.second, workdir.get_path(), w);
+                if (has_cleanup)
+                    (void)impl::run_test_case(tp, tcname, "cleanup", tcmd,
+                            config, resfile, workdir.get_path(), w);
 
                 // TODO: Force deletion of workdir.
 
                 impl::test_case_result tcr = get_test_case_result(s.first,
                     s.second, resfile);
 
-               /* if we have a core, scope out stacktrace */
-               size_t slashpos = tp.str().rfind("/");
-               std::string corename = workdir.get_path().str()
-                   + std::string("/") + tp.str().substr(slashpos+1)
-                   + std::string(".core");
-               if (s.second.signaled() && s.second.coredump() &&
-                   access(corename.c_str(), F_OK) == 0) {
-                       std::string gdbcmd;
-                       char buf[256];
-                       char *p;
-
-                       gdbcmd = std::string("gdb -batch -q -ex bt ") +
-                           tp.str() + std::string(" ") + corename +
-                           std::string(" 2> /dev/null | grep -v ") +
-                           std::string("'(no debugging symbols found)'");
-                       FILE *gdbstrm = popen(gdbcmd.c_str(), "r");
-                       if (gdbstrm) {
-                               w.stderr_tc(std::string("test program crashed, "
-                                   "autolisting stacktrace:"));
-                               while (fgets(buf, sizeof(buf), gdbstrm)) {
-                                       if ((p = strchr(buf, '\n')) != NULL)
-                                               *p = '\0';
-                                       w.stderr_tc(std::string(buf));
-                               }
-                               pclose(gdbstrm);
-                               w.stderr_tc(std::string("stacktrace complete"));
-                       }
-               }
-
-                if (has_cleanup)
-                    (void)impl::run_test_case(tp, tcname, "cleanup", tcmd,
-                            config, resfile, workdir.get_path(), w);
-
                 w.end_tc(tcr.state(), tcr.reason());
                 if (tcr.state() == "failed")
                     errcode = EXIT_FAILURE;
diff -r 2b7fac99c68e -r f55cb3c4cf1d external/bsd/atf/dist/atf-sh/atf-check.cpp
--- a/external/bsd/atf/dist/atf-sh/atf-check.cpp        Thu Mar 31 16:41:07 2011 +0000
+++ b/external/bsd/atf/dist/atf-sh/atf-check.cpp        Thu Mar 31 16:44:17 2011 +0000
@@ -33,12 +33,14 @@
 
 #include <limits.h>
 #include <signal.h>
+#include <unistd.h>
 }
 
 #include <cerrno>
 #include <cstdlib>
 #include <cstring>
 #include <fstream>
+#include <ios>
 #include <iostream>
 #include <iterator>
 #include <list>
diff -r 2b7fac99c68e -r f55cb3c4cf1d external/bsd/atf/dist/atf-sh/atf-check_test.sh
--- a/external/bsd/atf/dist/atf-sh/atf-check_test.sh    Thu Mar 31 16:41:07 2011 +0000
+++ b/external/bsd/atf/dist/atf-sh/atf-check_test.sh    Thu Mar 31 16:44:17 2011 +0000
@@ -27,7 +27,7 @@
 # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 
-# The Atf_Check variable is set by atf-sh.
+# The Atf_Check and Atf-Shell variables are set by atf-sh.
 
 h_pass()
 {
@@ -36,7 +36,7 @@
     echo "Running [atf-check $*] against [${cmd}]"
 
     cat >script.sh <<EOF
-#! $(atf-config -t atf_shell)
+#! ${Atf_Shell}
 ${cmd}
 EOF
     chmod +x script.sh
@@ -54,7 +54,7 @@
     echo "Running [atf-check $*] against [${cmd}]"
 
     cat >script.sh <<EOF
-#! $(atf-config -t atf_shell)
+#! ${Atf_Shell}
 ${cmd}
 EOF
     chmod +x script.sh
diff -r 2b7fac99c68e -r f55cb3c4cf1d external/bsd/atf/dist/doc/atf-test-case.4
--- a/external/bsd/atf/dist/doc/atf-test-case.4 Thu Mar 31 16:41:07 2011 +0000
+++ b/external/bsd/atf/dist/doc/atf-test-case.4 Thu Mar 31 16:44:17 2011 +0000
@@ -26,7 +26,7 @@
 .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
 .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd November 16, 2010
+.Dd December 13, 2010
 .Dt ATF-TEST-CASE 4
 .Os
 .Sh NAME
@@ -274,8 +274,11 @@
 The test program always creates a temporary directory
 and switches to it before running the test case's body.
 This way the test case is free to modify its current directory as it
-wishes, and the test program will be able to clean it up later on in a
+wishes, and the runtime engine will be able to clean it up later on in a
 safe way, removing any traces of its execution from the system.
+To do so, the runtime engine will perform a recursive removal of the work
+directory without crossing mount points; if a mount point is found, the
+file system will be unmounted (if possible).
 .Ss File creation mode mask (umask)
 Test cases are always executed with a file creation mode mask (umask) of
 .Sq 0022 .



Home | Main Index | Thread Index | Old Index