signer-remote 0.4.1

Signer remote communication package.
Documentation
//! 远程服务测试
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(())
}