Skip to content

Commit 5d49d48

Browse files
committed
test: [#1152] write assertions when API writes errors into logs
1 parent cc2840f commit 5d49d48

File tree

6 files changed

+450
-129
lines changed

6 files changed

+450
-129
lines changed

tests/servers/api/v1/client.rs

+52-40
Original file line numberDiff line numberDiff line change
@@ -20,82 +20,94 @@ impl Client {
2020
}
2121
}
2222

23-
pub async fn generate_auth_key(&self, seconds_valid: i32) -> Response {
24-
self.post_empty(&format!("key/{}", &seconds_valid)).await
23+
pub async fn generate_auth_key(&self, seconds_valid: i32, headers: Option<HeaderMap>) -> Response {
24+
self.post_empty(&format!("key/{}", &seconds_valid), headers).await
2525
}
2626

27-
pub async fn add_auth_key(&self, add_key_form: AddKeyForm) -> Response {
28-
self.post_form("keys", &add_key_form).await
27+
pub async fn add_auth_key(&self, add_key_form: AddKeyForm, headers: Option<HeaderMap>) -> Response {
28+
self.post_form("keys", &add_key_form, headers).await
2929
}
3030

31-
pub async fn delete_auth_key(&self, key: &str) -> Response {
32-
self.delete(&format!("key/{}", &key)).await
31+
pub async fn delete_auth_key(&self, key: &str, headers: Option<HeaderMap>) -> Response {
32+
self.delete(&format!("key/{}", &key), headers).await
3333
}
3434

35-
pub async fn reload_keys(&self) -> Response {
36-
self.get("keys/reload", Query::default()).await
35+
pub async fn reload_keys(&self, headers: Option<HeaderMap>) -> Response {
36+
self.get("keys/reload", Query::default(), headers).await
3737
}
3838

39-
pub async fn whitelist_a_torrent(&self, info_hash: &str) -> Response {
40-
self.post_empty(&format!("whitelist/{}", &info_hash)).await
39+
pub async fn whitelist_a_torrent(&self, info_hash: &str, headers: Option<HeaderMap>) -> Response {
40+
self.post_empty(&format!("whitelist/{}", &info_hash), headers).await
4141
}
4242

43-
pub async fn remove_torrent_from_whitelist(&self, info_hash: &str) -> Response {
44-
self.delete(&format!("whitelist/{}", &info_hash)).await
43+
pub async fn remove_torrent_from_whitelist(&self, info_hash: &str, headers: Option<HeaderMap>) -> Response {
44+
self.delete(&format!("whitelist/{}", &info_hash), headers).await
4545
}
4646

47-
pub async fn reload_whitelist(&self) -> Response {
48-
self.get("whitelist/reload", Query::default()).await
47+
pub async fn reload_whitelist(&self, headers: Option<HeaderMap>) -> Response {
48+
self.get("whitelist/reload", Query::default(), headers).await
4949
}
5050

51-
pub async fn get_torrent(&self, info_hash: &str) -> Response {
52-
self.get(&format!("torrent/{}", &info_hash), Query::default()).await
51+
pub async fn get_torrent(&self, info_hash: &str, headers: Option<HeaderMap>) -> Response {
52+
self.get(&format!("torrent/{}", &info_hash), Query::default(), headers).await
5353
}
5454

55-
pub async fn get_torrents(&self, params: Query) -> Response {
56-
self.get("torrents", params).await
55+
pub async fn get_torrents(&self, params: Query, headers: Option<HeaderMap>) -> Response {
56+
self.get("torrents", params, headers).await
5757
}
5858

59-
pub async fn get_tracker_statistics(&self) -> Response {
60-
self.get("stats", Query::default()).await
59+
pub async fn get_tracker_statistics(&self, headers: Option<HeaderMap>) -> Response {
60+
self.get("stats", Query::default(), headers).await
6161
}
6262

63-
pub async fn get(&self, path: &str, params: Query) -> Response {
63+
pub async fn get(&self, path: &str, params: Query, headers: Option<HeaderMap>) -> Response {
6464
let mut query: Query = params;
6565

6666
if let Some(token) = &self.connection_info.api_token {
6767
query.add_param(QueryParam::new("token", token));
6868
};
6969

70-
self.get_request_with_query(path, query, None).await
70+
self.get_request_with_query(path, query, headers).await
7171
}
7272

73-
pub async fn post_empty(&self, path: &str) -> Response {
74-
reqwest::Client::new()
73+
pub async fn post_empty(&self, path: &str, headers: Option<HeaderMap>) -> Response {
74+
let builder = reqwest::Client::new()
7575
.post(self.base_url(path).clone())
76-
.query(&ReqwestQuery::from(self.query_with_token()))
77-
.send()
78-
.await
79-
.unwrap()
76+
.query(&ReqwestQuery::from(self.query_with_token()));
77+
78+
let builder = match headers {
79+
Some(headers) => builder.headers(headers),
80+
None => builder,
81+
};
82+
83+
builder.send().await.unwrap()
8084
}
8185

82-
pub async fn post_form<T: Serialize + ?Sized>(&self, path: &str, form: &T) -> Response {
83-
reqwest::Client::new()
86+
pub async fn post_form<T: Serialize + ?Sized>(&self, path: &str, form: &T, headers: Option<HeaderMap>) -> Response {
87+
let builder = reqwest::Client::new()
8488
.post(self.base_url(path).clone())
8589
.query(&ReqwestQuery::from(self.query_with_token()))
86-
.json(&form)
87-
.send()
88-
.await
89-
.unwrap()
90+
.json(&form);
91+
92+
let builder = match headers {
93+
Some(headers) => builder.headers(headers),
94+
None => builder,
95+
};
96+
97+
builder.send().await.unwrap()
9098
}
9199

92-
async fn delete(&self, path: &str) -> Response {
93-
reqwest::Client::new()
100+
async fn delete(&self, path: &str, headers: Option<HeaderMap>) -> Response {
101+
let builder = reqwest::Client::new()
94102
.delete(self.base_url(path).clone())
95-
.query(&ReqwestQuery::from(self.query_with_token()))
96-
.send()
97-
.await
98-
.unwrap()
103+
.query(&ReqwestQuery::from(self.query_with_token()));
104+
105+
let builder = match headers {
106+
Some(headers) => builder.headers(headers),
107+
None => builder,
108+
};
109+
110+
builder.send().await.unwrap()
99111
}
100112

101113
pub async fn get_request_with_query(&self, path: &str, params: Query, headers: Option<HeaderMap>) -> Response {

tests/servers/api/v1/contract/authentication.rs

+18-4
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,19 @@ async fn should_not_authenticate_requests_when_the_token_is_missing() {
3030

3131
let env = Started::new(&configuration::ephemeral().into()).await;
3232

33+
let request_id = Uuid::new_v4();
34+
3335
let response = Client::new(env.get_connection_info())
34-
.get_request_with_query("stats", Query::default(), None)
36+
.get_request_with_query("stats", Query::default(), Some(headers_with_request_id(request_id)))
3537
.await;
3638

3739
assert_unauthorized(response).await;
3840

41+
assert!(
42+
logs_contains_a_line_with(&["ERROR", "API", &format!("{request_id}")]),
43+
"Expected logs to contain: ERROR ... API ... request_id={request_id}"
44+
);
45+
3946
env.stop().await;
4047
}
4148

@@ -57,12 +64,12 @@ async fn should_not_authenticate_requests_when_the_token_is_empty() {
5764

5865
assert_token_not_valid(response).await;
5966

60-
env.stop().await;
61-
6267
assert!(
6368
logs_contains_a_line_with(&["ERROR", "API", &format!("{request_id}")]),
6469
"Expected logs to contain: ERROR ... API ... request_id={request_id}"
6570
);
71+
72+
env.stop().await;
6673
}
6774

6875
#[tokio::test]
@@ -71,16 +78,23 @@ async fn should_not_authenticate_requests_when_the_token_is_invalid() {
7178

7279
let env = Started::new(&configuration::ephemeral().into()).await;
7380

81+
let request_id = Uuid::new_v4();
82+
7483
let response = Client::new(env.get_connection_info())
7584
.get_request_with_query(
7685
"stats",
7786
Query::params([QueryParam::new("token", "INVALID TOKEN")].to_vec()),
78-
None,
87+
Some(headers_with_request_id(request_id)),
7988
)
8089
.await;
8190

8291
assert_token_not_valid(response).await;
8392

93+
assert!(
94+
logs_contains_a_line_with(&["ERROR", "API", &format!("{request_id}")]),
95+
"Expected logs to contain: ERROR ... API ... request_id={request_id}"
96+
);
97+
8498
env.stop().await;
8599
}
86100

0 commit comments

Comments
 (0)