From 024218014b88a097015e32a4fe7c059969ef01ce Mon Sep 17 00:00:00 2001 From: Fintan Halpenny Date: Wed, 26 Apr 2023 15:03:39 +0100 Subject: [PATCH] node: test case for outdated refs Signed-off-by: Fintan Halpenny X-Clacks-Overhead: GNU Terry Pratchett --- radicle-node/src/tests/e2e.rs | 78 +++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/radicle-node/src/tests/e2e.rs b/radicle-node/src/tests/e2e.rs index 5e4f1c0d..77404b25 100644 --- a/radicle-node/src/tests/e2e.rs +++ b/radicle-node/src/tests/e2e.rs @@ -734,3 +734,81 @@ fn test_connection_crossing() { assert!(s1 ^ s2, "Exactly one session should be established"); } + +#[test] +fn test_outdated_sigrefs() { + logger::init(log::Level::Debug); + + let tmp = tempfile::tempdir().unwrap(); + + let mut alice = Node::init(tmp.path()); + let bob = Node::init(tmp.path()); + let eve = Node::init(tmp.path()); + + let rid = alice.project("acme", ""); + + let mut alice = alice.spawn(service::Config::default()); + let mut bob = bob.spawn(service::Config::default()); + let mut eve = eve.spawn(service::Config::default()); + + bob.handle.track_repo(rid, Scope::All).unwrap(); + eve.handle.track_repo(rid, Scope::All).unwrap(); + alice.connect(&bob); + bob.connect(&eve); + eve.connect(&alice); + converge([&alice, &bob, &eve]); + + bob.handle.fetch(rid, alice.id).unwrap(); + assert!(bob.storage.contains(&rid).unwrap()); + rad::fork(rid, &bob.signer, &bob.storage).unwrap(); + + eve.handle.fetch(rid, alice.id).unwrap(); + assert!(eve.storage.contains(&rid).unwrap()); + rad::fork(rid, &eve.signer, &eve.storage).unwrap(); + + alice + .handle + .track_node(eve.id, Some("eve".to_string())) + .unwrap(); + alice.handle.fetch(rid, eve.id).unwrap(); + let repo = alice.storage.repository(rid).unwrap(); + assert!(repo.remote(&eve.id).is_ok()); + + bob.handle.fetch(rid, eve.id).unwrap(); + let repo = bob.storage.repository(rid).unwrap(); + let eve_remote = repo.remote(&eve.id).unwrap(); + let old_refs = eve_remote.refs; + + // At this stage, Alice and Bob have Eve's fork and Eve does not + // have Bob's fork + + eve.issue( + rid, + "Outdated Sigrefs", + "Outdated sigrefs are harshing my vibes", + ); + let repo = eve.storage.repository(rid).unwrap(); + let eves_refs = repo.remote(&eve.id).unwrap().refs; + + // Get the current state of eve's refs in alice's storage + alice.handle.fetch(rid, eve.id).unwrap(); + let repo = alice.storage.repository(rid).unwrap(); + let eve_remote = repo.remote(&eve.id).unwrap(); + let eves_refs_expected = eve_remote.refs; + assert_ne!(eves_refs_expected, old_refs); + assert_eq!(eves_refs_expected, eves_refs); + + alice + .handle + .track_node(bob.id, Some("bob".to_string())) + .unwrap(); + alice.handle.fetch(rid, bob.id).unwrap(); + + // Ensure that bob's refs have not changed + let repo = alice.storage.repository(rid).unwrap(); + let eve_remote = repo.remote(&eve.id).unwrap(); + let eves_refs = eve_remote.refs; + + assert_ne!(eves_refs, old_refs); + assert_eq!(eves_refs_expected, eves_refs); +}