xtreemfs/cpp/test/common/test_environment.cpp
2020-09-22 02:25:22 +02:00

109 lines
2.5 KiB
C++

/*
* Copyright (c) 2012 by Michael Berlin, Zuse Institute Berlin
*
* Licensed under the BSD License, see LICENSE file for details.
*
*/
#include "common/test_environment.h"
#include "common/test_rpc_server_dir.h"
#include "common/test_rpc_server_mrc.h"
#include "common/test_rpc_server_osd.h"
#include "libxtreemfs/client.h"
#include "util/logging.h"
using namespace std;
using namespace xtreemfs::rpc;
using namespace xtreemfs::util;
namespace xtreemfs {
TestEnvironment::TestEnvironment()
: options(), user_credentials() {
user_credentials.set_username("ClientTest");
user_credentials.add_groups("ClientTest");
dir.reset(new TestRPCServerDIR());
mrc.reset(new TestRPCServerMRC());
osds.push_back(new TestRPCServerOSD());
volume_name_ = "test";
}
TestEnvironment::~TestEnvironment() {
for (size_t i = 0; i < osds.size(); i++) {
delete osds[i];
}
}
void TestEnvironment::AddOSDs(int num_of_osds) {
for (int i = 1; i < num_of_osds; i++) {
osds.push_back(new TestRPCServerOSD());
}
}
bool TestEnvironment::Start() {
if (!dir->Start()) {
return false;
}
if (Logging::log->loggingActive(LEVEL_INFO)) {
Logging::log->getLog(LEVEL_INFO)
<< "DIR running at: " << dir->GetAddress() << endl;
}
if (!mrc->Start()) {
return false;
}
if (Logging::log->loggingActive(LEVEL_INFO)) {
Logging::log->getLog(LEVEL_INFO)
<< "MRC running at: " << mrc->GetAddress() << endl;
}
dir->RegisterVolume(volume_name_, mrc->GetAddress());
for (size_t i = 0; i < osds.size(); i++) {
if (!osds[i]->Start()) {
return false;
}
if (Logging::log->loggingActive(LEVEL_INFO)) {
Logging::log->getLog(LEVEL_INFO)
<< "OSD running at: " << osds[i]->GetAddress() << endl;
}
mrc->RegisterOSD(osds[i]->GetAddress());
}
// TODO(mberlin): Register OSDs at MRC.
// If the DIR server address was not explicitly overridden, set it to the
// started test DIR server.
if (options.service_addresses.empty()) {
options.service_addresses.Add(dir->GetAddress());
}
client.reset(Client::CreateClient(
options.service_addresses,
user_credentials,
NULL, // No SSL options.
options));
// Start the client (a connection to the DIR service will be setup).
client->Start();
return true;
}
void TestEnvironment::Stop() {
if (client.get()) {
client->Shutdown();
}
if (dir.get()) {
dir->Stop();
}
if (mrc.get()) {
mrc->Stop();
}
for (size_t i = 0; i < osds.size(); i++) {
osds[i]->Stop();
}
}
} // namespace xtreemfs