Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8971b491 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes from topic "run_dex2oat_test"

* changes:
  installd: Unit test for RunDex2oat
  installd: move background compilation check out of RunDex2oat
  installd: replace get_location_from_path with Basename
  installd: move check of jitzygote out of RunDex2oat
parents 1ae1ad7c c9821f11
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -16,7 +16,9 @@ cc_defaults {
        "InstalldNativeService.cpp",
        "QuotaUtils.cpp",
        "dexopt.cpp",
        "execv_helper.cpp",
        "globals.cpp",
        "run_dex2oat.cpp",
        "utils.cpp",
        "utils_default.cpp",
        "view_compiler.cpp",
@@ -101,6 +103,30 @@ cc_library_headers {
    export_include_dirs: ["."],
}

//
// Unit tests
//

cc_test_host {
    name: "run_dex2oat_test",
    test_suites: ["general-tests"],
    clang: true,
    srcs: [
        "run_dex2oat_test.cpp",
        "run_dex2oat.cpp",
        "execv_helper.cpp",
    ],
    cflags: ["-Wall", "-Werror"],
    shared_libs: [
        "libbase",
        "server_configurable_flags",
    ],
    static_libs: [
        //"libinstalld",
    ],
    test_config: "run_dex2oat_test.xml",
}

//
// Executable
//
@@ -203,9 +229,11 @@ cc_binary {

    srcs: [
        "dexopt.cpp",
        "execv_helper.cpp",
        "globals.cpp",
        "otapreopt.cpp",
        "otapreopt_utils.cpp",
        "run_dex2oat.cpp",
        "utils.cpp",
        "utils_default.cpp",
        "view_compiler.cpp",
+3 −0
Original line number Diff line number Diff line
@@ -15,6 +15,9 @@
    {
      "name": "installd_utils_test"
    },
    {
      "name": "run_dex2oat_test"
    },
    // AdoptableHostTest moves packages, part of which is handled by installd
    {
      "name": "AdoptableHostTest"
+27 −386

File changed.

Preview size limit exceeded, changes collapsed.

+67 −0
Original line number Diff line number Diff line
/*
 * 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.
 */
#define LOG_TAG "installd"

#include "execv_helper.h"

#include <stdlib.h>
#include <unistd.h>

#include <string>

#include <android-base/logging.h>
#include <android-base/properties.h>

namespace android {
namespace installd {

// Store a placeholder for the binary name.
ExecVHelper::ExecVHelper() : args_(1u, std::string()) {}

ExecVHelper::~ExecVHelper() {}

void ExecVHelper::PrepareArgs(const std::string& bin) {
    CHECK(!args_.empty());
    CHECK(args_[0].empty());
    args_[0] = bin;
    // Write char* into array.
    for (const std::string& arg : args_) {
        argv_.push_back(arg.c_str());
    }
    argv_.push_back(nullptr);  // Add null terminator.
}

void ExecVHelper::Exec(int exit_code) {
    execv(argv_[0], (char * const *)&argv_[0]);
    PLOG(ERROR) << "execv(" << argv_[0] << ") failed";
    exit(exit_code);
}

void ExecVHelper::AddArg(const std::string& arg) {
    if (!arg.empty()) {
        args_.push_back(arg);
    }
}

void ExecVHelper::AddRuntimeArg(const std::string& arg) {
    if (!arg.empty()) {
        args_.push_back("--runtime-arg");
        args_.push_back(arg);
    }
}

}  // namespace installd
}  // namespace android
+55 −0
Original line number Diff line number Diff line
/*
 * 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.
 */

#ifndef ANDROID_INSTALLD_EXECV_HELPER_H
#define ANDROID_INSTALLD_EXECV_HELPER_H

#include <string>
#include <vector>

namespace android {
namespace installd {

// ExecVHelper prepares and holds pointers to parsed command line arguments so that no allocations
// need to be performed between the fork and exec.
class ExecVHelper {
  public:
    ExecVHelper();
    virtual ~ExecVHelper();

    [[ noreturn ]]
    virtual void Exec(int exit_code);

    void PrepareArgs(const std::string& bin);

    // Add an arg if it's not empty.
    void AddArg(const std::string& arg);

    // Add a runtime arg if it's not empty.
    void AddRuntimeArg(const std::string& arg);

  protected:
    // Holder arrays for backing arg storage.
    std::vector<std::string> args_;

    // Argument poiners.
    std::vector<const char*> argv_;
};

}  // namespace installd
}  // namespace android

#endif  // ANDROID_INSTALLD_EXECV_HELPER_H
Loading