use signer_core::{SignerKeys, SignerUser};
use signer_remote::{SignerRemote, CrdtFrontier};
use signer_crdt::SignerMeta;
#[tokio::test]
async fn test_signer_connection() -> signer_remote::RemoteResult<()> {
let keys = SignerKeys::generate()?;
let _meta = SignerMeta::from_mem(keys.clone()).await
.map_err(|e| signer_remote::RemoteError::Internal(format!("创建 SignerMeta 失败: {}", e)))?;
let _remote = SignerRemote::new("http://127.0.0.1:8080");
Ok(())
}
#[tokio::test]
async fn test_pull_user() -> signer_remote::RemoteResult<()> {
let keys = SignerKeys::generate()?;
let user = SignerUser {
pub_key: keys.pub_key.clone(),
username: "alice".to_string(),
..Default::default()
};
let meta = SignerMeta::from_mem(keys.clone()).await
.map_err(|e| signer_remote::RemoteError::Internal(format!("创建 SignerMeta 失败: {}", e)))?;
let user_vo = signer_crdt::view::UserVO::from_user_data(&keys, &user).await
.map_err(|e| signer_remote::RemoteError::Internal(format!("创建 UserVO 失败: {}", e)))?;
user_vo.put(&meta).await
.map_err(|e| signer_remote::RemoteError::Internal(format!("保存用户信息失败: {}", e)))?;
let remote = SignerRemote::new("http://localhost:8080");
remote.ping(&keys, &user).await?;
remote.pull_user(&meta, &user.pub_key).await?;
let target = signer_crdt::view::UserVO::get(&meta, &user.pub_key).await
.map_err(|e| signer_remote::RemoteError::Internal(format!("获取用户信息失败: {}", e)))?;
assert!(target.is_some());
Ok(())
}
#[tokio::test]
async fn test_get_crdt_frontiers() -> signer_remote::RemoteResult<()> {
let keys = SignerKeys::generate()?;
let user = SignerUser {
pub_key: keys.pub_key.clone(),
username: "alice_frontiers".to_string(),
..Default::default()
};
let remote = SignerRemote::new("http://localhost:8080");
let frontiers: CrdtFrontier = remote.get_crdt_frontiers(&keys, &user).await.unwrap_or_else(|_| {
CrdtFrontier::new()
});
assert_eq!(frontiers.inner().len(), 0);
Ok(())
}
#[tokio::test]
async fn test_get_crdt_frontiers_from_signer() -> signer_remote::RemoteResult<()> {
let keys = SignerKeys::generate()?;
let meta = SignerMeta::from_mem(keys.clone()).await
.map_err(|e| signer_remote::RemoteError::Internal(format!("创建 SignerMeta 失败: {}", e)))?;
let frontiers: CrdtFrontier = CrdtFrontier::get_from_signer(&meta).await?;
let _frontiers_map = frontiers.inner();
Ok(())
}
#[tokio::test]
async fn test_get_events_from_signer() -> signer_remote::RemoteResult<()> {
let keys = SignerKeys::generate()?;
let meta = SignerMeta::from_mem(keys.clone()).await
.map_err(|e| signer_remote::RemoteError::Internal(format!("创建 SignerMeta 失败: {}", e)))?;
let frontiers = CrdtFrontier::new();
let events = frontiers.get_events_from_signer(&meta).await?;
let _events_vec = &events;
Ok(())
}
#[tokio::test]
async fn test_get_events_from_remote() -> signer_remote::RemoteResult<()> {
let keys = SignerKeys::generate()?;
let user = SignerUser {
pub_key: keys.pub_key.clone(),
username: "alice_remote_events".to_string(),
..Default::default()
};
let remote = SignerRemote::new("http://localhost:8080");
let frontiers = CrdtFrontier::new();
let events = remote.get_crdt_events_from_remote(&frontiers, &keys, &user).await.unwrap_or_else(|_| {
vec![]
});
assert_eq!(events.len(), 0);
Ok(())
}