use super::*;
#[test]
fn a_transient_lock_root_failure_does_not_wedge_provisioning() {
let (_temp, database, lock_root) = fixture();
fs::set_permissions(&lock_root, fs::Permissions::from_mode(0o500))
.expect("make lock root read only");
assert!(SqliteAuthorityStore::provision(&database, &lock_root).is_err());
fs::set_permissions(&lock_root, fs::Permissions::from_mode(0o700))
.expect("restore lock root mode");
SqliteAuthorityStore::provision(&database, &lock_root).expect("reprovision");
SqliteAuthorityStore::open_serving(&database, &lock_root).expect("open serving");
}
#[test]
fn partial_provision_fails_closed() {
let (_temp, database, lock_root) = fixture();
drop(SqliteBudgetStore::open(&database).expect("initialize authority schemas"));
fs::set_permissions(&database, fs::Permissions::from_mode(0o600))
.expect("secure database mode");
let connection = Connection::open(&database).expect("open database");
connection
.execute_batch(SERVING_OWNER_SCHEMA)
.expect("owner table");
drop(connection);
assert!(matches!(
SqliteAuthorityStore::provision(&database, &lock_root),
Err(SqliteServingOwnerError::PartialProvision(_))
));
assert!(matches!(
SqliteAuthorityStore::open_serving(&database, &lock_root),
Err(SqliteServingOwnerError::PartialProvision(_))
));
assert!(SqliteBudgetStore::open(&database).is_err());
assert!(SqliteRevocationStore::open(&database).is_err());
}