diff options
Diffstat (limited to 'tests/component/sideload_test.cpp')
-rw-r--r-- | tests/component/sideload_test.cpp | 108 |
1 files changed, 0 insertions, 108 deletions
diff --git a/tests/component/sideload_test.cpp b/tests/component/sideload_test.cpp deleted file mode 100644 index 6add99f41..000000000 --- a/tests/component/sideload_test.cpp +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2017 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 <unistd.h> - -#include <memory> -#include <string> -#include <vector> - -#include <android-base/file.h> -#include <android-base/strings.h> -#include <gtest/gtest.h> - -#include "fuse_provider.h" -#include "fuse_sideload.h" - -TEST(SideloadTest, fuse_device) { - ASSERT_EQ(0, access("/dev/fuse", R_OK | W_OK)); -} - -class FuseTestDataProvider : public FuseDataProvider { - public: - FuseTestDataProvider(uint64_t file_size, uint32_t block_size) - : FuseDataProvider(file_size, block_size) {} - - private: - bool ReadBlockAlignedData(uint8_t*, uint32_t, uint32_t) const override { - return true; - } -}; - -TEST(SideloadTest, run_fuse_sideload_wrong_parameters) { - auto provider_small_block = std::make_unique<FuseTestDataProvider>(4096, 4095); - ASSERT_EQ(-1, run_fuse_sideload(std::move(provider_small_block))); - - auto provider_large_block = std::make_unique<FuseTestDataProvider>(4096, (1 << 22) + 1); - ASSERT_EQ(-1, run_fuse_sideload(std::move(provider_large_block))); - - auto provider_too_many_blocks = - std::make_unique<FuseTestDataProvider>(((1 << 18) + 1) * 4096, 4096); - ASSERT_EQ(-1, run_fuse_sideload(std::move(provider_too_many_blocks))); -} - -TEST(SideloadTest, run_fuse_sideload) { - const std::vector<std::string> blocks = { - std::string(2048, 'a') + std::string(2048, 'b'), - std::string(2048, 'c') + std::string(2048, 'd'), - std::string(2048, 'e') + std::string(2048, 'f'), - std::string(2048, 'g') + std::string(2048, 'h'), - }; - const std::string content = android::base::Join(blocks, ""); - ASSERT_EQ(16384U, content.size()); - - TemporaryFile temp_file; - ASSERT_TRUE(android::base::WriteStringToFile(content, temp_file.path)); - - auto provider = std::make_unique<FuseFileDataProvider>(temp_file.path, 4096); - ASSERT_TRUE(provider->Valid()); - TemporaryDir mount_point; - pid_t pid = fork(); - if (pid == 0) { - ASSERT_EQ(0, run_fuse_sideload(std::move(provider), mount_point.path)); - _exit(EXIT_SUCCESS); - } - - std::string package = std::string(mount_point.path) + "/" + FUSE_SIDELOAD_HOST_FILENAME; - int status; - static constexpr int kSideloadInstallTimeout = 10; - for (int i = 0; i < kSideloadInstallTimeout; ++i) { - ASSERT_NE(-1, waitpid(pid, &status, WNOHANG)); - - struct stat sb; - if (stat(package.c_str(), &sb) == 0) { - break; - } - - if (errno == ENOENT && i < kSideloadInstallTimeout - 1) { - sleep(1); - continue; - } - FAIL() << "Timed out waiting for the fuse-provided package."; - } - - std::string content_via_fuse; - ASSERT_TRUE(android::base::ReadFileToString(package, &content_via_fuse)); - ASSERT_EQ(content, content_via_fuse); - - std::string exit_flag = std::string(mount_point.path) + "/" + FUSE_SIDELOAD_HOST_EXIT_FLAG; - struct stat sb; - ASSERT_EQ(0, stat(exit_flag.c_str(), &sb)); - - waitpid(pid, &status, 0); - ASSERT_EQ(0, WEXITSTATUS(status)); - ASSERT_EQ(EXIT_SUCCESS, WEXITSTATUS(status)); -} |