diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2024-07-31 14:23:55 +0100 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2024-07-31 14:23:55 +0100 |
| commit | 46116e561fb62ad939c53e937461f2346022565d (patch) | |
| tree | f6adffb00e0b534939fca614f73415c9be328b8e /tests/git_remote_helper.rs | |
| parent | a1652dc1ef2ba58c90eecdaa2cf10d150825874a (diff) | |
test(remote): `push` deletes branch
on the git server and in local remote refs
Diffstat (limited to 'tests/git_remote_helper.rs')
| -rw-r--r-- | tests/git_remote_helper.rs | 173 |
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 | } |