signer-daemon 0.2.1

Signer daemon package.
Documentation
use signer_core::{SignerFsStore, SignerUser, SignerUserPublic};

use crate::{SignerDaemon, model::viewobject::OperLogVO};

fn create_test_signer_user() -> SignerUser {
  SignerUser {
    prv_key: format!("y2uE8WoJYpA32KdwPDGaqr7vjzuylVc9yvmirXNwEYI="),
    public: SignerUserPublic {
      pub_key: format!("lOXR0P3DMq3v_k7lOiKYYR9LqfvRdWG4MVIVolWjtU0="),
      username: format!("alice"),
      update_time: 0,
      allow_endpoints: vec![],
    },
  }
}

#[tokio::test]
async fn test_push_crdt_event() -> anyhow::Result<()> {
  let signer = create_test_signer_user();

  let daemon = SignerDaemon::from_memory(&signer, "test").await?;

  daemon
    .put_oper_log(OperLogVO {
      id: uuid::Uuid::new_v4().to_string(),
      title: "Test crdt sync".to_string(),
      content: "Test crdt sync content".to_string(),
      level: "DEBUG".to_string(),
      create_time: chrono::Utc::now().timestamp_millis(),
    })
    .await?;

  daemon.crdt_push("http://localhost:8080/api/signer").await?;

  Ok(())
}

#[tokio::test]
async fn test_pull_crdt_event() -> anyhow::Result<()> {
  let signer = create_test_signer_user();
  let sfs = SignerFsStore::new("./testdir".to_string());
  sfs.save_signer_user(&signer)?;

  let daemon = SignerDaemon::from_sfs(&signer, &sfs).await?;

  daemon.crdt_pull("http://localhost:8080/api/signer").await?;

  let ol = daemon.list_oper_log().await?;
  assert!(ol.len() > 0);

  Ok(())
}