Skip to content

Commit 9c27d80

Browse files
jyn514Joshua Nelson
authored andcommitted
Fix error handling
- Return 500, not 400, for internal errors - Return an error for internal errors in search, not 'not found'
1 parent b05ef6f commit 9c27d80

File tree

2 files changed

+21
-22
lines changed

2 files changed

+21
-22
lines changed

src/web/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ macro_rules! ctry {
2929
message: ::std::option::Option::Some(::std::borrow::Cow::Owned(
3030
::std::format!("{}", error),
3131
)),
32-
status: ::iron::status::BadRequest,
32+
status: ::iron::status::InternalServerError,
3333
};
3434

3535
return $crate::web::page::WebPage::into_response(error, request);
@@ -58,7 +58,7 @@ macro_rules! cexpect {
5858
let error = $crate::web::ErrorPage {
5959
title: "Internal Server Error",
6060
message: None,
61-
status: ::iron::status::BadRequest,
61+
status: ::iron::status::InternalServerError,
6262
};
6363

6464
return $crate::web::page::WebPage::into_response(error, request);

src/web/releases.rs

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ fn get_search_results(
227227
mut query: &str,
228228
page: i64,
229229
limit: i64,
230-
) -> (i64, Vec<Release>) {
230+
) -> Result<(i64, Vec<Release>), failure::Error> {
231231
query = query.trim();
232232
let offset = (page - 1) * limit;
233233

@@ -265,11 +265,7 @@ fn get_search_results(
265265
releases.downloads DESC
266266
LIMIT $2 OFFSET $3";
267267

268-
let rows = if let Ok(rows) = conn.query(statement, &[&query, &limit, &offset]) {
269-
rows
270-
} else {
271-
return (0, Vec::new());
272-
};
268+
let rows = conn.query(statement, &[&query, &limit, &offset])?;
273269

274270
// Each row contains the total number of possible/valid results, just get it once
275271
let total_results = rows
@@ -289,7 +285,7 @@ fn get_search_results(
289285
})
290286
.collect();
291287

292-
(total_results, packages)
288+
Ok((total_results, packages))
293289
}
294290

295291
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
@@ -605,7 +601,10 @@ pub fn search_handler(req: &mut Request) -> IronResult<Response> {
605601
}
606602
}
607603

608-
let (_, results) = get_search_results(&mut conn, &query, 1, RELEASES_IN_RELEASES);
604+
let (_, results) = ctry!(
605+
req,
606+
get_search_results(&mut conn, &query, 1, RELEASES_IN_RELEASES)
607+
);
609608
let title = if results.is_empty() {
610609
format!("No results found for '{}'", query)
611610
} else {
@@ -719,7 +718,7 @@ mod tests {
719718
.version("0.0.0")
720719
.create()?;
721720

722-
let (num_results, results) = get_search_results(&mut db.conn(), "foo", 1, 100);
721+
let (num_results, results) = get_search_results(&mut db.conn(), "foo", 1, 100)?;
723722
assert_eq!(num_results, 4);
724723

725724
let mut results = results.into_iter();
@@ -748,7 +747,7 @@ mod tests {
748747

749748
for name in near_matches.iter() {
750749
let (num_results, mut results) =
751-
dbg!(get_search_results(&mut db.conn(), *name, 1, 100));
750+
dbg!(get_search_results(&mut db.conn(), *name, 1, 100))?;
752751
assert_eq!(num_results, 3);
753752

754753
for name in releases.iter() {
@@ -771,7 +770,7 @@ mod tests {
771770
.build_result_successful(false)
772771
.create()?;
773772

774-
let (num_results, results) = get_search_results(&mut db.conn(), "regex", 1, 100);
773+
let (num_results, results) = get_search_results(&mut db.conn(), "regex", 1, 100)?;
775774
assert_eq!(num_results, 0);
776775

777776
let results = results.into_iter();
@@ -791,7 +790,7 @@ mod tests {
791790
.yanked(true)
792791
.create()?;
793792

794-
let (num_results, results) = get_search_results(&mut db.conn(), "regex", 1, 100);
793+
let (num_results, results) = get_search_results(&mut db.conn(), "regex", 1, 100)?;
795794
assert_eq!(num_results, 0);
796795

797796
let results = results.into_iter();
@@ -807,7 +806,7 @@ mod tests {
807806
let db = env.db();
808807
env.fake_release().name("regex").version("0.0.0").create()?;
809808

810-
let (num_results, results) = get_search_results(&mut db.conn(), "redex", 1, 100);
809+
let (num_results, results) = get_search_results(&mut db.conn(), "redex", 1, 100)?;
811810
assert_eq!(num_results, 1);
812811

813812
let mut results = results.into_iter();
@@ -829,7 +828,7 @@ mod tests {
829828
// .create()?;
830829
//
831830
// let (num_results, results) =
832-
// get_search_results(&mut db.conn(), "supercalifragilisticexpialidocious", 1, 100);
831+
// get_search_results(&mut db.conn(), "supercalifragilisticexpialidocious", 1, 100)?;
833832
// assert_eq!(num_results, 1);
834833
//
835834
// let mut results = results.into_iter();
@@ -855,7 +854,7 @@ mod tests {
855854
.name("something_completely_unrelated")
856855
.create()?;
857856

858-
let (num_results, results) = get_search_results(&mut db.conn(), "something", 1, 2);
857+
let (num_results, results) = get_search_results(&mut db.conn(), "something", 1, 2)?;
859858
assert_eq!(num_results, 4);
860859

861860
let mut results = results.into_iter();
@@ -878,7 +877,7 @@ mod tests {
878877
.name("something_completely_unrelated")
879878
.create()?;
880879

881-
let (num_results, results) = get_search_results(&mut db.conn(), "something", 2, 2);
880+
let (num_results, results) = get_search_results(&mut db.conn(), "something", 2, 2)?;
882881
assert_eq!(num_results, 4);
883882

884883
let mut results = results.into_iter();
@@ -922,7 +921,7 @@ mod tests {
922921
.version("0.0.0")
923922
.create()?;
924923

925-
let (num_results, results) = get_search_results(&mut db.conn(), "somethang", 1, 100);
924+
let (num_results, results) = get_search_results(&mut db.conn(), "somethang", 1, 100)?;
926925
assert_eq!(num_results, 1);
927926

928927
let mut results = results.into_iter();
@@ -954,7 +953,7 @@ mod tests {
954953
// .create()?;
955954
//
956955
// let (num_results, results) =
957-
// get_search_results(&mut db.conn(), "name_better_than_description", 1, 100);
956+
// get_search_results(&mut db.conn(), "name_better_than_description", 1, 100)?;
958957
// assert_eq!(num_results, 2);
959958
//
960959
// let mut results = results.into_iter();
@@ -987,7 +986,7 @@ mod tests {
987986
.name("i_am_useless_and_mean_nothing")
988987
.create()?;
989988

990-
let (num_results, results) = get_search_results(&mut db.conn(), "match", 1, 100);
989+
let (num_results, results) = get_search_results(&mut db.conn(), "match", 1, 100)?;
991990
assert_eq!(num_results, 3);
992991

993992
let mut results = results.into_iter();
@@ -1008,7 +1007,7 @@ mod tests {
10081007
env.fake_release().name("matcb").downloads(10).create()?;
10091008
env.fake_release().name("matcc").downloads(1).create()?;
10101009

1011-
let (num_results, results) = get_search_results(&mut db.conn(), "match", 1, 100);
1010+
let (num_results, results) = get_search_results(&mut db.conn(), "match", 1, 100)?;
10121011
assert_eq!(num_results, 3);
10131012

10141013
let mut results = results.into_iter();

0 commit comments

Comments
 (0)