blob: 70eb6c7101ccfc88d268f9414bf107002faa6aa8 [file] [log] [blame]
Darin Petkov33d30642010-08-04 10:18:57 -07001// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
adlr@google.com3defe6a2009-12-04 20:57:17 +00002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <sys/stat.h>
6#include <sys/types.h>
7#include <errno.h>
Andrew de los Reyes4fe15d02009-12-10 19:01:36 -08008#include <string>
adlr@google.com3defe6a2009-12-04 20:57:17 +00009#include <vector>
10#include <gtest/gtest.h>
11#include "update_engine/utils.h"
12
Andrew de los Reyes4fe15d02009-12-10 19:01:36 -080013using std::string;
adlr@google.com3defe6a2009-12-04 20:57:17 +000014using std::vector;
15
16namespace chromeos_update_engine {
17
18class UtilsTest : public ::testing::Test { };
19
Darin Petkov33d30642010-08-04 10:18:57 -070020TEST(UtilsTest, IsOfficialBuild) {
21 // Pretty lame test...
22 EXPECT_TRUE(utils::IsOfficialBuild());
23}
24
adlr@google.com3defe6a2009-12-04 20:57:17 +000025TEST(UtilsTest, NormalizePathTest) {
26 EXPECT_EQ("", utils::NormalizePath("", false));
27 EXPECT_EQ("", utils::NormalizePath("", true));
28 EXPECT_EQ("/", utils::NormalizePath("/", false));
29 EXPECT_EQ("", utils::NormalizePath("/", true));
30 EXPECT_EQ("/", utils::NormalizePath("//", false));
31 EXPECT_EQ("", utils::NormalizePath("//", true));
32 EXPECT_EQ("foo", utils::NormalizePath("foo", false));
33 EXPECT_EQ("foo", utils::NormalizePath("foo", true));
34 EXPECT_EQ("/foo/", utils::NormalizePath("/foo//", false));
35 EXPECT_EQ("/foo", utils::NormalizePath("/foo//", true));
36 EXPECT_EQ("bar/baz/foo/adlr", utils::NormalizePath("bar/baz//foo/adlr",
37 false));
38 EXPECT_EQ("bar/baz/foo/adlr", utils::NormalizePath("bar/baz//foo/adlr",
39 true));
40 EXPECT_EQ("/bar/baz/foo/adlr/", utils::NormalizePath("/bar/baz//foo/adlr/",
41 false));
42 EXPECT_EQ("/bar/baz/foo/adlr", utils::NormalizePath("/bar/baz//foo/adlr/",
43 true));
44 EXPECT_EQ("\\\\", utils::NormalizePath("\\\\", false));
45 EXPECT_EQ("\\\\", utils::NormalizePath("\\\\", true));
46 EXPECT_EQ("\\:/;$PATH\n\\", utils::NormalizePath("\\://;$PATH\n\\", false));
47 EXPECT_EQ("\\:/;$PATH\n\\", utils::NormalizePath("\\://;$PATH\n\\", true));
48 EXPECT_EQ("/spaces s/ ok/s / / /",
49 utils::NormalizePath("/spaces s/ ok/s / / /", false));
50 EXPECT_EQ("/spaces s/ ok/s / / ",
51 utils::NormalizePath("/spaces s/ ok/s / / /", true));
52}
53
54TEST(UtilsTest, ReadFileFailure) {
55 vector<char> empty;
56 EXPECT_FALSE(utils::ReadFile("/this/doesn't/exist", &empty));
57}
58
59TEST(UtilsTest, ErrnoNumberAsStringTest) {
60 EXPECT_EQ("No such file or directory", utils::ErrnoNumberAsString(ENOENT));
61}
62
63TEST(UtilsTest, StringHasSuffixTest) {
64 EXPECT_TRUE(utils::StringHasSuffix("foo", "foo"));
65 EXPECT_TRUE(utils::StringHasSuffix("foo", "o"));
66 EXPECT_TRUE(utils::StringHasSuffix("", ""));
67 EXPECT_TRUE(utils::StringHasSuffix("abcabc", "abc"));
68 EXPECT_TRUE(utils::StringHasSuffix("adlrwashere", "ere"));
69 EXPECT_TRUE(utils::StringHasSuffix("abcdefgh", "gh"));
70 EXPECT_TRUE(utils::StringHasSuffix("abcdefgh", ""));
71 EXPECT_FALSE(utils::StringHasSuffix("foo", "afoo"));
72 EXPECT_FALSE(utils::StringHasSuffix("", "x"));
73 EXPECT_FALSE(utils::StringHasSuffix("abcdefgh", "fg"));
74 EXPECT_FALSE(utils::StringHasSuffix("abcdefgh", "ab"));
75}
76
77TEST(UtilsTest, StringHasPrefixTest) {
78 EXPECT_TRUE(utils::StringHasPrefix("foo", "foo"));
79 EXPECT_TRUE(utils::StringHasPrefix("foo", "f"));
80 EXPECT_TRUE(utils::StringHasPrefix("", ""));
81 EXPECT_TRUE(utils::StringHasPrefix("abcabc", "abc"));
82 EXPECT_TRUE(utils::StringHasPrefix("adlrwashere", "adl"));
83 EXPECT_TRUE(utils::StringHasPrefix("abcdefgh", "ab"));
84 EXPECT_TRUE(utils::StringHasPrefix("abcdefgh", ""));
85 EXPECT_FALSE(utils::StringHasPrefix("foo", "fooa"));
86 EXPECT_FALSE(utils::StringHasPrefix("", "x"));
87 EXPECT_FALSE(utils::StringHasPrefix("abcdefgh", "bc"));
88 EXPECT_FALSE(utils::StringHasPrefix("abcdefgh", "gh"));
89}
90
91TEST(UtilsTest, BootDeviceTest) {
92 // Pretty lame test...
93 EXPECT_FALSE(utils::BootDevice().empty());
94}
95
Andrew de los Reyesf9185172010-05-03 11:07:05 -070096TEST(UtilsTest, BootKernelDeviceTest) {
97 EXPECT_EQ("", utils::BootKernelDevice("foo"));
98 EXPECT_EQ("", utils::BootKernelDevice("/dev/sda0"));
99 EXPECT_EQ("", utils::BootKernelDevice("/dev/sda1"));
100 EXPECT_EQ("", utils::BootKernelDevice("/dev/sda2"));
101 EXPECT_EQ("/dev/sda2", utils::BootKernelDevice("/dev/sda3"));
102 EXPECT_EQ("", utils::BootKernelDevice("/dev/sda4"));
103 EXPECT_EQ("/dev/sda4", utils::BootKernelDevice("/dev/sda5"));
104 EXPECT_EQ("", utils::BootKernelDevice("/dev/sda6"));
105 EXPECT_EQ("/dev/sda6", utils::BootKernelDevice("/dev/sda7"));
106 EXPECT_EQ("", utils::BootKernelDevice("/dev/sda8"));
107 EXPECT_EQ("", utils::BootKernelDevice("/dev/sda9"));
108}
109
adlr@google.com3defe6a2009-12-04 20:57:17 +0000110TEST(UtilsTest, RecursiveUnlinkDirTest) {
111 EXPECT_EQ(0, mkdir("RecursiveUnlinkDirTest-a", 0755));
112 EXPECT_EQ(0, mkdir("RecursiveUnlinkDirTest-b", 0755));
113 EXPECT_EQ(0, symlink("../RecursiveUnlinkDirTest-a",
114 "RecursiveUnlinkDirTest-b/link"));
115 EXPECT_EQ(0, system("echo hi > RecursiveUnlinkDirTest-b/file"));
116 EXPECT_EQ(0, mkdir("RecursiveUnlinkDirTest-b/dir", 0755));
117 EXPECT_EQ(0, system("echo ok > RecursiveUnlinkDirTest-b/dir/subfile"));
118 EXPECT_TRUE(utils::RecursiveUnlinkDir("RecursiveUnlinkDirTest-b"));
119 EXPECT_TRUE(utils::FileExists("RecursiveUnlinkDirTest-a"));
120 EXPECT_EQ(0, system("rm -rf RecursiveUnlinkDirTest-a"));
121 EXPECT_FALSE(utils::FileExists("RecursiveUnlinkDirTest-b"));
122 EXPECT_TRUE(utils::RecursiveUnlinkDir("/something/that/doesnt/exist"));
123}
124
125TEST(UtilsTest, TempFilenameTest) {
126 const string original = "/foo.XXXXXX";
127 const string result = utils::TempFilename(original);
128 EXPECT_EQ(original.size(), result.size());
129 EXPECT_TRUE(utils::StringHasPrefix(result, "/foo."));
130 EXPECT_FALSE(utils::StringHasSuffix(result, "XXXXXX"));
131}
132
Andrew de los Reyesf9714432010-05-04 10:21:23 -0700133TEST(UtilsTest, RootDeviceTest) {
134 EXPECT_EQ("/dev/sda", utils::RootDevice("/dev/sda3"));
135 EXPECT_EQ("/dev/mmc0", utils::RootDevice("/dev/mmc0p3"));
Darin Petkovf74eb652010-08-04 12:08:38 -0700136 EXPECT_EQ("", utils::RootDevice("/dev/foo/bar"));
137 EXPECT_EQ("", utils::RootDevice("/"));
138 EXPECT_EQ("", utils::RootDevice(""));
139}
140
141TEST(UtilsTest, SysfsBlockDeviceTest) {
142 EXPECT_EQ("/sys/block/sda", utils::SysfsBlockDevice("/dev/sda"));
143 EXPECT_EQ("", utils::SysfsBlockDevice("/foo/sda"));
144 EXPECT_EQ("", utils::SysfsBlockDevice("/dev/foo/bar"));
145 EXPECT_EQ("", utils::SysfsBlockDevice("/"));
146 EXPECT_EQ("", utils::SysfsBlockDevice("./"));
147 EXPECT_EQ("", utils::SysfsBlockDevice(""));
148}
149
150TEST(UtilsTest, IsRemovableDeviceTest) {
151 EXPECT_FALSE(utils::IsRemovableDevice(""));
152 EXPECT_FALSE(utils::IsRemovableDevice("/dev/non-existent-device"));
Andrew de los Reyesf9714432010-05-04 10:21:23 -0700153}
154
155TEST(UtilsTest, PartitionNumberTest) {
156 EXPECT_EQ("3", utils::PartitionNumber("/dev/sda3"));
157 EXPECT_EQ("3", utils::PartitionNumber("/dev/mmc0p3"));
158}
159
Darin Petkovc6c135c2010-08-11 13:36:18 -0700160TEST(UtilsTest, ComparePriorities) {
161 EXPECT_LT(utils::ComparePriorities(utils::kProcessPriorityLow,
162 utils::kProcessPriorityNormal), 0);
163 EXPECT_GT(utils::ComparePriorities(utils::kProcessPriorityNormal,
164 utils::kProcessPriorityLow), 0);
165 EXPECT_EQ(utils::ComparePriorities(utils::kProcessPriorityNormal,
166 utils::kProcessPriorityNormal), 0);
167 EXPECT_GT(utils::ComparePriorities(utils::kProcessPriorityHigh,
168 utils::kProcessPriorityNormal), 0);
169}
170
adlr@google.com3defe6a2009-12-04 20:57:17 +0000171} // namespace chromeos_update_engine