Skip to content

Commit c980b34

Browse files
committed
test: add additional tests
1 parent 207f4a5 commit c980b34

35 files changed

+837
-2513
lines changed

Cargo.lock

Lines changed: 54 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/api-server/src/routes/block.rs

Lines changed: 50 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -183,51 +183,6 @@ impl Display for BlockParam {
183183
}
184184
}
185185

186-
#[cfg(test)]
187-
mod tests {
188-
use super::*;
189-
use proptest::prelude::*;
190-
use rstest::rstest;
191-
192-
#[rstest]
193-
#[case("latest", BlockParam::Latest)]
194-
#[case("pending", BlockParam::Pending)]
195-
#[case("finalized", BlockParam::Finalized)]
196-
#[case("0", BlockParam::BlockHeight(0))]
197-
#[case("42", BlockParam::BlockHeight(42))]
198-
#[case("999999999", BlockParam::BlockHeight(999_999_999))]
199-
fn from_str_valid(#[case] input: &str, #[case] expected: BlockParam) {
200-
assert_eq!(BlockParam::from_str(input).unwrap(), expected);
201-
}
202-
203-
#[rstest]
204-
#[case("")]
205-
#[case("nonsense!@#")]
206-
#[case("LATEST")]
207-
fn from_str_invalid(#[case] input: &str) {
208-
assert!(BlockParam::from_str(input).is_err());
209-
}
210-
211-
proptest! {
212-
#[test]
213-
fn block_height_display_fromstr_roundtrip(height: u64) {
214-
let param = BlockParam::BlockHeight(height);
215-
let s = param.to_string();
216-
let parsed = BlockParam::from_str(&s).unwrap();
217-
prop_assert_eq!(parsed, BlockParam::BlockHeight(height));
218-
}
219-
220-
#[test]
221-
fn hash_display_fromstr_roundtrip(bytes in proptest::collection::vec(any::<u8>(), 32)) {
222-
let arr: [u8; 32] = bytes.try_into().unwrap();
223-
let param = BlockParam::Hash(H256(arr));
224-
let s = param.to_string();
225-
let parsed = BlockParam::from_str(&s).unwrap();
226-
prop_assert_eq!(parsed, param);
227-
}
228-
}
229-
}
230-
231186
// #[cfg(test)]
232187
// mod tests {
233188
// use crate::routes;
@@ -379,3 +334,53 @@ mod tests {
379334
// Ok(())
380335
// }
381336
// }
337+
338+
#[cfg(test)]
339+
mod tests {
340+
use super::*;
341+
use proptest::prelude::*;
342+
343+
proptest! {
344+
#[test]
345+
fn block_param_roundtrip_keywords(variant in prop_oneof![
346+
Just("latest"),
347+
Just("pending"),
348+
Just("finalized"),
349+
]) {
350+
let parsed = BlockParam::from_str(variant).unwrap();
351+
let displayed = parsed.to_string();
352+
prop_assert_eq!(displayed.as_str(), variant);
353+
354+
let reparsed = BlockParam::from_str(&displayed).unwrap();
355+
prop_assert_eq!(reparsed, parsed);
356+
}
357+
358+
#[test]
359+
fn block_param_roundtrip_height(height: u64) {
360+
let param = BlockParam::BlockHeight(height);
361+
let displayed = param.to_string();
362+
let reparsed = BlockParam::from_str(&displayed).unwrap();
363+
prop_assert_eq!(reparsed, param);
364+
}
365+
366+
#[test]
367+
fn block_param_roundtrip_hash(bytes in proptest::collection::vec(any::<u8>(), 32)) {
368+
let mut arr = [0_u8; 32];
369+
arr.copy_from_slice(&bytes);
370+
let param = BlockParam::Hash(H256(arr));
371+
let displayed = param.to_string();
372+
let reparsed = BlockParam::from_str(&displayed).unwrap();
373+
prop_assert_eq!(reparsed, param);
374+
}
375+
376+
#[test]
377+
fn block_param_rejects_invalid_base58(s in "[^0-9a-zA-Z]+") {
378+
if s.parse::<u64>().is_err()
379+
&& !matches!(s.as_str(), "latest" | "pending" | "finalized")
380+
{
381+
let result = BlockParam::from_str(&s);
382+
prop_assert!(result.is_err());
383+
}
384+
}
385+
}
386+
}

crates/api-server/src/routes/index.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use awc::http::StatusCode;
88
use irys_domain::get_node_info;
99

1010
pub async fn info_route(state: web::Data<ApiState>) -> HttpResponse {
11-
let node_info = match get_node_info(
11+
match get_node_info(
1212
&state.block_index,
1313
&state.block_tree,
1414
&state.peer_list,
@@ -19,18 +19,15 @@ pub async fn info_route(state: web::Data<ApiState>) -> HttpResponse {
1919
)
2020
.await
2121
{
22-
Ok(info) => info,
23-
Err(e) => {
24-
return std::convert::Into::<ApiError>::into((
25-
format!("Failed to get node info: {e}"),
26-
StatusCode::INTERNAL_SERVER_ERROR,
27-
))
28-
.error_response();
29-
}
30-
};
31-
HttpResponse::Ok()
32-
.content_type(ContentType::json())
33-
.body(serde_json::to_string_pretty(&node_info).unwrap())
22+
Ok(node_info) => HttpResponse::Ok()
23+
.content_type(ContentType::json())
24+
.body(serde_json::to_string_pretty(&node_info).unwrap()),
25+
Err(_) => std::convert::Into::<ApiError>::into((
26+
"Failed to retrieve node info".to_owned(),
27+
StatusCode::INTERNAL_SERVER_ERROR,
28+
))
29+
.error_response(),
30+
}
3431
}
3532

3633
pub async fn ready_route() -> HttpResponse {

0 commit comments

Comments
 (0)