Skip to content

Commit f40d961

Browse files
committed
Seeds: Add tests
1 parent adbaef3 commit f40d961

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed

changelog.md

+5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
## Unreleased
44

5+
- Added a contact book and session resumption
6+
- If you send a file to somebody, a "seed" will be stored on both sides.
7+
- Afterwards, you can you `wormhole send --to <person>` and `wormhole receive --from <person>`
8+
- The secure connection will then be established without having to enter a code.
9+
510
## Version 0.3.0
611

712
- Added experimental port forwarding feature

src/core/test.rs

+86
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,92 @@ pub async fn test_crowded() -> eyre::Result<()> {
272272
Ok(())
273273
}
274274

275+
/** Generate a seed and then use it */
276+
#[async_std::test]
277+
pub async fn test_seeds() -> eyre::Result<()> {
278+
init_logger();
279+
280+
/* Generate the seed */
281+
282+
let seed_ability = magic_wormhole::SeedAbility::<false> {
283+
display_names: vec!["foo".into(), "bar".into()],
284+
known_seeds: [Default::default()].into_iter().collect(),
285+
};
286+
let seed_ability2 = seed_ability.clone();
287+
288+
let (code_tx, code_rx) = futures::channel::oneshot::channel();
289+
290+
let seed_1 = async_std::task::Builder::new()
291+
.name("leader".to_owned())
292+
.spawn(async {
293+
let (welcome, connector) = Wormhole::connect_without_code(
294+
transfer::APP_CONFIG.id(TEST_APPID),
295+
2,
296+
Some(seed_ability),
297+
)
298+
.await?;
299+
code_tx.send(welcome.code).unwrap();
300+
let mut wormhole = connector.await?;
301+
let seed = wormhole.take_seed();
302+
wormhole.close().await?;
303+
eyre::Result::<_>::Ok(seed)
304+
})?;
305+
let seed_2 = async_std::task::Builder::new()
306+
.name("follower".to_owned())
307+
.spawn(async {
308+
let code = code_rx.await?;
309+
let (_welcome, mut wormhole) = Wormhole::connect_with_code(
310+
transfer::APP_CONFIG.id(TEST_APPID),
311+
code,
312+
Some(seed_ability2),
313+
)
314+
.await?;
315+
let seed = wormhole.take_seed();
316+
wormhole.close().await?;
317+
eyre::Result::<_>::Ok(seed)
318+
})?;
319+
320+
let seed_1 = seed_1.await?.expect("Seed must be Some");
321+
let seed_2 = seed_2.await?.expect("Seed must be Some");
322+
323+
assert_eq!(seed_1.session_seed.seed, seed_2.session_seed.seed);
324+
assert_eq!(
325+
seed_1.session_seed.display_names,
326+
seed_2.session_seed.display_names
327+
);
328+
assert_eq!(seed_1.existing_seeds, seed_2.existing_seeds);
329+
330+
/* Resume the seed */
331+
332+
let task_1 = async_std::task::Builder::new()
333+
.name("leader".to_owned())
334+
.spawn(async move {
335+
let wormhole = Wormhole::connect_with_seed(
336+
transfer::APP_CONFIG.id(TEST_APPID),
337+
seed_1.session_seed.seed,
338+
)
339+
.await?;
340+
wormhole.close().await?;
341+
eyre::Result::<_>::Ok(())
342+
})?;
343+
let task_2 = async_std::task::Builder::new()
344+
.name("follower".to_owned())
345+
.spawn(async move {
346+
let wormhole = Wormhole::connect_with_seed(
347+
transfer::APP_CONFIG.id(TEST_APPID),
348+
seed_2.session_seed.seed,
349+
)
350+
.await?;
351+
wormhole.close().await?;
352+
eyre::Result::<_>::Ok(())
353+
})?;
354+
355+
task_1.await?;
356+
task_2.await?;
357+
358+
Ok(())
359+
}
360+
275361
#[test]
276362
fn test_phase() {
277363
let p = Phase::PAKE;

0 commit comments

Comments
 (0)