Keystore2: fix test_large_number_of_concurrent_db_manipulations
The test was disabled and got stale. Fix the test so it uses the GC,
as it's useful for checking perf-related code changes. Will investigate
fully re-enabling the test on T.
Bug: 190142197
Test: keystore2_test
Change-Id: Ifc0a4a5b3c8c301c42d068ee46754d877eeb10bc
Merged-In: Ifc0a4a5b3c8c301c42d068ee46754d877eeb10bc
diff --git a/keystore2/src/database.rs b/keystore2/src/database.rs
index d9cee50..36c722a 100644
--- a/keystore2/src/database.rs
+++ b/keystore2/src/database.rs
@@ -4743,8 +4743,9 @@
let test_begin = Instant::now();
- let mut db = KeystoreDB::new(temp_dir.path()).expect("Failed to open database.");
const KEY_COUNT: u32 = 500u32;
+ let mut db =
+ new_test_db_with_gc(temp_dir.path(), |_, _| Ok(())).expect("Failed to open database.");
const OPEN_DB_COUNT: u32 = 50u32;
let mut actual_key_count = KEY_COUNT;
@@ -4762,7 +4763,8 @@
// Insert more keys from a different thread and into a different namespace.
let temp_dir1 = temp_dir.clone();
let handle1 = thread::spawn(move || {
- let mut db = KeystoreDB::new(temp_dir1.path()).expect("Failed to open database.");
+ let mut db = new_test_db_with_gc(temp_dir1.path(), |_, _| Ok(()))
+ .expect("Failed to open database.");
for count in 0..actual_key_count {
if Instant::now().duration_since(test_begin) >= Duration::from_secs(40) {
@@ -4791,7 +4793,8 @@
// And start unbinding the first set of keys.
let temp_dir2 = temp_dir.clone();
let handle2 = thread::spawn(move || {
- let mut db = KeystoreDB::new(temp_dir2.path()).expect("Failed to open database.");
+ let mut db = new_test_db_with_gc(temp_dir2.path(), |_, _| Ok(()))
+ .expect("Failed to open database.");
for count in 0..actual_key_count {
if Instant::now().duration_since(test_begin) >= Duration::from_secs(40) {
@@ -4807,27 +4810,6 @@
}
});
- let stop_deleting = Arc::new(AtomicU8::new(0));
- let stop_deleting2 = stop_deleting.clone();
-
- // And delete anything that is unreferenced keys.
- let temp_dir3 = temp_dir.clone();
- let handle3 = thread::spawn(move || {
- let mut db = KeystoreDB::new(temp_dir3.path()).expect("Failed to open database.");
-
- while stop_deleting2.load(Ordering::Relaxed) != 1 {
- while let Some((key_guard, _key)) =
- db.get_unreferenced_key().expect("Failed to get unreferenced Key.")
- {
- if Instant::now().duration_since(test_begin) >= Duration::from_secs(40) {
- return;
- }
- db.purge_key_entry(key_guard).expect("Failed to purge key.");
- }
- std::thread::sleep(std::time::Duration::from_millis(100));
- }
- });
-
// While a lot of inserting and deleting is going on we have to open database connections
// successfully and use them.
// This clone is not redundant, because temp_dir needs to be kept alive until db goes
@@ -4839,7 +4821,8 @@
if Instant::now().duration_since(test_begin) >= Duration::from_secs(40) {
return;
}
- let mut db = KeystoreDB::new(temp_dir4.path()).expect("Failed to open database.");
+ let mut db = new_test_db_with_gc(temp_dir4.path(), |_, _| Ok(()))
+ .expect("Failed to open database.");
let alias = format!("test_alias_{}", count);
make_test_key_entry(&mut db, Domain::APP, 3, &alias, None)
@@ -4858,9 +4841,6 @@
handle2.join().expect("Thread 2 panicked.");
handle4.join().expect("Thread 4 panicked.");
- stop_deleting.store(1, Ordering::Relaxed);
- handle3.join().expect("Thread 3 panicked.");
-
Ok(())
}