diff --git a/ethcore/light/src/request_builder.rs b/ethcore/light/src/request_builder.rs index 3533026a5..867bb6dcc 100644 --- a/ethcore/light/src/request_builder.rs +++ b/ethcore/light/src/request_builder.rs @@ -114,3 +114,53 @@ impl Requests { /// Get access to the underlying slice of requests. pub fn requests(&self) -> &[Request] { &self.requests } } + +#[cfg(test)] +mod tests { + use request::*; + use super::RequestBuilder; + use util::H256; + + #[test] + fn all_scalar() { + let mut builder = RequestBuilder::default(); + builder.push(Request::HeaderProof(IncompleteHeaderProofRequest { + num: 100.into(), + })).unwrap(); + builder.push(Request::Receipts(IncompleteReceiptsRequest { + hash: H256::default().into(), + })).unwrap(); + } + + #[test] + #[should_panic] + fn missing_backref() { + let mut builder = RequestBuilder::default(); + builder.push(Request::HeaderProof(IncompleteHeaderProofRequest { + num: Field::BackReference(100, 3), + })).unwrap(); + } + + #[test] + #[should_panic] + fn wrong_kind() { + let mut builder = RequestBuilder::default(); + assert!(builder.push(Request::HeaderProof(IncompleteHeaderProofRequest { + num: 100.into(), + })).is_ok()); + builder.push(Request::HeaderProof(IncompleteHeaderProofRequest { + num: Field::BackReference(0, 0), + })).unwrap(); + } + + #[test] + fn good_backreference() { + let mut builder = RequestBuilder::default(); + builder.push(Request::HeaderProof(IncompleteHeaderProofRequest { + num: 100.into(), // header proof puts hash at output 0. + })).unwrap(); + builder.push(Request::Receipts(IncompleteReceiptsRequest { + hash: Field::BackReference(0, 0), + })).unwrap(); + } +} diff --git a/ethcore/light/src/types/request.rs b/ethcore/light/src/types/request.rs index 880bb99f2..1a1276951 100644 --- a/ethcore/light/src/types/request.rs +++ b/ethcore/light/src/types/request.rs @@ -649,7 +649,7 @@ pub mod header_proof { } fn note_outputs(&self, mut note: F) where F: FnMut(usize, OutputKind) { - note(1, OutputKind::Hash); + note(0, OutputKind::Hash); } fn fill(self, oracle: F) -> Result @@ -691,7 +691,7 @@ pub mod header_proof { impl Response { /// Fill reusable outputs by providing them to the function. pub fn fill_outputs(&self, mut f: F) where F: FnMut(usize, Output) { - f(1, Output::Hash(self.hash)); + f(0, Output::Hash(self.hash)); } }