blob: 5c47e2aa7b9b81e581567e7e777b445185922053 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <string.h>
#include <unistd.h>
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/strings/string_util.h"
#include "content/common/set_process_title_linux.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
const std::string kNullChr(1, '\0');
std::string ReadCmdline() {
std::string cmdline;
CHECK(base::ReadFileToString(base::FilePath("/proc/self/cmdline"), &cmdline));
// The process title appears in different formats depending on Linux kernel
// version:
// "title" (on Linux --4.17)
// "title\0\0\0...\0" (on Linux 4.18--5.2)
// "title\0" (on Linux 5.3--)
//
// For unit tests, just trim trailing null characters to support all cases.
return base::TrimString(cmdline, kNullChr, base::TRIM_TRAILING).as_string();
}
TEST(SetProcTitleLinuxTest, Simple) {
setproctitle("a %s cat", "cute");
EXPECT_TRUE(base::EndsWith(ReadCmdline(), " a cute cat",
base::CompareCase::SENSITIVE))
<< ReadCmdline();
setproctitle("-a %s cat", "cute");
EXPECT_EQ(ReadCmdline(), "a cute cat");
}
TEST(SetProcTitleLinuxTest, Empty) {
setproctitle("-");
EXPECT_EQ(ReadCmdline(), "");
}
TEST(SetProcTitleLinuxTest, Long) {
setproctitle("-long cat is l%0100000dng", 0);
EXPECT_TRUE(base::StartsWith(ReadCmdline(), "long cat is l00000000",
base::CompareCase::SENSITIVE))
<< ReadCmdline();
}
} // namespace