Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
tag: release-2.2.9
Fetching contributors…

Cannot retrieve contributors at this time

65 lines (54 sloc) 1.941 kb
#include "tut.h"
#include "SpawnManager.h"
#include <sys/types.h>
#include <signal.h>
#include <cstring>
#include <unistd.h>
#include "valgrind.h"
using namespace Passenger;
namespace tut {
struct SpawnManagerTest {
SpawnManager manager;
SpawnManagerTest(): manager("stub/spawn_server.rb") {}
};
DEFINE_TEST_GROUP(SpawnManagerTest);
TEST_METHOD(1) {
// Spawning an application should return a valid Application object.
ApplicationPtr app(manager.spawn(PoolOptions(".")));
ensure_equals("The Application object's PID is the same as the one specified by the stub",
app->getPid(), 1234);
}
TEST_METHOD(2) {
// If something goes wrong during spawning, the spawn manager
// should be restarted and another (successful) spawn should be attempted.
pid_t old_pid = manager.getServerPid();
kill(manager.getServerPid(), SIGTERM);
// Give the spawn server the time to properly terminate.
usleep(500000);
ApplicationPtr app(manager.spawn(PoolOptions(".")));
ensure_equals("The Application object's PID is the same as the one specified by the stub",
app->getPid(), 1234);
// The following test will fail if we're inside Valgrind, but that's normal.
// Killing the spawn server doesn't work.
if (!RUNNING_ON_VALGRIND) {
ensure("The spawn server was restarted", manager.getServerPid() != old_pid);
}
}
TEST_METHOD(3) {
// This test fails in Valgrind, but that's normal.
// Killing the spawn server doesn't work.
if (!RUNNING_ON_VALGRIND) {
// If the spawn server dies after a restart, a SpawnException should be thrown.
kill(manager.getServerPid(), SIGTERM);
// Give the spawn server the time to properly terminate.
usleep(500000);
try {
manager.nextRestartShouldFail = true;
ApplicationPtr app(manager.spawn(PoolOptions(".")));
fail("SpawnManager did not throw a SpawnException");
} catch (const SpawnException &e) {
// Success.
}
}
}
}
Jump to Line
Something went wrong with that request. Please try again.