blob: dd039cfdb3868c23557c2bb966fb550aa43b469a [file] [log] [blame]
Austin Tankiang9ccaf682019-06-06 15:05:55 +10001// 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
11namespace cros_disks {
12
13namespace {
14
Austin Tankiangcc6822f2019-07-24 16:24:32 +100015// A subset of known forbidden characters for testing
16const char kForbiddenTestCharacters[] = {
17 '*', '?', '.', ',', ';', ':', '/', '\\', '|',
18 '+', '=', '<', '>', '[', ']', '"', '\'', '\t',
19 '\v', '\r', '\n', '\x02', '\x10', '\x7f', '\0'};
Austin Tankiang9ccaf682019-06-06 15:05:55 +100020
21}; // namespace
22
23TEST(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 Tankiangdf16abb2019-06-07 14:04:30 +100029 EXPECT_EQ(LabelErrorType::kLabelErrorLongName,
30 ValidateVolumeLabel("ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "ntfs"));
Austin Tankiang9ccaf682019-06-06 15:05:55 +100031
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 Tankiangdf16abb2019-06-07 14:04:30 +100037 EXPECT_EQ(LabelErrorType::kLabelErrorNone,
38 ValidateVolumeLabel("ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEF", "ntfs"));
Austin Tankiang9ccaf682019-06-06 15:05:55 +100039
40 // Test unsupported file system type
41 EXPECT_EQ(LabelErrorType::kLabelErrorUnsupportedFilesystem,
42 ValidateVolumeLabel("ABC", "nonexistent-fs"));
43}
44
Austin Tankiangcc6822f2019-07-24 16:24:32 +100045class FilesystemLabelCharacterTest
46 : public ::testing::TestWithParam<const char*> {};
Austin Tankiang9ccaf682019-06-06 15:05:55 +100047
Jim Pollock2667fca2020-06-11 07:17:59 +010048INSTANTIATE_TEST_SUITE_P(AsciiRange,
49 FilesystemLabelCharacterTest,
50 testing::Values("vfat", "exfat", "ntfs"));
Austin Tankiang9ccaf682019-06-06 15:05:55 +100051
52TEST_P(FilesystemLabelCharacterTest, ValidateVolumeLabelCharacters) {
Austin Tankiangcc6822f2019-07-24 16:24:32 +100053 const char* filesystem = GetParam();
Austin Tankiang9ccaf682019-06-06 15:05:55 +100054
Austin Tankiangcc6822f2019-07-24 16:24:32 +100055 // 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 Tankiang9ccaf682019-06-06 15:05:55 +100064 // Test forbidden characters in volume name
65 EXPECT_EQ(LabelErrorType::kLabelErrorInvalidCharacter,
Austin Tankiangcc6822f2019-07-24 16:24:32 +100066 ValidateVolumeLabel(std::string("ABC") + c, filesystem));
Austin Tankiang9ccaf682019-06-06 15:05:55 +100067 }
68}
69
70} // namespace cros_disks