diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2024-07-31 15:59:17 +0100 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2024-07-31 15:59:17 +0100 |
| commit | 3acdeabfc3ab55d3e92d76d92d8ab6ad0383dd09 (patch) | |
| tree | b5abbca08ec004d31569db9166c37166c39baef2 /tests/git_remote_helper.rs | |
| parent | 46116e561fb62ad939c53e937461f2346022565d (diff) | |
feat(remote): `push` issues state event
if no previous state events can be found it replicates git server
otherwise it just updates pushed value
Diffstat (limited to 'tests/git_remote_helper.rs')
| -rw-r--r-- | tests/git_remote_helper.rs | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/tests/git_remote_helper.rs b/tests/git_remote_helper.rs index a575b58..ea76445 100644 --- a/tests/git_remote_helper.rs +++ b/tests/git_remote_helper.rs | |||
| @@ -9,6 +9,7 @@ use serial_test::serial; | |||
| 9 | use test_utils::{git::GitTestRepo, *}; | 9 | use test_utils::{git::GitTestRepo, *}; |
| 10 | 10 | ||
| 11 | static NOSTR_REMOTE_NAME: &str = "nostr"; | 11 | static NOSTR_REMOTE_NAME: &str = "nostr"; |
| 12 | static STATE_KIND: nostr::Kind = Kind::Custom(30618); | ||
| 12 | 13 | ||
| 13 | fn get_nostr_remote_url() -> Result<String> { | 14 | fn get_nostr_remote_url() -> Result<String> { |
| 14 | let repo_event = generate_repo_ref_event(); | 15 | let repo_event = generate_repo_ref_event(); |
| @@ -429,6 +430,104 @@ mod push { | |||
| 429 | async_run_test().await | 430 | async_run_test().await |
| 430 | } | 431 | } |
| 431 | } | 432 | } |
| 433 | mod no_existing_state_event { | ||
| 434 | use super::*; | ||
| 435 | |||
| 436 | mod state_on_git_server_published_in_nostr_state_event { | ||
| 437 | |||
| 438 | use super::*; | ||
| 439 | |||
| 440 | async fn async_run_test() -> Result<()> { | ||
| 441 | let git_repo = prep_git_repo()?; | ||
| 442 | let source_git_repo = GitTestRepo::recreate_as_bare(&git_repo)?; | ||
| 443 | |||
| 444 | std::fs::write(git_repo.dir.join("commit.md"), "some content")?; | ||
| 445 | let main_commit_id = git_repo.stage_and_commit("commit.md")?; | ||
| 446 | |||
| 447 | git_repo.create_branch("vnext")?; | ||
| 448 | git_repo.checkout("vnext")?; | ||
| 449 | std::fs::write(git_repo.dir.join("vnext.md"), "some content")?; | ||
| 450 | let vnext_commit_id = git_repo.stage_and_commit("vnext.md")?; | ||
| 451 | |||
| 452 | let events = vec![ | ||
| 453 | generate_test_key_1_metadata_event("fred"), | ||
| 454 | generate_test_key_1_relay_list_event(), | ||
| 455 | generate_repo_ref_event_with_git_server( | ||
| 456 | source_git_repo.dir.to_str().unwrap(), | ||
| 457 | ), | ||
| 458 | ]; | ||
| 459 | // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57) | ||
| 460 | let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = ( | ||
| 461 | Relay::new(8051, None, None), | ||
| 462 | Relay::new(8052, None, None), | ||
| 463 | Relay::new(8053, None, None), | ||
| 464 | Relay::new(8055, None, None), | ||
| 465 | Relay::new(8056, None, None), | ||
| 466 | Relay::new(8057, None, None), | ||
| 467 | ); | ||
| 468 | r51.events = events.clone(); | ||
| 469 | r55.events = events; | ||
| 470 | |||
| 471 | let cli_tester_handle = std::thread::spawn(move || -> Result<()> { | ||
| 472 | let mut p = cli_tester_after_fetch(&git_repo)?; | ||
| 473 | p.send_line("push refs/heads/main:refs/heads/main")?; | ||
| 474 | p.send_line("push refs/heads/vnext:refs/heads/vnext")?; | ||
| 475 | p.send_line("")?; | ||
| 476 | p.expect("ok refs/heads/main\r\n")?; | ||
| 477 | p.expect("ok refs/heads/vnext\r\n")?; | ||
| 478 | p.expect("\r\n")?; | ||
| 479 | |||
| 480 | p.exit()?; | ||
| 481 | for p in [51, 52, 53, 55, 56, 57] { | ||
| 482 | relay::shutdown_relay(8000 + p)?; | ||
| 483 | } | ||
| 484 | Ok(()) | ||
| 485 | }); | ||
| 486 | // launch relays | ||
| 487 | let _ = join!( | ||
| 488 | r51.listen_until_close(), | ||
| 489 | r52.listen_until_close(), | ||
| 490 | r53.listen_until_close(), | ||
| 491 | r55.listen_until_close(), | ||
| 492 | r56.listen_until_close(), | ||
| 493 | r57.listen_until_close(), | ||
| 494 | ); | ||
| 495 | cli_tester_handle.join().unwrap()?; | ||
| 496 | |||
| 497 | let state_event = r56 | ||
| 498 | .events | ||
| 499 | .iter() | ||
| 500 | .find(|e| e.kind().eq(&STATE_KIND)) | ||
| 501 | .context("state event not created")?; | ||
| 502 | |||
| 503 | assert_eq!( | ||
| 504 | state_event.identifier(), | ||
| 505 | generate_repo_ref_event().identifier(), | ||
| 506 | ); | ||
| 507 | // println!("{:#?}", state_event); | ||
| 508 | assert_eq!( | ||
| 509 | state_event | ||
| 510 | .tags | ||
| 511 | .iter() | ||
| 512 | .filter(|t| t.kind().to_string().as_str().ne("d")) | ||
| 513 | .map(|t| t.as_vec().to_vec()) | ||
| 514 | .collect::<HashSet<Vec<String>>>(), | ||
| 515 | HashSet::from([ | ||
| 516 | vec!["HEAD".to_string(), "ref: refs/heads/main".to_string()], | ||
| 517 | vec!["refs/heads/main".to_string(), main_commit_id.to_string()], | ||
| 518 | vec!["refs/heads/vnext".to_string(), vnext_commit_id.to_string()], | ||
| 519 | ]), | ||
| 520 | ); | ||
| 521 | Ok(()) | ||
| 522 | } | ||
| 523 | |||
| 524 | #[tokio::test] | ||
| 525 | #[serial] | ||
| 526 | async fn sate_event_reflects_git_server_state() -> Result<()> { | ||
| 527 | async_run_test().await | ||
| 528 | } | ||
| 529 | } | ||
| 530 | } | ||
| 432 | } | 531 | } |
| 433 | mod delete_one_branch { | 532 | mod delete_one_branch { |
| 434 | 533 | ||