From c4340af05695e9ca89864ec51b252e9224e66a8f Mon Sep 17 00:00:00 2001 From: Michael Sproul Date: Wed, 27 May 2020 15:26:49 +1000 Subject: [PATCH] Fix EF test runners for v0.12 --- .../ef_tests/src/cases/bls_aggregate_sigs.rs | 13 +++++++---- .../src/cases/bls_aggregate_verify.rs | 23 +++++-------------- testing/ef_tests/src/cases/operations.rs | 21 +++++++++++++---- 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/testing/ef_tests/src/cases/bls_aggregate_sigs.rs b/testing/ef_tests/src/cases/bls_aggregate_sigs.rs index 561c7bc643..71554705b3 100644 --- a/testing/ef_tests/src/cases/bls_aggregate_sigs.rs +++ b/testing/ef_tests/src/cases/bls_aggregate_sigs.rs @@ -25,12 +25,17 @@ impl Case for BlsAggregateSigs { aggregate_signature.add(&sig); } - let output_bytes = Some( + // Check for YAML null value, indicating invalid input. This is a bit of a hack, + // as our mutating `aggregate_signature.add` API doesn't play nicely with aggregating 0 + // inputs. + let output_bytes = if self.output == "~" { + AggregateSignature::new().as_bytes().to_vec() + } else { hex::decode(&self.output[2..]) - .map_err(|e| Error::FailedToParseTest(format!("{:?}", e)))?, - ); + .map_err(|e| Error::FailedToParseTest(format!("{:?}", e)))? + }; let aggregate_signature = Ok(aggregate_signature.as_bytes().to_vec()); - compare_result::, Vec>(&aggregate_signature, &output_bytes) + compare_result::, Vec>(&aggregate_signature, &Some(output_bytes)) } } diff --git a/testing/ef_tests/src/cases/bls_aggregate_verify.rs b/testing/ef_tests/src/cases/bls_aggregate_verify.rs index 7cac4e9066..a2f74c0b2f 100644 --- a/testing/ef_tests/src/cases/bls_aggregate_verify.rs +++ b/testing/ef_tests/src/cases/bls_aggregate_verify.rs @@ -4,15 +4,10 @@ use crate::cases::common::BlsCase; use bls::{AggregateSignature, PublicKey}; use serde_derive::Deserialize; -#[derive(Debug, Clone, Deserialize)] -pub struct BlsAggregatePair { - pub pubkey: PublicKey, - pub message: String, -} - #[derive(Debug, Clone, Deserialize)] pub struct BlsAggregateVerifyInput { - pub pairs: Vec, + pub pubkeys: Vec, + pub messages: Vec, pub signature: String, } @@ -28,11 +23,10 @@ impl Case for BlsAggregateVerify { fn result(&self, _case_index: usize) -> Result<(), Error> { let messages = self .input - .pairs + .messages .iter() - .map(|pair| { - hex::decode(&pair.message[2..]) - .map_err(|e| Error::FailedToParseTest(format!("{:?}", e))) + .map(|message| { + hex::decode(&message[2..]).map_err(|e| Error::FailedToParseTest(format!("{:?}", e))) }) .collect::>, _>>()?; @@ -41,12 +35,7 @@ impl Case for BlsAggregateVerify { .map(|x| x.as_slice()) .collect::>(); - let pubkey_refs = self - .input - .pairs - .iter() - .map(|p| &p.pubkey) - .collect::>(); + let pubkey_refs = self.input.pubkeys.iter().collect::>(); let signature_ok = hex::decode(&self.input.signature[2..]) .ok() diff --git a/testing/ef_tests/src/cases/operations.rs b/testing/ef_tests/src/cases/operations.rs index c2af3aaf1c..ff6dad6dd0 100644 --- a/testing/ef_tests/src/cases/operations.rs +++ b/testing/ef_tests/src/cases/operations.rs @@ -27,7 +27,7 @@ struct Metadata { pub struct Operations> { metadata: Metadata, pub pre: BeaconState, - pub operation: O, + pub operation: Option, pub post: Option>, } @@ -135,8 +135,16 @@ impl> LoadCase for Operations { } else { Metadata::default() }; + let pre = ssz_decode_file(&path.join("pre.ssz"))?; - let operation = ssz_decode_file(&path.join(O::filename()))?; + + // Check BLS setting here before SSZ deserialization, as most types require signatures + // to be valid. + let operation = if metadata.bls_setting.unwrap_or_default().check().is_ok() { + Some(ssz_decode_file(&path.join(O::filename()))?) + } else { + None + }; let post_filename = path.join("post.ssz"); let post = if post_filename.is_file() { Some(ssz_decode_file(&post_filename)?) @@ -162,8 +170,6 @@ impl> Case for Operations { } fn result(&self, _case_index: usize) -> Result<(), Error> { - self.metadata.bls_setting.unwrap_or_default().check()?; - let spec = &E::default_spec(); let mut state = self.pre.clone(); let mut expected = self.post.clone(); @@ -173,7 +179,12 @@ impl> Case for Operations { .build_all_committee_caches(spec) .expect("committee caches OK"); - let mut result = self.operation.apply_to(&mut state, spec).map(|()| state); + let mut result = self + .operation + .as_ref() + .ok_or(Error::SkippedBls)? + .apply_to(&mut state, spec) + .map(|()| state); compare_beacon_state_results_without_caches(&mut result, &mut expected) }