summaryrefslogtreecommitdiff
path: root/test/buildtool/execution_api/local/local_api.test.cpp
diff options
context:
space:
mode:
authorOliver Reiche <oliver.reiche@huawei.com>2022-03-14 11:29:28 +0100
committerOliver Reiche <oliver.reiche@huawei.com>2022-03-14 11:29:28 +0100
commit10217a10a39f8a11aa97a47cc735943442a5aeeb (patch)
treeacc1f89526112b8f253b8dd7b39ad221d8bc5d9f /test/buildtool/execution_api/local/local_api.test.cpp
parentd6105778839cbdae5bfd234d54929b972328a6ee (diff)
downloadjustbuild-10217a10a39f8a11aa97a47cc735943442a5aeeb.tar.gz
ExecutionAPI: Add common tests for local and remote api
Diffstat (limited to 'test/buildtool/execution_api/local/local_api.test.cpp')
-rw-r--r--test/buildtool/execution_api/local/local_api.test.cpp286
1 files changed, 12 insertions, 274 deletions
diff --git a/test/buildtool/execution_api/local/local_api.test.cpp b/test/buildtool/execution_api/local/local_api.test.cpp
index 39eaa6f0..e347c445 100644
--- a/test/buildtool/execution_api/local/local_api.test.cpp
+++ b/test/buildtool/execution_api/local/local_api.test.cpp
@@ -1,299 +1,37 @@
+#include <cstdlib>
#include <string>
#include "catch2/catch.hpp"
-#include "src/buildtool/common/artifact_factory.hpp"
-#include "src/buildtool/execution_api/common/execution_action.hpp"
-#include "src/buildtool/execution_api/common/execution_api.hpp"
-#include "src/buildtool/execution_api/common/execution_response.hpp"
#include "src/buildtool/execution_api/local/local_api.hpp"
+#include "test/buildtool/execution_api/common/api_test.hpp"
#include "test/utils/hermeticity/local.hpp"
-TEST_CASE_METHOD(HermeticLocalTestFixture,
- "LocalAPI: No input, no output",
- "[execution_api]") {
- std::string test_content("test");
-
- auto api = LocalApi();
-
- auto action = api.CreateAction(
- *api.UploadTree({}), {"echo", "-n", test_content}, {}, {}, {}, {});
-
- SECTION("Cache execution result in action cache") {
- action->SetCacheFlag(IExecutionAction::CacheFlag::CacheOutput);
-
- // run execution
- auto response = action->Execute();
- REQUIRE(response);
+namespace {
- // verify result
- CHECK(response->HasStdOut());
- CHECK(response->StdOut() == test_content);
- CHECK(not response->IsCached());
+auto api_factory = []() { return IExecutionApi::Ptr{new LocalApi()}; };
- SECTION("Rerun execution to verify caching") {
- // run execution
- auto response = action->Execute();
- REQUIRE(response);
+} // namespace
- // verify result
- CHECK(response->HasStdOut());
- CHECK(response->StdOut() == test_content);
- CHECK(response->IsCached());
- }
- }
-
- SECTION("Do not cache execution result in action cache") {
- action->SetCacheFlag(IExecutionAction::CacheFlag::DoNotCacheOutput);
-
- // run execution
- auto response = action->Execute();
- REQUIRE(response);
-
- // verify result
- CHECK(response->HasStdOut());
- CHECK(response->StdOut() == test_content);
- CHECK(not response->IsCached());
-
- SECTION("Rerun execution to verify caching") {
- // run execution
- auto response = action->Execute();
- REQUIRE(response);
-
- // verify result
- CHECK(response->HasStdOut());
- CHECK(response->StdOut() == test_content);
- CHECK(not response->IsCached());
- }
- }
+TEST_CASE_METHOD(HermeticLocalTestFixture,
+ "LocalAPI: No input, no output",
+ "[execution_api]") {
+ TestNoInputNoOutput(api_factory, {}, /*is_hermetic=*/true);
}
TEST_CASE_METHOD(HermeticLocalTestFixture,
"LocalAPI: No input, create output",
"[execution_api]") {
- std::string test_content("test");
- auto test_digest = ArtifactDigest::Create(test_content);
-
- std::string output_path{"output_file"};
-
- auto api = LocalApi();
-
- auto action = api.CreateAction(
- *api.UploadTree({}),
- {"/bin/sh",
- "-c",
- "set -e\necho -n " + test_content + " > " + output_path},
- {output_path},
- {},
- {},
- {});
-
- SECTION("Cache execution result in action cache") {
- action->SetCacheFlag(IExecutionAction::CacheFlag::CacheOutput);
-
- // run execution
- auto response = action->Execute();
- REQUIRE(response);
-
- // verify result
- auto artifacts = response->Artifacts();
- REQUIRE(artifacts.contains(output_path));
- CHECK(artifacts.at(output_path).digest == test_digest);
- CHECK(not response->IsCached());
-
- SECTION("Rerun execution to verify caching") {
- // run execution
- auto response = action->Execute();
- REQUIRE(response);
-
- // verify result
- auto artifacts = response->Artifacts();
- REQUIRE(artifacts.contains(output_path));
- CHECK(artifacts.at(output_path).digest == test_digest);
- CHECK(response->IsCached());
- }
- }
-
- SECTION("Do not cache execution result in action cache") {
- action->SetCacheFlag(IExecutionAction::CacheFlag::DoNotCacheOutput);
-
- // run execution
- auto response = action->Execute();
- REQUIRE(response);
-
- // verify result
- auto artifacts = response->Artifacts();
- REQUIRE(artifacts.contains(output_path));
- CHECK(artifacts.at(output_path).digest == test_digest);
- CHECK(not response->IsCached());
-
- SECTION("Rerun execution to verify caching") {
- // run execution
- auto response = action->Execute();
- REQUIRE(response);
-
- // verify result
- auto artifacts = response->Artifacts();
- REQUIRE(artifacts.contains(output_path));
- CHECK(artifacts.at(output_path).digest == test_digest);
- CHECK(not response->IsCached());
- }
- }
+ TestNoInputCreateOutput(api_factory, {}, /*is_hermetic=*/true);
}
TEST_CASE_METHOD(HermeticLocalTestFixture,
"LocalAPI: One input copied to output",
"[execution_api]") {
- std::string test_content("test");
- auto test_digest = ArtifactDigest::Create(test_content);
-
- auto input_artifact_opt =
- ArtifactFactory::FromDescription(ArtifactFactory::DescribeKnownArtifact(
- test_digest.hash(), test_digest.size(), ObjectType::File));
- CHECK(input_artifact_opt.has_value());
- auto input_artifact =
- DependencyGraph::ArtifactNode{std::move(*input_artifact_opt)};
-
- std::string input_path{"dir/subdir/input"};
- std::string output_path{"output_file"};
-
- auto api = LocalApi();
- CHECK(api.Upload(BlobContainer{{BazelBlob{test_digest, test_content}}},
- false));
-
- auto action =
- api.CreateAction(*api.UploadTree({{input_path, &input_artifact}}),
- {"cp", input_path, output_path},
- {output_path},
- {},
- {},
- {});
-
- SECTION("Cache execution result in action cache") {
- action->SetCacheFlag(IExecutionAction::CacheFlag::CacheOutput);
-
- // run execution
- auto response = action->Execute();
- REQUIRE(response);
-
- // verify result
- auto artifacts = response->Artifacts();
- REQUIRE(artifacts.contains(output_path));
- CHECK(artifacts.at(output_path).digest == test_digest);
- CHECK(not response->IsCached());
-
- SECTION("Rerun execution to verify caching") {
- // run execution
- auto response = action->Execute();
- REQUIRE(response);
-
- // verify result
- auto artifacts = response->Artifacts();
- REQUIRE(artifacts.contains(output_path));
- CHECK(artifacts.at(output_path).digest == test_digest);
- CHECK(response->IsCached());
- }
- }
-
- SECTION("Do not cache execution result in action cache") {
- action->SetCacheFlag(IExecutionAction::CacheFlag::DoNotCacheOutput);
-
- // run execution
- auto response = action->Execute();
- REQUIRE(response);
-
- // verify result
- auto artifacts = response->Artifacts();
- REQUIRE(artifacts.contains(output_path));
- CHECK(artifacts.at(output_path).digest == test_digest);
- CHECK(not response->IsCached());
-
- SECTION("Rerun execution to verify caching") {
- // run execution
- auto response = action->Execute();
- REQUIRE(response);
-
- // verify result
- auto artifacts = response->Artifacts();
- REQUIRE(artifacts.contains(output_path));
- CHECK(artifacts.at(output_path).digest == test_digest);
- CHECK(not response->IsCached());
- }
- }
+ TestOneInputCopiedToOutput(api_factory, {}, /*is_hermetic=*/true);
}
TEST_CASE_METHOD(HermeticLocalTestFixture,
"LocalAPI: Non-zero exit code, create output",
"[execution_api]") {
- std::string test_content("test");
- auto test_digest = ArtifactDigest::Create(test_content);
-
- std::string output_path{"output_file"};
-
- auto api = LocalApi();
-
- auto action = api.CreateAction(*api.UploadTree({}),
- {"/bin/sh",
- "-c",
- "set -e\necho -n " + test_content + " > " +
- output_path + "\nexit 1\n"},
- {output_path},
- {},
- {},
- {});
-
- SECTION("Cache execution result in action cache") {
- action->SetCacheFlag(IExecutionAction::CacheFlag::CacheOutput);
-
- // run execution
- auto response = action->Execute();
- REQUIRE(response);
-
- // verify result
- CHECK(response->ExitCode() == 1);
- auto artifacts = response->Artifacts();
- REQUIRE(artifacts.contains(output_path));
- CHECK(artifacts.at(output_path).digest == test_digest);
- CHECK(not response->IsCached());
-
- SECTION("Rerun execution to verify that non-zero actions are rerun") {
- // run execution
- auto response = action->Execute();
- REQUIRE(response);
-
- // verify result
- CHECK(response->ExitCode() == 1);
- auto artifacts = response->Artifacts();
- REQUIRE(artifacts.contains(output_path));
- CHECK(artifacts.at(output_path).digest == test_digest);
- CHECK(not response->IsCached());
- }
- }
-
- SECTION("Do not cache execution result in action cache") {
- action->SetCacheFlag(IExecutionAction::CacheFlag::DoNotCacheOutput);
-
- // run execution
- auto response = action->Execute();
- REQUIRE(response);
-
- // verify result
- CHECK(response->ExitCode() == 1);
- auto artifacts = response->Artifacts();
- REQUIRE(artifacts.contains(output_path));
- CHECK(artifacts.at(output_path).digest == test_digest);
- CHECK(not response->IsCached());
-
- SECTION("Rerun execution to verify non-zero actions are not cached") {
- // run execution
- auto response = action->Execute();
- REQUIRE(response);
-
- // verify result
- CHECK(response->ExitCode() == 1);
- auto artifacts = response->Artifacts();
- REQUIRE(artifacts.contains(output_path));
- CHECK(artifacts.at(output_path).digest == test_digest);
- CHECK(not response->IsCached());
- }
- }
+ TestNonZeroExitCodeCreateOutput(api_factory, {});
}