iota/iota-daemon-lib/tests/local_authority.rs
2026-09-13 20:58:41 +02:00

57 lines
2.2 KiB
Rust

use iota_daemon_lib::accounts::{AccountAuthority, CreateUserRequest, LocalIotaAccountAuthority};
use iota_identity::{LocalNodeIdentity, LocalUserId, PrincipalStore};
use iota_storage::identity::SqlitePrincipalStore;
#[tokio::test]
async fn standalone_accounts_survive_identity_reload_and_do_not_reuse_deleted_ids() {
let root = tempfile::tempdir().unwrap();
let storage = root.path().join("storage");
iota_util::file_util::configure_storage_directory(storage);
iota_storage::util::db::initialize_database().unwrap();
let identity_path = root.path().join("identity/iota.mk");
let identity = LocalNodeIdentity::load_or_create(&identity_path, None).unwrap();
let authority = LocalIotaAccountAuthority::new(identity.clone());
let alice = authority
.create_user(CreateUserRequest {
username: "alice".into(),
})
.await
.unwrap();
let alice_principal = SqlitePrincipalStore
.principal_for_local_user(alice.user)
.unwrap()
.and_then(|handle| SqlitePrincipalStore.get_principal(handle).unwrap())
.unwrap();
let credential = iota_util::file_util::read_user_credential("alice")
.unwrap()
.unwrap();
let restarted_identity = LocalNodeIdentity::load_or_create(&identity_path, None).unwrap();
assert_eq!(restarted_identity.node_id(), identity.node_id());
let restarted = LocalIotaAccountAuthority::new(restarted_identity);
let restored_principal = SqlitePrincipalStore
.principal_for_local_user(LocalUserId(alice.user.0))
.unwrap()
.and_then(|handle| SqlitePrincipalStore.get_principal(handle).unwrap())
.unwrap();
assert_eq!(restored_principal.principal, alice_principal.principal);
restarted
.delete_user(alice.user, credential.as_bytes())
.await
.unwrap();
let bob = restarted
.create_user(CreateUserRequest {
username: "bob".into(),
})
.await
.unwrap();
assert!(bob.user.0 > alice.user.0);
assert!(
SqlitePrincipalStore
.get_by_canonical_id(&alice_principal.principal)
.unwrap()
.is_some()
);
}