Austin Tankiang | 9ccaf68 | 2019-06-06 15:05:55 +1000 | [diff] [blame] | 1 | // Copyright 2019 The Chromium OS Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include "cros-disks/filesystem_label.h" |
| 6 | |
| 7 | #include <string> |
| 8 | |
| 9 | #include <gtest/gtest.h> |
| 10 | |
| 11 | namespace cros_disks { |
| 12 | |
| 13 | namespace { |
| 14 | |
Austin Tankiang | cc6822f | 2019-07-24 16:24:32 +1000 | [diff] [blame] | 15 | // A subset of known forbidden characters for testing |
| 16 | const char kForbiddenTestCharacters[] = { |
| 17 | '*', '?', '.', ',', ';', ':', '/', '\\', '|', |
| 18 | '+', '=', '<', '>', '[', ']', '"', '\'', '\t', |
| 19 | '\v', '\r', '\n', '\x02', '\x10', '\x7f', '\0'}; |
Austin Tankiang | 9ccaf68 | 2019-06-06 15:05:55 +1000 | [diff] [blame] | 20 | |
| 21 | }; // namespace |
| 22 | |
| 23 | TEST(FilesystemLabelTest, ValidateVolumeLabel) { |
| 24 | // Test long volume names |
| 25 | EXPECT_EQ(LabelErrorType::kLabelErrorLongName, |
| 26 | ValidateVolumeLabel("ABCDEFGHIJKL", "vfat")); |
| 27 | EXPECT_EQ(LabelErrorType::kLabelErrorLongName, |
| 28 | ValidateVolumeLabel("ABCDEFGHIJKLMNOP", "exfat")); |
Austin Tankiang | df16abb | 2019-06-07 14:04:30 +1000 | [diff] [blame] | 29 | EXPECT_EQ(LabelErrorType::kLabelErrorLongName, |
| 30 | ValidateVolumeLabel("ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "ntfs")); |
Austin Tankiang | 9ccaf68 | 2019-06-06 15:05:55 +1000 | [diff] [blame] | 31 | |
| 32 | // Test volume name length limits |
| 33 | EXPECT_EQ(LabelErrorType::kLabelErrorNone, |
| 34 | ValidateVolumeLabel("ABCDEFGHIJK", "vfat")); |
| 35 | EXPECT_EQ(LabelErrorType::kLabelErrorNone, |
| 36 | ValidateVolumeLabel("ABCDEFGHIJKLMNO", "exfat")); |
Austin Tankiang | df16abb | 2019-06-07 14:04:30 +1000 | [diff] [blame] | 37 | EXPECT_EQ(LabelErrorType::kLabelErrorNone, |
| 38 | ValidateVolumeLabel("ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEF", "ntfs")); |
Austin Tankiang | 9ccaf68 | 2019-06-06 15:05:55 +1000 | [diff] [blame] | 39 | |
| 40 | // Test unsupported file system type |
| 41 | EXPECT_EQ(LabelErrorType::kLabelErrorUnsupportedFilesystem, |
| 42 | ValidateVolumeLabel("ABC", "nonexistent-fs")); |
| 43 | } |
| 44 | |
Austin Tankiang | cc6822f | 2019-07-24 16:24:32 +1000 | [diff] [blame] | 45 | class FilesystemLabelCharacterTest |
| 46 | : public ::testing::TestWithParam<const char*> {}; |
Austin Tankiang | 9ccaf68 | 2019-06-06 15:05:55 +1000 | [diff] [blame] | 47 | |
Jim Pollock | 2667fca | 2020-06-11 07:17:59 +0100 | [diff] [blame] | 48 | INSTANTIATE_TEST_SUITE_P(AsciiRange, |
| 49 | FilesystemLabelCharacterTest, |
| 50 | testing::Values("vfat", "exfat", "ntfs")); |
Austin Tankiang | 9ccaf68 | 2019-06-06 15:05:55 +1000 | [diff] [blame] | 51 | |
| 52 | TEST_P(FilesystemLabelCharacterTest, ValidateVolumeLabelCharacters) { |
Austin Tankiang | cc6822f | 2019-07-24 16:24:32 +1000 | [diff] [blame] | 53 | const char* filesystem = GetParam(); |
Austin Tankiang | 9ccaf68 | 2019-06-06 15:05:55 +1000 | [diff] [blame] | 54 | |
Austin Tankiang | cc6822f | 2019-07-24 16:24:32 +1000 | [diff] [blame] | 55 | // Test allowed characters in volume name |
| 56 | EXPECT_EQ(LabelErrorType::kLabelErrorNone, |
| 57 | ValidateVolumeLabel("AZaz09", filesystem)); |
| 58 | EXPECT_EQ(LabelErrorType::kLabelErrorNone, |
| 59 | ValidateVolumeLabel(" !#$%&()", filesystem)); |
| 60 | EXPECT_EQ(LabelErrorType::kLabelErrorNone, |
| 61 | ValidateVolumeLabel("-@^_`{}~", filesystem)); |
| 62 | |
| 63 | for (char c : kForbiddenTestCharacters) { |
Austin Tankiang | 9ccaf68 | 2019-06-06 15:05:55 +1000 | [diff] [blame] | 64 | // Test forbidden characters in volume name |
| 65 | EXPECT_EQ(LabelErrorType::kLabelErrorInvalidCharacter, |
Austin Tankiang | cc6822f | 2019-07-24 16:24:32 +1000 | [diff] [blame] | 66 | ValidateVolumeLabel(std::string("ABC") + c, filesystem)); |
Austin Tankiang | 9ccaf68 | 2019-06-06 15:05:55 +1000 | [diff] [blame] | 67 | } |
| 68 | } |
| 69 | |
| 70 | } // namespace cros_disks |