summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2023-03-27 18:28:14 +0200
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2023-03-30 13:45:00 +0200
commit1d8321976c7634f80b7f878b4219899fe0748d70 (patch)
treeb1f740fcd88f22f51baf7e3dce799e54d4a600c0
parentb1eeb28905d38231f5eda70148de0ebf8eb1cd8a (diff)
downloadjustbuild-1d8321976c7634f80b7f878b4219899fe0748d70.tar.gz
test: Make GitCAS thread-safety tests more strict
Move the creation of a fake repository on top of an existing odb into the individual threads, to ensure the thread-safety of the operations on fake repositories is properly tested.
-rw-r--r--test/buildtool/file_system/git_repo.test.cpp21
-rw-r--r--test/buildtool/file_system/git_tree.test.cpp7
2 files changed, 20 insertions, 8 deletions
diff --git a/test/buildtool/file_system/git_repo.test.cpp b/test/buildtool/file_system/git_repo.test.cpp
index 55e51148..34be03ff 100644
--- a/test/buildtool/file_system/git_repo.test.cpp
+++ b/test/buildtool/file_system/git_repo.test.cpp
@@ -372,10 +372,6 @@ TEST_CASE("Multi-threaded fake repository operations", "[git_repo]") {
REQUIRE(remote_repo_path);
auto remote_cas = GitCAS::Open(*remote_repo_path);
REQUIRE(remote_cas);
- auto remote_repo = GitRepo::Open(remote_cas);
- REQUIRE(remote_repo);
- REQUIRE(remote_repo->GetGitCAS() == remote_cas);
- REQUIRE(remote_repo->IsRepoFake());
// setup dummy logger
auto logger = std::make_shared<GitRepo::anon_logger_t>(
@@ -395,12 +391,15 @@ TEST_CASE("Multi-threaded fake repository operations", "[git_repo]") {
constexpr int NUM_CASES = 5;
for (int id{}; id < kNumThreads; ++id) {
threads.emplace_back(
- [&remote_repo, &remote_repo_path, &logger, &starting_signal](
+ [&remote_cas, &remote_repo_path, &logger, &starting_signal](
int tid) {
starting_signal.wait(false);
// cases based on thread number
switch (tid % NUM_CASES) {
case 0: {
+ auto remote_repo = GitRepo::Open(remote_cas);
+ REQUIRE(remote_repo);
+ REQUIRE(remote_repo->IsRepoFake());
// Get subtree entry id from commit
auto entry_bazbar_c =
remote_repo->GetSubtreeFromCommit(
@@ -409,6 +408,9 @@ TEST_CASE("Multi-threaded fake repository operations", "[git_repo]") {
CHECK(*entry_bazbar_c == kBarId);
} break;
case 1: {
+ auto remote_repo = GitRepo::Open(remote_cas);
+ REQUIRE(remote_repo);
+ REQUIRE(remote_repo->IsRepoFake());
// Get subtree entry id from root tree id
auto entry_bazbar_t =
remote_repo->GetSubtreeFromTree(
@@ -417,6 +419,9 @@ TEST_CASE("Multi-threaded fake repository operations", "[git_repo]") {
CHECK(*entry_bazbar_t == kBarId);
} break;
case 2: {
+ auto remote_repo = GitRepo::Open(remote_cas);
+ REQUIRE(remote_repo);
+ REQUIRE(remote_repo->IsRepoFake());
// Find repository root from path
auto root_path_from_bazbar =
GitRepo::GetRepoRootFromPath(
@@ -425,6 +430,9 @@ TEST_CASE("Multi-threaded fake repository operations", "[git_repo]") {
CHECK(*root_path_from_bazbar == *remote_repo_path);
} break;
case 3: {
+ auto remote_repo = GitRepo::Open(remote_cas);
+ REQUIRE(remote_repo);
+ REQUIRE(remote_repo->IsRepoFake());
// Get subtree entry id from path
auto path_bazbar = *remote_repo_path / "baz/bar";
auto entry_bazbar_p =
@@ -434,6 +442,9 @@ TEST_CASE("Multi-threaded fake repository operations", "[git_repo]") {
CHECK(*entry_bazbar_p == kBarId);
} break;
case 4: {
+ auto remote_repo = GitRepo::Open(remote_cas);
+ REQUIRE(remote_repo);
+ REQUIRE(remote_repo->IsRepoFake());
auto result_containing =
remote_repo->CheckCommitExists(kRootCommit,
logger);
diff --git a/test/buildtool/file_system/git_tree.test.cpp b/test/buildtool/file_system/git_tree.test.cpp
index 7c5b53e3..1526e9c9 100644
--- a/test/buildtool/file_system/git_tree.test.cpp
+++ b/test/buildtool/file_system/git_tree.test.cpp
@@ -555,13 +555,14 @@ TEST_CASE("Thread-safety", "[git_tree]") {
SECTION("Parsing same tree with same CAS") {
auto cas = GitCAS::Open(*repo_path);
REQUIRE(cas);
- auto repo = GitRepo::Open(cas);
- REQUIRE(repo);
for (int id{}; id < kNumThreads; ++id) {
- threads.emplace_back([&repo, &starting_signal]() {
+ threads.emplace_back([&cas, &starting_signal]() {
starting_signal.wait(false);
+ auto repo = GitRepo::Open(cas);
+ REQUIRE(repo);
+
auto entries = repo->ReadTree(kTreeId, true);
REQUIRE(entries);
});