Skip to content

Commit c316da0

Browse files
apollo_proof_manager: test fs proof storage
1 parent b416cd8 commit c316da0

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

crates/apollo_proof_manager/src/proof_storage.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ use starknet_api::transaction::fields::Proof;
99
use starknet_types_core::felt::Felt;
1010
use thiserror::Error;
1111

12+
#[cfg(test)]
13+
#[path = "proof_storage_test.rs"]
14+
mod proof_storage_test;
15+
1216
pub trait ProofStorage: Send + Sync {
1317
type Error: Error;
1418
fn set_proof(&self, facts_hash: Felt, proof: Proof) -> Result<(), Self::Error>;
@@ -91,7 +95,6 @@ impl FsProofStorage {
9195

9296
/// Writes a proof to a file in binary format.
9397
/// The file is named `proof` inside the given directory.
94-
#[allow(dead_code)]
9598
fn write_proof_to_file(&self, path: &Path, proof: &Proof) -> FsProofStorageResult<()> {
9699
let path = path.join("proof");
97100
if let Some(parent) = path.parent() {
@@ -168,6 +171,9 @@ impl ProofStorage for FsProofStorage {
168171

169172
match self.read_proof_from_file(facts_hash) {
170173
Ok(proof) => Ok(Some(proof)),
174+
Err(FsProofStorageError::IoError(e)) if e.kind() == std::io::ErrorKind::NotFound => {
175+
Ok(None)
176+
}
171177
Err(e) => Err(e),
172178
}
173179
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
use std::path::PathBuf;
2+
3+
use starknet_api::transaction::fields::Proof;
4+
use starknet_types_core::felt::Felt;
5+
6+
use crate::proof_storage::{FsProofStorage, ProofStorage};
7+
8+
fn new_fs_proof_storage() -> FsProofStorage {
9+
let tmp_dir = tempfile::tempdir().unwrap();
10+
let persistent_root: PathBuf = tmp_dir.path().to_path_buf();
11+
FsProofStorage::new(persistent_root).expect("Failed to create FsProofStorage")
12+
}
13+
14+
fn sample_facts_hash() -> Felt {
15+
Felt::from(0x1234_u64)
16+
}
17+
18+
fn sample_proof() -> Proof {
19+
Proof::from(vec![1_u32, 2_u32, 3_u32, 4_u32, 5_u32])
20+
}
21+
22+
#[test]
23+
fn fs_proof_storage_get_before_set_returns_none() {
24+
let storage = new_fs_proof_storage();
25+
let facts_hash = sample_facts_hash();
26+
27+
let res = storage.get_proof(facts_hash);
28+
assert!(res.is_ok());
29+
assert!(res.unwrap().is_none());
30+
}
31+
32+
#[test]
33+
fn fs_proof_storage_roundtrip() {
34+
let storage = new_fs_proof_storage();
35+
let facts_hash = sample_facts_hash();
36+
let proof = sample_proof();
37+
38+
storage.set_proof(facts_hash, proof.clone()).unwrap();
39+
40+
let retrieved = storage.get_proof(sample_facts_hash()).unwrap();
41+
assert_eq!(retrieved, Some(proof));
42+
}

0 commit comments

Comments
 (0)