summaryrefslogtreecommitdiff
path: root/cpp/src/tests/ForkedBroker.cpp
diff options
context:
space:
mode:
authorKim van der Riet <kpvdr@apache.org>2009-07-01 15:21:54 +0000
committerKim van der Riet <kpvdr@apache.org>2009-07-01 15:21:54 +0000
commit344067e253c58f6ee2ed985752d184d00667b8c1 (patch)
tree29f66bef606c79e2c695569be62ceacca5136216 /cpp/src/tests/ForkedBroker.cpp
parentfde0edfd5204ff68fc38f06afb1ad08028119e32 (diff)
downloadqpid-python-344067e253c58f6ee2ed985752d184d00667b8c1.tar.gz
Fix for cluster_test problems: a) When not started from within test dir, qpidd is not found, and a process cascade results in which each forked process continues and runs all tests after its own instead of terminating; b) Hard-coded paths and names of libs, which have been moved into Makefile.am; c) Some tests use ScopedSuppressLogging, these tests are modified so the scope of the logging suppression does not include the broker/cluster startup.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@790215 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/tests/ForkedBroker.cpp')
-rw-r--r--cpp/src/tests/ForkedBroker.cpp27
1 files changed, 14 insertions, 13 deletions
diff --git a/cpp/src/tests/ForkedBroker.cpp b/cpp/src/tests/ForkedBroker.cpp
index 27480bad6f..ee29926ff8 100644
--- a/cpp/src/tests/ForkedBroker.cpp
+++ b/cpp/src/tests/ForkedBroker.cpp
@@ -7,9 +7,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -50,24 +50,24 @@ ForkedBroker::~ForkedBroker() {
catch (const std::exception& e) {
QPID_LOG(error, QPID_MSG("Killing forked broker: " << e.what()));
}
- if (!dataDir.empty())
+ if (!dataDir.empty())
::system(("rm -rf "+dataDir).c_str());
}
void ForkedBroker::kill(int sig) {
if (pid == 0) return;
- int savePid = pid;
+ int savePid = pid;
pid = 0; // Reset pid here in case of an exception.
using qpid::ErrnoException;
- if (::kill(savePid, sig) < 0)
+ if (::kill(savePid, sig) < 0)
throw ErrnoException("kill failed");
int status;
- if (::waitpid(savePid, &status, 0) < 0 && sig != 9)
+ if (::waitpid(savePid, &status, 0) < 0 && sig != 9)
throw ErrnoException("wait for forked process failed");
- if (WEXITSTATUS(status) != 0 && sig != 9)
+ if (WEXITSTATUS(status) != 0 && sig != 9)
throw qpid::Exception(QPID_MSG("Forked broker exited with: " << WEXITSTATUS(status)));
}
-
+
namespace std {
static ostream& operator<<(ostream& o, const ForkedBroker::Args& a) {
copy(a.begin(), a.end(), ostream_iterator<string>(o, " "));
@@ -83,7 +83,7 @@ bool isLogOption(const std::string& s) {
}
}
-
+
void ForkedBroker::init(const Args& userArgs) {
using qpid::ErrnoException;
port = 0;
@@ -105,19 +105,20 @@ void ForkedBroker::init(const Args& userArgs) {
::close(pipeFds[0]);
int fd = ::dup2(pipeFds[1], 1); // pipe stdout to the parent.
if (fd < 0) throw ErrnoException("dup2 failed");
- const char* prog = ::getenv("QPID_FORKED_BROKER");
- if (!prog) prog = "../qpidd";
+ const char* prog = ::getenv("QPIDD_EXEC");
+ if (!prog) prog = "../qpidd"; // This only works from within svn checkout
Args args(userArgs);
args.push_back("--port=0");
// Keep quiet except for errors.
if (!::getenv("QPID_TRACE") && !::getenv("QPID_LOG_ENABLE")
&& find_if(userArgs.begin(), userArgs.end(), isLogOption) == userArgs.end())
- args.push_back("--log-enable=error+");
+ args.push_back("--log-enable=error+");
std::vector<const char*> argv(args.size());
std::transform(args.begin(), args.end(), argv.begin(), boost::bind(&std::string::c_str, _1));
argv.push_back(0);
QPID_LOG(debug, "ForkedBroker exec " << prog << ": " << args);
execv(prog, const_cast<char* const*>(&argv[0]));
- throw ErrnoException("execv failed");
+ QPID_LOG(critical, "execv failed to start broker: prog=\"" << prog << "\"; args=\"" << args << "\"; errno=" << errno << " (" << std::strerror(errno) << ")");
+ ::exit(1);
}
}