summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buildtool/execution_api/common/TARGETS1
-rw-r--r--src/buildtool/execution_api/common/api_bundle.cpp4
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_api.cpp6
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_api.hpp4
-rw-r--r--src/buildtool/execution_engine/executor/executor.hpp3
-rw-r--r--test/buildtool/execution_api/bazel/TARGETS2
-rw-r--r--test/buildtool/execution_api/bazel/bazel_api.test.cpp136
-rw-r--r--test/buildtool/execution_engine/executor/TARGETS2
-rw-r--r--[-rwxr-xr-x]test/buildtool/execution_engine/executor/executor_api_remote_bazel.test.cpp37
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 */);