Skip to content

Commit e4d109b

Browse files
committed
Seeds: Add tests
1 parent 9ddd36b commit e4d109b

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

src/core/test.rs

+71
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,77 @@ 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) =
294+
Wormhole::connect_without_code(transfer::APP_CONFIG.id(TEST_APPID), 2, Some(seed_ability))
295+
.await?;
296+
code_tx.send(welcome.code).unwrap();
297+
let mut wormhole = connector.await?;
298+
let seed = wormhole.take_seed();
299+
wormhole.close().await?;
300+
eyre::Result::<_>::Ok(seed)
301+
})?;
302+
let seed_2 = async_std::task::Builder::new()
303+
.name("follower".to_owned())
304+
.spawn(async {
305+
let code = code_rx.await?;
306+
let (_welcome, mut wormhole) =
307+
Wormhole::connect_with_code(transfer::APP_CONFIG.id(TEST_APPID), code, Some(seed_ability2))
308+
.await?;
309+
let seed = wormhole.take_seed();
310+
wormhole.close().await?;
311+
eyre::Result::<_>::Ok(seed)
312+
})?;
313+
314+
let seed_1 = seed_1.await?.expect("Seed must be Some");
315+
let seed_2 = seed_2.await?.expect("Seed must be Some");
316+
317+
assert_eq!(seed_1.session_seed.seed, seed_2.session_seed.seed);
318+
assert_eq!(seed_1.session_seed.display_names, seed_2.session_seed.display_names);
319+
assert_eq!(seed_1.existing_seeds, seed_2.existing_seeds);
320+
321+
/* Resume the seed */
322+
323+
let task_1 = async_std::task::Builder::new()
324+
.name("leader".to_owned())
325+
.spawn(async move {
326+
let wormhole =
327+
Wormhole::connect_with_seed(transfer::APP_CONFIG.id(TEST_APPID), seed_1.session_seed.seed).await?;
328+
wormhole.close().await?;
329+
eyre::Result::<_>::Ok(())
330+
})?;
331+
let task_2 = async_std::task::Builder::new()
332+
.name("follower".to_owned())
333+
.spawn(async move {
334+
let wormhole =
335+
Wormhole::connect_with_seed(transfer::APP_CONFIG.id(TEST_APPID), seed_2.session_seed.seed).await?;
336+
wormhole.close().await?;
337+
eyre::Result::<_>::Ok(())
338+
})?;
339+
340+
task_1.await?;
341+
task_2.await?;
342+
343+
Ok(())
344+
}
345+
275346
#[test]
276347
fn test_phase() {
277348
let p = Phase::PAKE;

0 commit comments

Comments
 (0)