diff --git a/gst-plugin-reqwest/src/reqwesthttpsrc.rs b/gst-plugin-reqwest/src/reqwesthttpsrc.rs index 4d56f9f6..4c9f58e2 100644 --- a/gst-plugin-reqwest/src/reqwesthttpsrc.rs +++ b/gst-plugin-reqwest/src/reqwesthttpsrc.rs @@ -163,10 +163,11 @@ impl ReqwestHttpSrc { }) })?; + //I have to read statusCode and produce error accordingly if !response.status().is_success() { gst_error!(cat, obj: src, "Request status failed: {:?}", response); return Err(gst_error_msg!( - gst::ResourceError::Read, + gst::ResourceError::NotFound, ["Failed to fetch {}: {}", uri, response.status()] )); } diff --git a/gst-plugin-reqwest/tests/reqwesthttpsrc.rs b/gst-plugin-reqwest/tests/reqwesthttpsrc.rs index 5aa59252..b3f0e3b5 100644 --- a/gst-plugin-reqwest/tests/reqwesthttpsrc.rs +++ b/gst-plugin-reqwest/tests/reqwesthttpsrc.rs @@ -134,6 +134,39 @@ impl Harness { } } + fn wait_for_error(&mut self) -> glib::Error { + loop { + match self.receiver.recv().unwrap() { + Message::ServerError(err) => { + panic!("Got server error: {}", err); + } + Message::Event(ev) => { + use gst::EventView; + + match ev.view() { + EventView::Eos(_) => { + panic!("Got EOS"); + } + _ => (), + } + } + Message::Message(msg) => { + use gst::MessageView; + + match msg.view() { + MessageView::Error(err) => { + return err.get_error(); + } + _ => (), + } + } + Message::Buffer(buffer) => { + panic!("Got buffer {:?}", buffer); + } + } + } + } + /// Wait until a buffer is available or EOS was reached /// /// This function will panic on errors. @@ -246,3 +279,33 @@ fn test_basic_request() { // Check if everything was read assert_eq!(cursor.position(), 11); } + +#[test] +fn test_404_error() { + init(); + + let mut h = Harness::new( + |_req| { + use hyper::{Body, Response}; + + Response::builder().status(404).body(Body::empty()).unwrap() + }, + |_src| {}, + ); + + h.run(|src| { + let _ = src.set_state(gst::State::Playing); + }); + + let expected_error = gst::ResourceError::NotFound; + + let err_code = h.wait_for_error(); + if let Some(err) = err_code.kind::() { + match err { + gst::ResourceError::NotFound => { + assert_eq!(err, expected_error); + } + _ => panic!("unexpected error : {:?}", err), + } + } +}