upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2024-07-31 14:23:55 +0100
committerDanConwayDev <DanConwayDev@protonmail.com>2024-07-31 14:23:55 +0100
commit46116e561fb62ad939c53e937461f2346022565d (patch)
treef6adffb00e0b534939fca614f73415c9be328b8e
parenta1652dc1ef2ba58c90eecdaa2cf10d150825874a (diff)
test(remote): `push` deletes branch
on the git server and in local remote refs
-rw-r--r--tests/git_remote_helper.rs173
1 files changed, 172 insertions, 1 deletions
diff --git a/tests/git_remote_helper.rs b/tests/git_remote_helper.rs
index 7b81609..a575b58 100644
--- a/tests/git_remote_helper.rs
+++ b/tests/git_remote_helper.rs
@@ -253,7 +253,7 @@ mod push {
253 253
254 use super::*; 254 use super::*;
255 255
256 mod two_branches_in_batch { 256 mod two_branches_in_batch_one_added_one_updated {
257 257
258 use super::*; 258 use super::*;
259 259
@@ -430,4 +430,175 @@ mod push {
430 } 430 }
431 } 431 }
432 } 432 }
433 mod delete_one_branch {
434
435 use super::*;
436
437 mod git_server_updated {
438
439 use super::*;
440
441 async fn async_run_test() -> Result<()> {
442 let git_repo = prep_git_repo()?;
443
444 git_repo.create_branch("vnext")?;
445 git_repo.checkout("vnext")?;
446 std::fs::write(git_repo.dir.join("vnext.md"), "some content")?;
447 let vnext_commit_id = git_repo.stage_and_commit("vnext.md")?;
448
449 let source_git_repo = GitTestRepo::recreate_as_bare(&git_repo)?;
450
451 let events = vec![
452 generate_test_key_1_metadata_event("fred"),
453 generate_test_key_1_relay_list_event(),
454 generate_repo_ref_event_with_git_server(source_git_repo.dir.to_str().unwrap()),
455 ];
456 // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57)
457 let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = (
458 Relay::new(8051, None, None),
459 Relay::new(8052, None, None),
460 Relay::new(8053, None, None),
461 Relay::new(8055, None, None),
462 Relay::new(8056, None, None),
463 Relay::new(8057, None, None),
464 );
465 r51.events = events.clone();
466 r55.events = events;
467
468 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
469 assert_eq!(
470 source_git_repo
471 .git_repo
472 .find_reference("refs/heads/vnext")?
473 .peel_to_commit()?
474 .id(),
475 vnext_commit_id
476 );
477
478 let mut p = cli_tester_after_fetch(&git_repo)?;
479 p.send_line("push :refs/heads/vnext")?;
480 p.send_line("")?;
481 p.expect("ok refs/heads/vnext\r\n")?;
482 p.expect("\r\n")?;
483
484 assert!(
485 source_git_repo
486 .git_repo
487 .find_reference("refs/heads/vnext")
488 .is_err()
489 );
490 // p.exit()?;
491 for p in [51, 52, 53, 55, 56, 57] {
492 relay::shutdown_relay(8000 + p)?;
493 }
494 Ok(())
495 });
496 // launch relays
497 let _ = join!(
498 r51.listen_until_close(),
499 r52.listen_until_close(),
500 r53.listen_until_close(),
501 r55.listen_until_close(),
502 r56.listen_until_close(),
503 r57.listen_until_close(),
504 );
505 cli_tester_handle.join().unwrap()?;
506 Ok(())
507 }
508
509 #[tokio::test]
510 #[serial]
511 async fn push_deletes_branch_on_git_server() -> Result<()> {
512 async_run_test().await
513 }
514 }
515 mod remote_refs_updated {
516
517 use super::*;
518
519 async fn async_run_test() -> Result<()> {
520 let git_repo = prep_git_repo()?;
521
522 git_repo.create_branch("vnext")?;
523 git_repo.checkout("vnext")?;
524 std::fs::write(git_repo.dir.join("vnext.md"), "some content")?;
525 let vnext_commit_id = git_repo.stage_and_commit("vnext.md")?;
526
527 let source_git_repo = GitTestRepo::recreate_as_bare(&git_repo)?;
528
529 git_repo.git_repo.reference(
530 "refs/remotes/nostr/vnext",
531 vnext_commit_id,
532 true,
533 "",
534 )?;
535
536 let events = vec![
537 generate_test_key_1_metadata_event("fred"),
538 generate_test_key_1_relay_list_event(),
539 generate_repo_ref_event_with_git_server(source_git_repo.dir.to_str().unwrap()),
540 ];
541 // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57)
542 let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = (
543 Relay::new(8051, None, None),
544 Relay::new(8052, None, None),
545 Relay::new(8053, None, None),
546 Relay::new(8055, None, None),
547 Relay::new(8056, None, None),
548 Relay::new(8057, None, None),
549 );
550 r51.events = events.clone();
551 r55.events = events;
552
553 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
554 assert_eq!(
555 git_repo
556 .git_repo
557 .find_reference("refs/remotes/nostr/vnext")?
558 .peel_to_commit()?
559 .id(),
560 vnext_commit_id
561 );
562
563 let mut p = cli_tester_after_fetch(&git_repo)?;
564 p.send_line("push :refs/heads/vnext")?;
565 p.send_line("")?;
566 // let res = p.expect_eventually("\r\n\r\n")?;
567 // println!("{res}");
568 p.expect("ok refs/heads/vnext\r\n")?;
569 p.expect("\r\n")?;
570
571 assert!(
572 git_repo
573 .git_repo
574 .find_reference("refs/remotes/nostr/vnext")
575 .is_err()
576 );
577
578 p.exit()?;
579 for p in [51, 52, 53, 55, 56, 57] {
580 relay::shutdown_relay(8000 + p)?;
581 }
582 Ok(())
583 });
584 // launch relays
585 let _ = join!(
586 r51.listen_until_close(),
587 r52.listen_until_close(),
588 r53.listen_until_close(),
589 r55.listen_until_close(),
590 r56.listen_until_close(),
591 r57.listen_until_close(),
592 );
593 cli_tester_handle.join().unwrap()?;
594 Ok(())
595 }
596
597 #[tokio::test]
598 #[serial]
599 async fn push_remotes_refs() -> Result<()> {
600 async_run_test().await
601 }
602 }
603 }
433} 604}