blob: 6569375c6e37a11b9f9033c435e2aa0919784092 [file] [log] [blame]
// Copyright 2017 The Chromium OS 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 "cros-disks/rename_manager.h"
#include "cros-disks/platform.h"
#include <string>
#include <gtest/gtest.h>
namespace {
// Forbidden characters in volume name
const char kForbiddenCharacters[] = "*?.,;:/\\|+=<>[]\"'\t";
}; // namespace
namespace cros_disks {
class RenameManagerTest : public ::testing::Test {
public:
RenameManagerTest() : manager_(&platform_) {}
protected:
Platform platform_;
RenameManager manager_;
};
TEST_F(RenameManagerTest, ValidateParameters) {
// Test long volume names
EXPECT_EQ(RENAME_ERROR_LONG_NAME,
manager_.ValidateParameters("ABCDEFGHIJKL", "vfat"));
EXPECT_EQ(RENAME_ERROR_LONG_NAME,
manager_.ValidateParameters("ABCDEFGHIJKLMNOP", "exfat"));
// Test volume name length limits
EXPECT_EQ(RENAME_ERROR_NONE,
manager_.ValidateParameters("ABCDEFGHIJK", "vfat"));
EXPECT_EQ(RENAME_ERROR_NONE,
manager_.ValidateParameters("ABCDEFGHIJKLMNO", "exfat"));
// Test unsupported file system type
EXPECT_EQ(RENAME_ERROR_UNSUPPORTED_FILESYSTEM,
manager_.ValidateParameters("ABC", "nonexistent-fs"));
}
TEST_F(RenameManagerTest, CanRename) {
EXPECT_TRUE(manager_.CanRename("/dev/sda1"));
EXPECT_TRUE(manager_.CanRename("/devices/block/sda/sda1"));
EXPECT_TRUE(manager_.CanRename("/sys/devices/block/sda/sda1"));
EXPECT_FALSE(manager_.CanRename("/media/removable/disk1"));
EXPECT_FALSE(manager_.CanRename("/media/removable/disk1/"));
EXPECT_FALSE(manager_.CanRename("/media/removable/disk 1"));
EXPECT_FALSE(manager_.CanRename("/media/archive/test.zip"));
EXPECT_FALSE(manager_.CanRename("/media/archive/test.zip/"));
EXPECT_FALSE(manager_.CanRename("/media/archive/test 1.zip"));
EXPECT_FALSE(manager_.CanRename("/media/removable/disk1/test.zip"));
EXPECT_FALSE(manager_.CanRename("/media/removable/disk1/test 1.zip"));
EXPECT_FALSE(manager_.CanRename("/media/removable/disk1/dir1/test.zip"));
EXPECT_FALSE(manager_.CanRename("/media/removable/test.zip/test1.zip"));
EXPECT_FALSE(manager_.CanRename("/home/chronos/user/Downloads/test1.zip"));
EXPECT_FALSE(manager_.CanRename("/home/chronos/user/GCache/test1.zip"));
EXPECT_FALSE(
manager_.CanRename("/home/chronos"
"/u-0123456789abcdef0123456789abcdef01234567"
"/Downloads/test1.zip"));
EXPECT_FALSE(
manager_.CanRename("/home/chronos"
"/u-0123456789abcdef0123456789abcdef01234567"
"/GCache/test1.zip"));
EXPECT_FALSE(manager_.CanRename(""));
EXPECT_FALSE(manager_.CanRename("/tmp"));
EXPECT_FALSE(manager_.CanRename("/media/removable"));
EXPECT_FALSE(manager_.CanRename("/media/removable/"));
EXPECT_FALSE(manager_.CanRename("/media/archive"));
EXPECT_FALSE(manager_.CanRename("/media/archive/"));
EXPECT_FALSE(manager_.CanRename("/home/chronos/user/Downloads"));
EXPECT_FALSE(manager_.CanRename("/home/chronos/user/Downloads/"));
}
class RenameManagerVolumeNameTest : public RenameManagerTest,
public ::testing::WithParamInterface<int> {
};
INSTANTIATE_TEST_CASE_P(AsciiRange,
RenameManagerVolumeNameTest,
testing::Range(0, 256));
TEST_P(RenameManagerVolumeNameTest, ValidateParameters) {
char value = GetParam();
std::string volume_name = std::string("ABC") + value;
if (!std::isprint(value) || strchr(kForbiddenCharacters, value)) {
// Test forbidden characters in volume name
EXPECT_EQ(RENAME_ERROR_INVALID_CHARACTER,
manager_.ValidateParameters(volume_name, "vfat"));
EXPECT_EQ(RENAME_ERROR_INVALID_CHARACTER,
manager_.ValidateParameters(volume_name, "exfat"));
} else {
// Test allowed characters in volume name
EXPECT_EQ(RENAME_ERROR_NONE,
manager_.ValidateParameters(volume_name, "vfat"));
EXPECT_EQ(RENAME_ERROR_NONE,
manager_.ValidateParameters(volume_name, "exfat"));
}
}
} // namespace cros_disks