blob: 0786996fb7875b70bff0f48a41d56024510d23b5 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* 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 KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <string>
#include <vector>
#include <gmock/gmock.h>
#include <mesos/mesos.hpp>
#include <slave/containerizer/mesos_containerizer.hpp>
#include <slave/flags.hpp>
using namespace mesos;
using namespace mesos::internal;
using namespace mesos::internal::slave;
using std::string;
using std::vector;
namespace mesos {
namespace internal {
namespace slave {
// Forward declaration.
string buildCommand(
const CommandInfo& commandInfo,
const string& directory,
const Option<string>& user,
const Flags& flags);
} // namespace slave {
} // namespace internal {
} // namespace mesos {
class MesosContainerizerProcessTest : public ::testing::Test {};
TEST_F(MesosContainerizerProcessTest, Simple) {
CommandInfo commandInfo;
CommandInfo::URI uri;
uri.set_value("hdfs:///uri");
uri.set_executable(false);
commandInfo.add_uris()->MergeFrom(uri);
string directory = "/tmp/directory";
Option<string> user = "user";
Flags flags;
flags.frameworks_home = "/tmp/frameworks";
flags.hadoop_home = "/tmp/hadoop";
string command = buildCommand(commandInfo, directory, user, flags);
EXPECT_STREQ(
"/usr/bin/env "
"MESOS_EXECUTOR_URIS=\"hdfs:///uri+0X\" "
"MESOS_WORK_DIRECTORY=/tmp/directory "
"MESOS_USER=user "
"MESOS_FRAMEWORKS_HOME=/tmp/frameworks "
"HADOOP_HOME=/tmp/hadoop",
command.c_str());
}
TEST_F(MesosContainerizerProcessTest, MultipleURIs) {
CommandInfo commandInfo;
CommandInfo::URI uri;
uri.set_value("hdfs:///uri1");
uri.set_executable(false);
commandInfo.add_uris()->MergeFrom(uri);
uri.set_value("hdfs:///uri2");
uri.set_executable(true);
commandInfo.add_uris()->MergeFrom(uri);
string directory = "/tmp/directory";
Option<string> user("user");
Flags flags;
flags.frameworks_home = "/tmp/frameworks";
flags.hadoop_home = "/tmp/hadoop";
string command = buildCommand(commandInfo, directory, user, flags);
EXPECT_STREQ(
"/usr/bin/env "
"MESOS_EXECUTOR_URIS=\"hdfs:///uri1+0X hdfs:///uri2+1X\" "
"MESOS_WORK_DIRECTORY=/tmp/directory "
"MESOS_USER=user "
"MESOS_FRAMEWORKS_HOME=/tmp/frameworks "
"HADOOP_HOME=/tmp/hadoop",
command.c_str());
}
TEST_F(MesosContainerizerProcessTest, NoUser) {
CommandInfo commandInfo;
CommandInfo::URI uri;
uri.set_value("hdfs:///uri");
uri.set_executable(false);
commandInfo.add_uris()->MergeFrom(uri);
string directory = "/tmp/directory";
Flags flags;
flags.frameworks_home = "/tmp/frameworks";
flags.hadoop_home = "/tmp/hadoop";
string command = buildCommand(commandInfo, directory, None(), flags);
EXPECT_STREQ(
"/usr/bin/env "
"MESOS_EXECUTOR_URIS=\"hdfs:///uri+0X\" "
"MESOS_WORK_DIRECTORY=/tmp/directory "
"MESOS_FRAMEWORKS_HOME=/tmp/frameworks "
"HADOOP_HOME=/tmp/hadoop",
command.c_str());
}
TEST_F(MesosContainerizerProcessTest, EmptyHadoop) {
CommandInfo commandInfo;
CommandInfo::URI uri;
uri.set_value("hdfs:///uri");
uri.set_executable(false);
commandInfo.add_uris()->MergeFrom(uri);
string directory = "/tmp/directory";
Option<string> user = "user";
Flags flags;
flags.frameworks_home = "/tmp/frameworks";
flags.hadoop_home = "";
string command = buildCommand(commandInfo, directory, user, flags);
EXPECT_STREQ(
"/usr/bin/env "
"MESOS_EXECUTOR_URIS=\"hdfs:///uri+0X\" "
"MESOS_WORK_DIRECTORY=/tmp/directory "
"MESOS_USER=user "
"MESOS_FRAMEWORKS_HOME=/tmp/frameworks",
command.c_str());
}
TEST_F(MesosContainerizerProcessTest, NoHadoop) {
CommandInfo commandInfo;
CommandInfo::URI uri;
uri.set_value("hdfs:///uri");
uri.set_executable(false);
commandInfo.add_uris()->MergeFrom(uri);
string directory = "/tmp/directory";
Option<string> user = "user";
Flags flags;
flags.frameworks_home = "/tmp/frameworks";
string command = buildCommand(commandInfo, directory, user, flags);
EXPECT_STREQ(
"/usr/bin/env "
"MESOS_EXECUTOR_URIS=\"hdfs:///uri+0X\" "
"MESOS_WORK_DIRECTORY=/tmp/directory "
"MESOS_USER=user "
"MESOS_FRAMEWORKS_HOME=/tmp/frameworks",
command.c_str());
}
TEST_F(MesosContainerizerProcessTest, NoExtract)
{
CommandInfo commandInfo;
CommandInfo::URI uri;
uri.set_value("hdfs:///uri");
uri.set_executable(false);
uri.set_extract(false);
commandInfo.add_uris()->MergeFrom(uri);
string directory = "/tmp/directory";
Option<string> user = "user";
Flags flags;
flags.frameworks_home = "/tmp/frameworks";
flags.hadoop_home = "/tmp/hadoop";
string command = buildCommand(commandInfo, directory, user, flags);
EXPECT_STREQ(
"/usr/bin/env "
"MESOS_EXECUTOR_URIS=\"hdfs:///uri+0N\" "
"MESOS_WORK_DIRECTORY=/tmp/directory "
"MESOS_USER=user "
"MESOS_FRAMEWORKS_HOME=/tmp/frameworks "
"HADOOP_HOME=/tmp/hadoop",
command.c_str());
}
TEST_F(MesosContainerizerProcessTest, NoExtractExecutable)
{
CommandInfo commandInfo;
CommandInfo::URI uri;
uri.set_value("hdfs:///uri");
uri.set_executable(true);
uri.set_extract(false);
commandInfo.add_uris()->MergeFrom(uri);
string directory = "/tmp/directory";
Option<string> user = "user";
Flags flags;
flags.frameworks_home = "/tmp/frameworks";
flags.hadoop_home = "/tmp/hadoop";
string command = buildCommand(commandInfo, directory, user, flags);
EXPECT_STREQ(
"/usr/bin/env "
"MESOS_EXECUTOR_URIS=\"hdfs:///uri+1N\" "
"MESOS_WORK_DIRECTORY=/tmp/directory "
"MESOS_USER=user "
"MESOS_FRAMEWORKS_HOME=/tmp/frameworks "
"HADOOP_HOME=/tmp/hadoop",
command.c_str());
}