diff options
Diffstat (limited to 'src/document')
| -rw-r--r-- | src/document/sync.rs | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/document/sync.rs b/src/document/sync.rs index 440718c..a7a466b 100644 --- a/src/document/sync.rs +++ b/src/document/sync.rs @@ -1707,6 +1707,23 @@ mod tests { let answer = b.generate(&theirs, now, bytes).expect("b answers"); b.send_succeeded(b.id()); a.receive(&mut ours, decode(&answer).unwrap()).unwrap(); + // The answer may not bring what we lack: Automerge's sync tells what each side has + // by a Bloom filter, whose false positives (about one in a hundred) take more + // rounds, each asking for what is still missing. + for _ in 0..4 { + if ours.get_heads() == theirs.get_heads() { + break; + } + let ask = a + .generate(&ours, now, bytes) + .expect("a asks for what it lacks"); + a.send_succeeded(a.id()); + b.receive(&mut theirs, decode(&ask).unwrap()).unwrap(); + if let Some(lacking) = b.generate(&theirs, now, bytes) { + b.send_succeeded(b.id()); + a.receive(&mut ours, decode(&lacking).unwrap()).unwrap(); + } + } assert_eq!(ours.get_heads(), theirs.get_heads()); } |
