mirror of
https://github.com/LemmyNet/activitypub-federation-rust.git
synced 2024-06-10 17:29:34 +00:00
add test case
This commit is contained in:
parent
18e943b1ea
commit
b479e9ac95
|
@ -57,6 +57,7 @@ mod test {
|
||||||
use actix_web::test::TestRequest;
|
use actix_web::test::TestRequest;
|
||||||
use reqwest::Client;
|
use reqwest::Client;
|
||||||
use reqwest_middleware::ClientWithMiddleware;
|
use reqwest_middleware::ClientWithMiddleware;
|
||||||
|
use serde_json::json;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
|
@ -102,22 +103,51 @@ mod test {
|
||||||
assert_eq!(&err, &Error::ActivitySignatureInvalid)
|
assert_eq!(&err, &Error::ActivitySignatureInvalid)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn setup_receive_test() -> (Bytes, TestRequest, FederationConfig<DbConnection>) {
|
#[tokio::test]
|
||||||
|
async fn test_receive_unparseable_activity() {
|
||||||
|
let (_, _, config) = setup_receive_test().await;
|
||||||
|
|
||||||
|
let actor = Url::parse("http://ds9.lemmy.ml/u/lemmy_alpha").unwrap();
|
||||||
|
let id = "http://localhost:123/1";
|
||||||
|
let activity = json!({
|
||||||
|
"actor": actor.as_str(),
|
||||||
|
"to": ["https://www.w3.org/ns/activitystreams#Public"],
|
||||||
|
"object": "http://ds9.lemmy.ml/post/1",
|
||||||
|
"cc": ["http://enterprise.lemmy.ml/c/main"],
|
||||||
|
"type": "Delete",
|
||||||
|
"id": id
|
||||||
|
}
|
||||||
|
);
|
||||||
|
let body: Bytes = serde_json::to_vec(&activity).unwrap().into();
|
||||||
|
let incoming_request = construct_request(&body, &actor).await;
|
||||||
|
|
||||||
|
// intentionally cause a parse error by using wrong type for deser
|
||||||
|
let err = receive_activity::<Follow, DbUser, DbConnection>(
|
||||||
|
incoming_request.to_http_request(),
|
||||||
|
body,
|
||||||
|
&config.to_request_data(),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.err()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
match err {
|
||||||
|
Error::ParseReceivedActivity(url, _) => {
|
||||||
|
assert_eq!(id, url.as_str());
|
||||||
|
}
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn construct_request(body: &Bytes, actor: &Url) -> TestRequest {
|
||||||
let inbox = "https://example.com/inbox";
|
let inbox = "https://example.com/inbox";
|
||||||
let headers = generate_request_headers(&Url::parse(inbox).unwrap());
|
let headers = generate_request_headers(&Url::parse(inbox).unwrap());
|
||||||
let request_builder = ClientWithMiddleware::from(Client::default())
|
let request_builder = ClientWithMiddleware::from(Client::default())
|
||||||
.post(inbox)
|
.post(inbox)
|
||||||
.headers(headers);
|
.headers(headers);
|
||||||
let activity = Follow {
|
|
||||||
actor: ObjectId::parse("http://localhost:123").unwrap(),
|
|
||||||
object: ObjectId::parse("http://localhost:124").unwrap(),
|
|
||||||
kind: Default::default(),
|
|
||||||
id: "http://localhost:123/1".try_into().unwrap(),
|
|
||||||
};
|
|
||||||
let body: Bytes = serde_json::to_vec(&activity).unwrap().into();
|
|
||||||
let outgoing_request = sign_request(
|
let outgoing_request = sign_request(
|
||||||
request_builder,
|
request_builder,
|
||||||
&activity.actor.into_inner(),
|
actor,
|
||||||
body.clone(),
|
body.clone(),
|
||||||
DB_USER_KEYPAIR.private_key().unwrap(),
|
DB_USER_KEYPAIR.private_key().unwrap(),
|
||||||
false,
|
false,
|
||||||
|
@ -128,6 +158,18 @@ mod test {
|
||||||
for h in outgoing_request.headers() {
|
for h in outgoing_request.headers() {
|
||||||
incoming_request = incoming_request.append_header(h);
|
incoming_request = incoming_request.append_header(h);
|
||||||
}
|
}
|
||||||
|
incoming_request
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn setup_receive_test() -> (Bytes, TestRequest, FederationConfig<DbConnection>) {
|
||||||
|
let activity = Follow {
|
||||||
|
actor: ObjectId::parse("http://localhost:123").unwrap(),
|
||||||
|
object: ObjectId::parse("http://localhost:124").unwrap(),
|
||||||
|
kind: Default::default(),
|
||||||
|
id: "http://localhost:123/1".try_into().unwrap(),
|
||||||
|
};
|
||||||
|
let body: Bytes = serde_json::to_vec(&activity).unwrap().into();
|
||||||
|
let incoming_request = construct_request(&body, activity.actor.inner()).await;
|
||||||
|
|
||||||
let config = FederationConfig::builder()
|
let config = FederationConfig::builder()
|
||||||
.domain("localhost:8002")
|
.domain("localhost:8002")
|
||||||
|
|
Loading…
Reference in a new issue