diff --git a/radicle-node/src/test/peer.rs b/radicle-node/src/test/peer.rs index e883e3a8..6b48fc87 100644 --- a/radicle-node/src/test/peer.rs +++ b/radicle-node/src/test/peer.rs @@ -75,7 +75,15 @@ impl DerefMut for Peer { impl Peer { pub fn new(name: &'static str, ip: impl Into) -> Self { - Self::config(name, ip, MockStorage::empty(), Config::default()) + Self::with_storage(name, ip, MockStorage::empty()) + } + + pub fn with_storage( + name: &'static str, + ip: impl Into, + storage: MockStorage, + ) -> Self { + Self::config(name, ip, storage, Config::default()) } } diff --git a/radicle-node/src/tests.rs b/radicle-node/src/tests.rs index d5040787..24771ff6 100644 --- a/radicle-node/src/tests.rs +++ b/radicle-node/src/tests.rs @@ -581,7 +581,9 @@ fn test_refs_announcement_relay() { #[test] fn test_refs_announcement_no_subscribe() { - let mut alice = Peer::new("alice", [7, 7, 7, 7]); + let storage = arbitrary::nonempty_storage(1); + let rid = *storage.inventory.keys().next().unwrap(); + let mut alice = Peer::with_storage("alice", [7, 7, 7, 7], storage); let bob = Peer::new("bob", [8, 8, 8, 8]); let eve = Peer::new("eve", [9, 9, 9, 9]); let id = arbitrary::gen(1); @@ -589,18 +591,19 @@ fn test_refs_announcement_no_subscribe() { alice.track_repo(&id, tracking::Scope::All).unwrap(); alice.connect_to(&bob); alice.connect_to(&eve); - alice.receive(bob.id(), bob.refs_announcement(id)); + alice.receive(bob.id(), bob.refs_announcement(rid)); assert!(alice.messages(eve.id()).next().is_none()); } #[test] fn test_gossip_during_fetch() { - let mut alice = Peer::new("alice", [7, 7, 7, 7]); + let storage = arbitrary::nonempty_storage(1); + let rid = *storage.inventory.keys().next().unwrap(); + let mut alice = Peer::with_storage("alice", [7, 7, 7, 7], storage); let bob = Peer::new("bob", [8, 8, 8, 8]); let eve = Peer::new("eve", [9, 9, 9, 9]); let now = LocalTime::now().as_millis(); - let rid = arbitrary::gen::(1); let (send, _recv) = chan::bounded::(1); let inventory1 = BoundedVec::try_from(arbitrary::vec(1)).unwrap(); let inventory2 = BoundedVec::try_from(arbitrary::vec(1)).unwrap(); diff --git a/radicle/src/identity/doc.rs b/radicle/src/identity/doc.rs index 237a3e10..c5c7fa52 100644 --- a/radicle/src/identity/doc.rs +++ b/radicle/src/identity/doc.rs @@ -299,6 +299,16 @@ impl Doc { Ok(oid.into()) } + + #[cfg(any(test, feature = "test"))] + pub(crate) fn unverified(self) -> Doc { + Doc { + payload: self.payload, + delegates: self.delegates, + threshold: self.threshold, + verified: PhantomData, + } + } } impl Doc { diff --git a/radicle/src/test/arbitrary.rs b/radicle/src/test/arbitrary.rs index 47eaabc8..a630670a 100644 --- a/radicle/src/test/arbitrary.rs +++ b/radicle/src/test/arbitrary.rs @@ -58,6 +58,14 @@ pub fn vec(size: usize) -> Vec { vec } +pub fn nonempty_storage(size: usize) -> MockStorage { + let mut storage = gen::(size); + storage + .inventory + .insert(gen::(size), gen::>(size)); + storage +} + pub fn gen(size: usize) -> T { let mut gen = qcheck::Gen::new(size); diff --git a/radicle/src/test/storage.rs b/radicle/src/test/storage.rs index d166de14..9505f36d 100644 --- a/radicle/src/test/storage.rs +++ b/radicle/src/test/storage.rs @@ -55,28 +55,42 @@ impl ReadStorage for MockStorage { Ok(self.inventory.keys().cloned().collect::>()) } - fn repository(&self, _proj: Id) -> Result { - Ok(MockRepository {}) + fn repository(&self, rid: Id) -> Result { + let doc = self + .inventory + .get(&rid) + .expect("Mockstorage::repository: missing doc"); + Ok(MockRepository { + id: rid, + doc: doc.clone(), + }) } } impl WriteStorage for MockStorage { type RepositoryMut = MockRepository; - fn repository_mut(&self, _rid: Id) -> Result { - Ok(MockRepository {}) + fn repository_mut(&self, rid: Id) -> Result { + let doc = self.inventory.get(&rid).unwrap(); + Ok(MockRepository { + id: rid, + doc: doc.clone(), + }) } fn create(&self, _rid: Id) -> Result { - Ok(MockRepository {}) + todo!() } } -pub struct MockRepository {} +pub struct MockRepository { + id: Id, + doc: Doc, +} impl ReadRepository for MockRepository { fn id(&self) -> Id { - todo!() + self.id } fn is_empty(&self) -> Result { @@ -146,7 +160,7 @@ impl ReadRepository for MockRepository { fn identity_doc( &self, ) -> Result<(Oid, crate::identity::Doc), IdentityError> { - todo!() + Ok((git2::Oid::zero().into(), self.doc.clone().unverified())) } }