c356265cf4
* Remove `actix-rt` and replace with tokio tasks * Include activity queue test * Use older `Arc` method * Refactor to not re-process PEM data on each request * Add retry queue and spawn tokio tasks directly * Fix doc error * Remove semaphore and use join set for backpressure * Fix debug issue with multiple mailboxes
66 lines
2.1 KiB
Rust
66 lines
2.1 KiB
Rust
use crate::{
|
|
instance::{listen, new_instance, Webserver},
|
|
objects::post::DbPost,
|
|
utils::generate_object_id,
|
|
};
|
|
use error::Error;
|
|
use std::{env::args, str::FromStr};
|
|
use tracing::log::{info, LevelFilter};
|
|
|
|
mod activities;
|
|
#[cfg(feature = "actix-web")]
|
|
mod actix_web;
|
|
#[cfg(feature = "axum")]
|
|
mod axum;
|
|
mod error;
|
|
mod instance;
|
|
mod objects;
|
|
mod utils;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<(), Error> {
|
|
env_logger::builder()
|
|
.filter_level(LevelFilter::Warn)
|
|
.filter_module("activitypub_federation", LevelFilter::Info)
|
|
.filter_module("local_federation", LevelFilter::Info)
|
|
.format_timestamp(None)
|
|
.init();
|
|
|
|
info!("Start with parameter `axum` or `actix-web` to select the webserver");
|
|
let webserver = args()
|
|
.nth(1)
|
|
.map(|arg| Webserver::from_str(&arg).unwrap())
|
|
.unwrap_or(Webserver::Axum);
|
|
|
|
let alpha = new_instance("localhost:8001", "alpha".to_string()).await?;
|
|
let beta = new_instance("localhost:8002", "beta".to_string()).await?;
|
|
listen(&alpha, &webserver)?;
|
|
listen(&beta, &webserver)?;
|
|
info!("Local instances started");
|
|
|
|
info!("Alpha user follows beta user via webfinger");
|
|
alpha
|
|
.local_user()
|
|
.follow("beta@localhost:8002", &alpha.to_request_data())
|
|
.await?;
|
|
assert_eq!(
|
|
beta.local_user().followers(),
|
|
&vec![alpha.local_user().ap_id.inner().clone()]
|
|
);
|
|
info!("Follow was successful");
|
|
|
|
info!("Beta sends a post to its followers");
|
|
let sent_post = DbPost::new("Hello world!".to_string(), beta.local_user().ap_id)?;
|
|
beta.local_user()
|
|
.post(sent_post.clone(), &beta.to_request_data())
|
|
.await?;
|
|
let received_post = alpha.posts.lock().unwrap().first().cloned().unwrap();
|
|
info!("Alpha received post: {}", received_post.text);
|
|
|
|
// assert that alpha received the post
|
|
assert_eq!(received_post.text, sent_post.text);
|
|
assert_eq!(received_post.ap_id.inner(), sent_post.ap_id.inner());
|
|
assert_eq!(received_post.creator.inner(), sent_post.creator.inner());
|
|
info!("Test completed");
|
|
Ok(())
|
|
}
|