summaryrefslogtreecommitdiff
path: root/apexd/apexd_utils_test.cpp
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2021-01-23 00:09:59 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2021-01-23 00:09:59 +0000
commit35be45b7d948ac0ba773735d1671bea12d56d908 (patch)
treeb83253037c2515255867bf9e24cbbd49191a291f /apexd/apexd_utils_test.cpp
parent22613b7917e90d3f75cbd107bc49f82895381388 (diff)
parent66bd61adb95077787c37bf4aa914cb242a52d413 (diff)
Snap for 7097726 from 66bd61adb95077787c37bf4aa914cb242a52d413 to rvc-qpr3-release
Change-Id: Ibf9fda7c4c4a5deab725fb8cd1c41ed9eef3587e
Diffstat (limited to 'apexd/apexd_utils_test.cpp')
-rw-r--r--apexd/apexd_utils_test.cpp183
1 files changed, 183 insertions, 0 deletions
diff --git a/apexd/apexd_utils_test.cpp b/apexd/apexd_utils_test.cpp
new file mode 100644
index 0000000..06b9c46
--- /dev/null
+++ b/apexd/apexd_utils_test.cpp
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <filesystem>
+#include <string>
+
+#include <errno.h>
+
+#include <android-base/file.h>
+#include <android-base/result.h>
+#include <android-base/stringprintf.h>
+#include <gtest/gtest.h>
+
+#include "apexd_test_utils.h"
+#include "apexd_utils.h"
+
+namespace android {
+namespace apex {
+namespace {
+
+using android::apex::testing::IsOk;
+using android::base::Basename;
+using android::base::StringPrintf;
+using ::testing::UnorderedElementsAre;
+using ::testing::UnorderedElementsAreArray;
+
+// TODO(b/170327382): add unit tests for apexd_utils.h
+
+TEST(ApexdUtilTest, FindFirstExistingDirectoryBothExist) {
+ TemporaryDir first_dir;
+ TemporaryDir second_dir;
+ auto result = FindFirstExistingDirectory(first_dir.path, second_dir.path);
+ ASSERT_TRUE(IsOk(result));
+ ASSERT_EQ(*result, first_dir.path);
+}
+
+TEST(ApexdUtilTest, FindFirstExistingDirectoryOnlyFirstExist) {
+ TemporaryDir first_dir;
+ auto second_dir = "/data/local/tmp/does/not/exist";
+ auto result = FindFirstExistingDirectory(first_dir.path, second_dir);
+ ASSERT_TRUE(IsOk(result));
+ ASSERT_EQ(*result, first_dir.path);
+}
+
+TEST(ApexdUtilTest, FindFirstExistingDirectoryOnlySecondExist) {
+ auto first_dir = "/data/local/tmp/does/not/exist";
+ TemporaryDir second_dir;
+ auto result = FindFirstExistingDirectory(first_dir, second_dir.path);
+ ASSERT_TRUE(IsOk(result));
+ ASSERT_EQ(*result, second_dir.path);
+}
+
+TEST(ApexdUtilTest, FindFirstExistingDirectoryNoneExist) {
+ auto first_dir = "/data/local/tmp/does/not/exist";
+ auto second_dir = "/data/local/tmp/also/does/not/exist";
+ auto result = FindFirstExistingDirectory(first_dir, second_dir);
+ ASSERT_FALSE(IsOk(result));
+}
+
+TEST(ApexdUtilTest, FindFirstExistingDirectoryFirstFileSecondDir) {
+ TemporaryFile first_file;
+ TemporaryDir second_dir;
+ auto result = FindFirstExistingDirectory(first_file.path, second_dir.path);
+ ASSERT_TRUE(IsOk(result));
+ ASSERT_EQ(*result, second_dir.path);
+}
+
+TEST(ApexdUtilTest, FindFirstExistingDirectoryFirstDirSecondFile) {
+ TemporaryDir first_dir;
+ TemporaryFile second_file;
+ auto result = FindFirstExistingDirectory(first_dir.path, second_file.path);
+ ASSERT_TRUE(IsOk(result));
+ ASSERT_EQ(*result, first_dir.path);
+}
+
+TEST(ApexdUtilTest, FindFirstExistingDirectoryBothFiles) {
+ TemporaryFile first_file;
+ TemporaryFile second_file;
+ auto result = FindFirstExistingDirectory(first_file.path, second_file.path);
+ ASSERT_FALSE(IsOk(result));
+}
+
+TEST(ApexdUtilTest, FindFirstExistingDirectoryFirstFileSecondDoesNotExist) {
+ TemporaryFile first_file;
+ auto second_dir = "/data/local/tmp/does/not/exist";
+ auto result = FindFirstExistingDirectory(first_file.path, second_dir);
+ ASSERT_FALSE(IsOk(result));
+}
+
+TEST(ApexdUtilTest, FindFirstExistingDirectoryFirsDoesNotExistSecondFile) {
+ auto first_dir = "/data/local/tmp/does/not/exist";
+ TemporaryFile second_file;
+ auto result = FindFirstExistingDirectory(first_dir, second_file.path);
+ ASSERT_FALSE(IsOk(result));
+}
+
+TEST(ApexdUtilTest, MoveDir) {
+ namespace fs = std::filesystem;
+
+ TemporaryDir from;
+ TemporaryDir to;
+
+ TemporaryFile from_1(from.path);
+ auto from_subdir = StringPrintf("%s/subdir", from.path);
+ if (mkdir(from_subdir.c_str(), 07000) != 0) {
+ FAIL() << "Failed to mkdir " << from_subdir << " : " << strerror(errno);
+ }
+ TemporaryFile from_2(from_subdir);
+
+ auto result = MoveDir(from.path, to.path);
+ ASSERT_TRUE(IsOk(result));
+ ASSERT_TRUE(fs::is_empty(from.path));
+
+ std::vector<std::string> content;
+ for (const auto& it : fs::recursive_directory_iterator(to.path)) {
+ content.push_back(it.path());
+ }
+
+ static const std::vector<std::string> expected = {
+ StringPrintf("%s/%s", to.path, Basename(from_1.path).c_str()),
+ StringPrintf("%s/subdir", to.path),
+ StringPrintf("%s/subdir/%s", to.path, Basename(from_2.path).c_str()),
+ };
+ ASSERT_THAT(content, UnorderedElementsAreArray(expected));
+}
+
+TEST(ApexdUtilTest, MoveDirFromIsNotDirectory) {
+ TemporaryFile from;
+ TemporaryDir to;
+ ASSERT_FALSE(IsOk(MoveDir(from.path, to.path)));
+}
+
+TEST(ApexdUtilTest, MoveDirToIsNotDirectory) {
+ TemporaryDir from;
+ TemporaryFile to;
+ TemporaryFile from_1(from.path);
+ ASSERT_FALSE(IsOk(MoveDir(from.path, to.path)));
+}
+
+TEST(ApexdUtilTest, MoveDirFromDoesNotExist) {
+ TemporaryDir to;
+ ASSERT_FALSE(IsOk(MoveDir("/data/local/tmp/does/not/exist", to.path)));
+}
+
+TEST(ApexdUtilTest, MoveDirToDoesNotExist) {
+ namespace fs = std::filesystem;
+
+ TemporaryDir from;
+ TemporaryFile from_1(from.path);
+ auto from_subdir = StringPrintf("%s/subdir", from.path);
+ if (mkdir(from_subdir.c_str(), 07000) != 0) {
+ FAIL() << "Failed to mkdir " << from_subdir << " : " << strerror(errno);
+ }
+ TemporaryFile from_2(from_subdir);
+
+ ASSERT_FALSE(IsOk(MoveDir(from.path, "/data/local/tmp/does/not/exist")));
+
+ // Check that |from| directory is not empty.
+ std::vector<std::string> content;
+ for (const auto& it : fs::recursive_directory_iterator(from.path)) {
+ content.push_back(it.path());
+ }
+
+ ASSERT_THAT(content,
+ UnorderedElementsAre(from_1.path, from_subdir, from_2.path));
+}
+
+} // namespace
+} // namespace apex
+} // namespace android