diff options
-rw-r--r-- | src/buildtool/execution_api/common/TARGETS | 1 | ||||
-rw-r--r-- | src/buildtool/execution_api/common/api_bundle.cpp | 4 | ||||
-rw-r--r-- | src/buildtool/execution_api/remote/bazel/bazel_api.cpp | 6 | ||||
-rw-r--r-- | src/buildtool/execution_api/remote/bazel/bazel_api.hpp | 4 | ||||
-rw-r--r-- | src/buildtool/execution_engine/executor/executor.hpp | 3 | ||||
-rw-r--r-- | test/buildtool/execution_api/bazel/TARGETS | 2 | ||||
-rw-r--r-- | test/buildtool/execution_api/bazel/bazel_api.test.cpp | 136 | ||||
-rw-r--r-- | test/buildtool/execution_engine/executor/TARGETS | 2 | ||||
-rw-r--r--[-rwxr-xr-x] | test/buildtool/execution_engine/executor/executor_api_remote_bazel.test.cpp | 37 |
9 files changed, 163 insertions, 32 deletions
diff --git a/src/buildtool/execution_api/common/TARGETS b/src/buildtool/execution_api/common/TARGETS index a7cfd64c..cfe2c35f 100644 --- a/src/buildtool/execution_api/common/TARGETS +++ b/src/buildtool/execution_api/common/TARGETS @@ -55,6 +55,7 @@ [ ["src/buildtool/execution_api/bazel_msg", "bazel_msg"] , ["src/buildtool/execution_api/local", "local"] , ["src/buildtool/execution_api/remote", "bazel"] + , ["src/buildtool/crypto", "hash_function"] ] } , "message_limits": diff --git a/src/buildtool/execution_api/common/api_bundle.cpp b/src/buildtool/execution_api/common/api_bundle.cpp index 38255f9a..2908fb47 100644 --- a/src/buildtool/execution_api/common/api_bundle.cpp +++ b/src/buildtool/execution_api/common/api_bundle.cpp @@ -15,6 +15,7 @@ #include "src/buildtool/execution_api/common/api_bundle.hpp" #include "src/buildtool/common/remote/retry_config.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_common.hpp" #include "src/buildtool/execution_api/local/local_api.hpp" #include "src/buildtool/execution_api/remote/bazel/bazel_api.hpp" @@ -46,7 +47,8 @@ auto ApiBundle::CreateRemote(std::optional<ServerAddress> const& address) const address->port, &auth, &retry_config, - config); + config, + HashFunction::Instance()); } return local; } diff --git a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp index f4751df3..d3dc1b2f 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp @@ -28,7 +28,6 @@ #include "src/buildtool/auth/authentication.hpp" #include "src/buildtool/common/bazel_types.hpp" #include "src/buildtool/compatibility/compatibility.hpp" -#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_common.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp" @@ -194,14 +193,15 @@ BazelApi::BazelApi(std::string const& instance_name, Port port, gsl::not_null<Auth const*> const& auth, gsl::not_null<RetryConfig const*> const& retry_config, - ExecutionConfiguration const& exec_config) noexcept { + ExecutionConfiguration const& exec_config, + HashFunction hash_function) noexcept { network_ = std::make_shared<BazelNetwork>(instance_name, host, port, auth, retry_config, exec_config, - HashFunction::Instance()); + hash_function); } // implement move constructor in cpp, where all members are complete types diff --git a/src/buildtool/execution_api/remote/bazel/bazel_api.hpp b/src/buildtool/execution_api/remote/bazel/bazel_api.hpp index 5307ffd0..5946f0f7 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_api.hpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_api.hpp @@ -29,6 +29,7 @@ #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/remote/port.hpp" #include "src/buildtool/common/remote/retry_config.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_common.hpp" #include "src/buildtool/execution_api/common/blob_tree.hpp" #include "src/buildtool/execution_api/common/execution_api.hpp" @@ -46,7 +47,8 @@ class BazelApi final : public IExecutionApi { Port port, gsl::not_null<Auth const*> const& auth, gsl::not_null<RetryConfig const*> const& retry_config, - ExecutionConfiguration const& exec_config) noexcept; + ExecutionConfiguration const& exec_config, + HashFunction hash_function) noexcept; BazelApi(BazelApi const&) = delete; BazelApi(BazelApi&& other) noexcept; auto operator=(BazelApi const&) -> BazelApi& = delete; diff --git a/src/buildtool/execution_engine/executor/executor.hpp b/src/buildtool/execution_engine/executor/executor.hpp index d4d1f928..70d32ed6 100644 --- a/src/buildtool/execution_engine/executor/executor.hpp +++ b/src/buildtool/execution_engine/executor/executor.hpp @@ -693,7 +693,8 @@ class ExecutorImpl { endpoint.port, auth, retry_config, - config); + config, + HashFunction::Instance()); } } return nullptr; diff --git a/test/buildtool/execution_api/bazel/TARGETS b/test/buildtool/execution_api/bazel/TARGETS index 4bb08931..972717c5 100644 --- a/test/buildtool/execution_api/bazel/TARGETS +++ b/test/buildtool/execution_api/bazel/TARGETS @@ -109,6 +109,8 @@ , ["@", "src", "src/buildtool/common/remote", "retry_config"] , ["@", "src", "src/buildtool/execution_api/remote", "bazel"] , ["buildtool/execution_api/common", "api_test"] + , ["@", "src", "src/buildtool/crypto", "hash_function"] + , ["@", "src", "src/buildtool/compatibility", "compatibility"] ] , "stage": ["test", "buildtool", "execution_api", "bazel"] } diff --git a/test/buildtool/execution_api/bazel/bazel_api.test.cpp b/test/buildtool/execution_api/bazel/bazel_api.test.cpp index c774f034..42d4880e 100644 --- a/test/buildtool/execution_api/bazel/bazel_api.test.cpp +++ b/test/buildtool/execution_api/bazel/bazel_api.test.cpp @@ -17,6 +17,8 @@ #include "catch2/catch_test_macros.hpp" #include "src/buildtool/common/remote/retry_config.hpp" +#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/remote/bazel/bazel_api.hpp" #include "src/buildtool/execution_api/remote/config.hpp" #include "test/buildtool/execution_api/common/api_test.hpp" @@ -25,19 +27,31 @@ namespace { -auto const kApiFactory = []() { - auto remote_config = TestRemoteConfig::ReadFromEnvironment(); - REQUIRE(remote_config); - REQUIRE(remote_config->remote_address); - auto auth_config = TestAuthConfig::ReadFromEnvironment(); - REQUIRE(auth_config); - static RetryConfig retry_config{}; // default retry config - return IExecutionApi::Ptr{new BazelApi{"remote-execution", - remote_config->remote_address->host, - remote_config->remote_address->port, - &*auth_config, - &retry_config, - {}}}; +class FactoryApi final { + public: + explicit FactoryApi( + gsl::not_null<ServerAddress const*> const& server_address, + gsl::not_null<Auth const*> const& auth, + HashFunction hash_function) noexcept + : address_{*server_address}, + auth_{*auth}, + hash_function_{hash_function} {} + + [[nodiscard]] auto operator()() const -> IExecutionApi::Ptr { + static RetryConfig retry_config{}; // default retry config + return IExecutionApi::Ptr{new BazelApi{"remote-execution", + address_.host, + address_.port, + &auth_, + &retry_config, + {}, + hash_function_}}; + } + + private: + ServerAddress const& address_; + Auth const& auth_; + HashFunction const hash_function_; }; } // namespace @@ -45,53 +59,133 @@ auto const kApiFactory = []() { TEST_CASE("BazelAPI: No input, no output", "[execution_api]") { auto remote_config = TestRemoteConfig::ReadFromEnvironment(); REQUIRE(remote_config); - TestNoInputNoOutput(kApiFactory, remote_config->platform_properties); + REQUIRE(remote_config->remote_address); + auto auth = TestAuthConfig::ReadFromEnvironment(); + REQUIRE(auth); + + HashFunction const hash_function{Compatibility::IsCompatible() + ? HashFunction::JustHash::Compatible + : HashFunction::JustHash::Native}; + + FactoryApi api_factory{ + &*remote_config->remote_address, &*auth, hash_function}; + TestNoInputNoOutput(api_factory, remote_config->platform_properties); } TEST_CASE("BazelAPI: No input, create output", "[execution_api]") { auto remote_config = TestRemoteConfig::ReadFromEnvironment(); REQUIRE(remote_config); - TestNoInputCreateOutput(kApiFactory, remote_config->platform_properties); + REQUIRE(remote_config->remote_address); + auto auth = TestAuthConfig::ReadFromEnvironment(); + REQUIRE(auth); + + HashFunction const hash_function{Compatibility::IsCompatible() + ? HashFunction::JustHash::Compatible + : HashFunction::JustHash::Native}; + + FactoryApi api_factory{ + &*remote_config->remote_address, &*auth, hash_function}; + TestNoInputCreateOutput(api_factory, remote_config->platform_properties); } TEST_CASE("BazelAPI: One input copied to output", "[execution_api]") { auto remote_config = TestRemoteConfig::ReadFromEnvironment(); REQUIRE(remote_config); - TestOneInputCopiedToOutput(kApiFactory, remote_config->platform_properties); + REQUIRE(remote_config->remote_address); + auto auth = TestAuthConfig::ReadFromEnvironment(); + REQUIRE(auth); + + HashFunction const hash_function{Compatibility::IsCompatible() + ? HashFunction::JustHash::Compatible + : HashFunction::JustHash::Native}; + + FactoryApi api_factory{ + &*remote_config->remote_address, &*auth, hash_function}; + TestOneInputCopiedToOutput(api_factory, remote_config->platform_properties); } TEST_CASE("BazelAPI: Non-zero exit code, create output", "[execution_api]") { auto remote_config = TestRemoteConfig::ReadFromEnvironment(); REQUIRE(remote_config); - TestNonZeroExitCodeCreateOutput(kApiFactory, + REQUIRE(remote_config->remote_address); + auto auth = TestAuthConfig::ReadFromEnvironment(); + REQUIRE(auth); + + HashFunction const hash_function{Compatibility::IsCompatible() + ? HashFunction::JustHash::Compatible + : HashFunction::JustHash::Native}; + + FactoryApi api_factory{ + &*remote_config->remote_address, &*auth, hash_function}; + TestNonZeroExitCodeCreateOutput(api_factory, remote_config->platform_properties); } TEST_CASE("BazelAPI: Retrieve two identical trees to path", "[execution_api]") { auto remote_config = TestRemoteConfig::ReadFromEnvironment(); REQUIRE(remote_config); + REQUIRE(remote_config->remote_address); + auto auth = TestAuthConfig::ReadFromEnvironment(); + REQUIRE(auth); + + HashFunction const hash_function{Compatibility::IsCompatible() + ? HashFunction::JustHash::Compatible + : HashFunction::JustHash::Native}; + + FactoryApi api_factory{ + &*remote_config->remote_address, &*auth, hash_function}; TestRetrieveTwoIdenticalTreesToPath( - kApiFactory, remote_config->platform_properties, "two_trees"); + api_factory, remote_config->platform_properties, "two_trees"); } TEST_CASE("BazelAPI: Retrieve file and symlink with same content to path", "[execution_api]") { auto remote_config = TestRemoteConfig::ReadFromEnvironment(); REQUIRE(remote_config); + REQUIRE(remote_config->remote_address); + auto auth = TestAuthConfig::ReadFromEnvironment(); + REQUIRE(auth); + + HashFunction const hash_function{Compatibility::IsCompatible() + ? HashFunction::JustHash::Compatible + : HashFunction::JustHash::Native}; + + FactoryApi api_factory{ + &*remote_config->remote_address, &*auth, hash_function}; TestRetrieveFileAndSymlinkWithSameContentToPath( - kApiFactory, remote_config->platform_properties, "file_and_symlink"); + api_factory, remote_config->platform_properties, "file_and_symlink"); } TEST_CASE("BazelAPI: Retrieve mixed blobs and trees", "[execution_api]") { auto remote_config = TestRemoteConfig::ReadFromEnvironment(); REQUIRE(remote_config); + REQUIRE(remote_config->remote_address); + auto auth = TestAuthConfig::ReadFromEnvironment(); + REQUIRE(auth); + + HashFunction const hash_function{Compatibility::IsCompatible() + ? HashFunction::JustHash::Compatible + : HashFunction::JustHash::Native}; + + FactoryApi api_factory{ + &*remote_config->remote_address, &*auth, hash_function}; TestRetrieveMixedBlobsAndTrees( - kApiFactory, remote_config->platform_properties, "blobs_and_trees"); + api_factory, remote_config->platform_properties, "blobs_and_trees"); } TEST_CASE("BazelAPI: Create directory prior to execution", "[execution_api]") { auto remote_config = TestRemoteConfig::ReadFromEnvironment(); REQUIRE(remote_config); - TestCreateDirPriorToExecution(kApiFactory, + REQUIRE(remote_config->remote_address); + auto auth = TestAuthConfig::ReadFromEnvironment(); + REQUIRE(auth); + + HashFunction const hash_function{Compatibility::IsCompatible() + ? HashFunction::JustHash::Compatible + : HashFunction::JustHash::Native}; + + FactoryApi api_factory{ + &*remote_config->remote_address, &*auth, hash_function}; + TestCreateDirPriorToExecution(api_factory, remote_config->platform_properties); } diff --git a/test/buildtool/execution_engine/executor/TARGETS b/test/buildtool/execution_engine/executor/TARGETS index 59acfa43..cb33854a 100644 --- a/test/buildtool/execution_engine/executor/TARGETS +++ b/test/buildtool/execution_engine/executor/TARGETS @@ -76,6 +76,8 @@ , ["@", "src", "src/buildtool/execution_api/remote", "config"] , ["@", "src", "src/buildtool/execution_engine/executor", "executor"] , ["@", "src", "src/buildtool/progress_reporting", "progress"] + , ["@", "src", "src/buildtool/crypto", "hash_function"] + , ["@", "src", "src/buildtool/compatibility", "compatibility"] , ["utils", "catch-main-remote-execution"] , ["utils", "test_auth_config"] , ["utils", "test_remote_config"] diff --git a/test/buildtool/execution_engine/executor/executor_api_remote_bazel.test.cpp b/test/buildtool/execution_engine/executor/executor_api_remote_bazel.test.cpp index dd6cc23e..f97de299 100755..100644 --- a/test/buildtool/execution_engine/executor/executor_api_remote_bazel.test.cpp +++ b/test/buildtool/execution_engine/executor/executor_api_remote_bazel.test.cpp @@ -18,6 +18,8 @@ #include "src/buildtool/common/remote/retry_config.hpp" #include "src/buildtool/common/repository_config.hpp" #include "src/buildtool/common/statistics.hpp" +#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/remote/bazel/bazel_api.hpp" #include "src/buildtool/execution_api/remote/config.hpp" #include "src/buildtool/execution_engine/executor/executor.hpp" @@ -39,13 +41,18 @@ TEST_CASE("Executor<BazelApi>: Upload blob", "[executor]") { RetryConfig retry_config{}; // default retry config + HashFunction const hash_function{Compatibility::IsCompatible() + ? HashFunction::JustHash::Compatible + : HashFunction::JustHash::Native}; + TestBlobUpload(&repo_config, [&] { return BazelApi::Ptr{new BazelApi{"remote-execution", remote_config->remote_address->host, remote_config->remote_address->port, &*auth_config, &retry_config, - config}}; + config, + hash_function}}; }); } @@ -65,6 +72,10 @@ TEST_CASE("Executor<BazelApi>: Compile hello world", "[executor]") { RetryConfig retry_config{}; // default retry config + HashFunction const hash_function{Compatibility::IsCompatible() + ? HashFunction::JustHash::Compatible + : HashFunction::JustHash::Native}; + TestHelloWorldCompilation( &repo_config, &stats, @@ -76,7 +87,8 @@ TEST_CASE("Executor<BazelApi>: Compile hello world", "[executor]") { remote_config->remote_address->port, &*auth_config, &retry_config, - config}}; + config, + hash_function}}; }, &*auth_config, false /* not hermetic */); @@ -98,6 +110,10 @@ TEST_CASE("Executor<BazelApi>: Compile greeter", "[executor]") { RetryConfig retry_config{}; // default retry config + HashFunction const hash_function{Compatibility::IsCompatible() + ? HashFunction::JustHash::Compatible + : HashFunction::JustHash::Native}; + TestGreeterCompilation( &repo_config, &stats, @@ -109,7 +125,8 @@ TEST_CASE("Executor<BazelApi>: Compile greeter", "[executor]") { remote_config->remote_address->port, &*auth_config, &retry_config, - config}}; + config, + hash_function}}; }, &*auth_config, false /* not hermetic */); @@ -131,6 +148,10 @@ TEST_CASE("Executor<BazelApi>: Upload and download trees", "[executor]") { RetryConfig retry_config{}; // default retry config + HashFunction const hash_function{Compatibility::IsCompatible() + ? HashFunction::JustHash::Compatible + : HashFunction::JustHash::Native}; + TestUploadAndDownloadTrees( &repo_config, &stats, @@ -142,7 +163,8 @@ TEST_CASE("Executor<BazelApi>: Upload and download trees", "[executor]") { remote_config->remote_address->port, &*auth_config, &retry_config, - config}}; + config, + hash_function}}; }, &*auth_config, false /* not hermetic */); @@ -164,6 +186,10 @@ TEST_CASE("Executor<BazelApi>: Retrieve output directories", "[executor]") { RetryConfig retry_config{}; // default retry config + HashFunction const hash_function{Compatibility::IsCompatible() + ? HashFunction::JustHash::Compatible + : HashFunction::JustHash::Native}; + TestRetrieveOutputDirectories( &repo_config, &stats, @@ -175,7 +201,8 @@ TEST_CASE("Executor<BazelApi>: Retrieve output directories", "[executor]") { remote_config->remote_address->port, &*auth_config, &retry_config, - config}}; + config, + hash_function}}; }, &*auth_config, false /* not hermetic */); |