diff options
Diffstat (limited to 'tests/git_remote_nostr/fetch.rs')
| -rw-r--r-- | tests/git_remote_nostr/fetch.rs | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/tests/git_remote_nostr/fetch.rs b/tests/git_remote_nostr/fetch.rs new file mode 100644 index 0000000..9ae17d8 --- /dev/null +++ b/tests/git_remote_nostr/fetch.rs | |||
| @@ -0,0 +1,195 @@ | |||
| 1 | |||
| 2 | use super::*; | ||
| 3 | |||
| 4 | #[tokio::test] | ||
| 5 | #[serial] | ||
| 6 | async fn fetch_downloads_speficied_commits_from_git_server() -> Result<()> { | ||
| 7 | let source_git_repo = prep_git_repo()?; | ||
| 8 | let source_path = source_git_repo.dir.to_str().unwrap().to_string(); | ||
| 9 | |||
| 10 | std::fs::write(source_git_repo.dir.join("commit.md"), "some content")?; | ||
| 11 | let main_commit_id = source_git_repo.stage_and_commit("commit.md")?; | ||
| 12 | |||
| 13 | source_git_repo.create_branch("vnext")?; | ||
| 14 | source_git_repo.checkout("vnext")?; | ||
| 15 | std::fs::write(source_git_repo.dir.join("vnext.md"), "some content")?; | ||
| 16 | let vnext_commit_id = source_git_repo.stage_and_commit("vnext.md")?; | ||
| 17 | |||
| 18 | let git_repo = prep_git_repo()?; | ||
| 19 | let events = vec![ | ||
| 20 | generate_test_key_1_metadata_event("fred"), | ||
| 21 | generate_test_key_1_relay_list_event(), | ||
| 22 | generate_repo_ref_event_with_git_server(vec![ | ||
| 23 | source_git_repo.dir.to_str().unwrap().to_string(), | ||
| 24 | ]), | ||
| 25 | ]; | ||
| 26 | // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57) | ||
| 27 | let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = ( | ||
| 28 | Relay::new(8051, None, None), | ||
| 29 | Relay::new(8052, None, None), | ||
| 30 | Relay::new(8053, None, None), | ||
| 31 | Relay::new(8055, None, None), | ||
| 32 | Relay::new(8056, None, None), | ||
| 33 | Relay::new(8057, None, None), | ||
| 34 | ); | ||
| 35 | r51.events = events.clone(); | ||
| 36 | r55.events = events; | ||
| 37 | |||
| 38 | let cli_tester_handle = std::thread::spawn(move || -> Result<()> { | ||
| 39 | assert!(git_repo.git_repo.find_commit(main_commit_id).is_err()); | ||
| 40 | assert!(git_repo.git_repo.find_commit(vnext_commit_id).is_err()); | ||
| 41 | |||
| 42 | let mut p = cli_tester_after_fetch(&git_repo)?; | ||
| 43 | p.send_line(format!("fetch {main_commit_id} main").as_str())?; | ||
| 44 | p.send_line(format!("fetch {vnext_commit_id} vnext").as_str())?; | ||
| 45 | p.send_line("")?; | ||
| 46 | p.expect(format!("fetching over filesystem from {source_path}...\r\n").as_str())?; | ||
| 47 | p.expect_eventually_and_print("\r\n")?; | ||
| 48 | |||
| 49 | assert!(git_repo.git_repo.find_commit(main_commit_id).is_ok()); | ||
| 50 | assert!(git_repo.git_repo.find_commit(vnext_commit_id).is_ok()); | ||
| 51 | |||
| 52 | p.exit()?; | ||
| 53 | for p in [51, 52, 53, 55, 56, 57] { | ||
| 54 | relay::shutdown_relay(8000 + p)?; | ||
| 55 | } | ||
| 56 | Ok(()) | ||
| 57 | }); | ||
| 58 | // launch relays | ||
| 59 | let _ = join!( | ||
| 60 | r51.listen_until_close(), | ||
| 61 | r52.listen_until_close(), | ||
| 62 | r53.listen_until_close(), | ||
| 63 | r55.listen_until_close(), | ||
| 64 | r56.listen_until_close(), | ||
| 65 | r57.listen_until_close(), | ||
| 66 | ); | ||
| 67 | cli_tester_handle.join().unwrap()?; | ||
| 68 | Ok(()) | ||
| 69 | } | ||
| 70 | |||
| 71 | mod when_first_git_server_fails_ { | ||
| 72 | use super::*; | ||
| 73 | |||
| 74 | #[tokio::test] | ||
| 75 | #[serial] | ||
| 76 | async fn fetch_downloads_speficied_commits_from_second_git_server() -> Result<()> { | ||
| 77 | let (state_event, source_git_repo) = generate_repo_with_state_event().await?; | ||
| 78 | // let source_path = source_git_repo.dir.to_str().unwrap().to_string(); | ||
| 79 | let error_path = "./path-doesnt-exist".to_string(); | ||
| 80 | |||
| 81 | let main_commit_id = source_git_repo.get_tip_of_local_branch("main")?; | ||
| 82 | |||
| 83 | let git_repo = prep_git_repo_minus_1_commit()?; | ||
| 84 | |||
| 85 | let events = vec![ | ||
| 86 | generate_test_key_1_metadata_event("fred"), | ||
| 87 | generate_test_key_1_relay_list_event(), | ||
| 88 | generate_repo_ref_event_with_git_server(vec![ | ||
| 89 | error_path.to_string(), | ||
| 90 | source_git_repo.dir.to_str().unwrap().to_string(), | ||
| 91 | ]), | ||
| 92 | state_event, | ||
| 93 | ]; | ||
| 94 | // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57) | ||
| 95 | let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = ( | ||
| 96 | Relay::new(8051, None, None), | ||
| 97 | Relay::new(8052, None, None), | ||
| 98 | Relay::new(8053, None, None), | ||
| 99 | Relay::new(8055, None, None), | ||
| 100 | Relay::new(8056, None, None), | ||
| 101 | Relay::new(8057, None, None), | ||
| 102 | ); | ||
| 103 | r51.events = events.clone(); | ||
| 104 | r55.events = events; | ||
| 105 | |||
| 106 | let cli_tester_handle = std::thread::spawn(move || -> Result<()> { | ||
| 107 | assert!(git_repo.git_repo.find_commit(main_commit_id).is_err()); | ||
| 108 | |||
| 109 | let mut p = cli_tester_after_fetch(&git_repo)?; | ||
| 110 | p.send_line(format!("fetch {main_commit_id} main").as_str())?; | ||
| 111 | p.send_line("")?; | ||
| 112 | p.expect(format!("fetching over filesystem from {error_path}...\r\n").as_str())?; | ||
| 113 | // not sure why the below isn't appearing | ||
| 114 | // p.expect(format!("fetching over filesystem from | ||
| 115 | // {source_path}...\r\n").as_str())?; | ||
| 116 | p.expect_eventually_and_print("\r\n")?; | ||
| 117 | // p.expect("\r\n")?; | ||
| 118 | |||
| 119 | assert!(git_repo.git_repo.find_commit(main_commit_id).is_ok()); | ||
| 120 | |||
| 121 | p.exit()?; | ||
| 122 | for p in [51, 52, 53, 55, 56, 57] { | ||
| 123 | relay::shutdown_relay(8000 + p)?; | ||
| 124 | } | ||
| 125 | Ok(()) | ||
| 126 | }); | ||
| 127 | // launch relays | ||
| 128 | let _ = join!( | ||
| 129 | r51.listen_until_close(), | ||
| 130 | r52.listen_until_close(), | ||
| 131 | r53.listen_until_close(), | ||
| 132 | r55.listen_until_close(), | ||
| 133 | r56.listen_until_close(), | ||
| 134 | r57.listen_until_close(), | ||
| 135 | ); | ||
| 136 | cli_tester_handle.join().unwrap()?; | ||
| 137 | Ok(()) | ||
| 138 | } | ||
| 139 | } | ||
| 140 | |||
| 141 | #[tokio::test] | ||
| 142 | #[serial] | ||
| 143 | async fn creates_commits_from_open_proposal_with_no_warngins_printed() -> Result<()> { | ||
| 144 | let (events, source_git_repo) = prep_source_repo_and_events_including_proposals().await?; | ||
| 145 | let source_path = source_git_repo.dir.to_str().unwrap().to_string(); | ||
| 146 | |||
| 147 | let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = ( | ||
| 148 | Relay::new(8051, None, None), | ||
| 149 | Relay::new(8052, None, None), | ||
| 150 | Relay::new(8053, None, None), | ||
| 151 | Relay::new(8055, None, None), | ||
| 152 | Relay::new(8056, None, None), | ||
| 153 | Relay::new(8057, None, None), | ||
| 154 | ); | ||
| 155 | r51.events = events.clone(); | ||
| 156 | r55.events = events.clone(); | ||
| 157 | |||
| 158 | let git_repo = prep_git_repo()?; | ||
| 159 | |||
| 160 | let cli_tester_handle = std::thread::spawn(move || -> Result<()> { | ||
| 161 | let branch_name = get_proposal_branch_name_from_events(&events, FEATURE_BRANCH_NAME_1)?; | ||
| 162 | let proposal_tip = cli_tester_create_proposal_branches_ready_to_send()? | ||
| 163 | .get_tip_of_local_branch(FEATURE_BRANCH_NAME_1)?; | ||
| 164 | |||
| 165 | assert!(git_repo.git_repo.find_commit(proposal_tip).is_err()); | ||
| 166 | |||
| 167 | let mut p = cli_tester_after_fetch(&git_repo)?; | ||
| 168 | p.send_line(format!("fetch {proposal_tip} refs/heads/{branch_name}").as_str())?; | ||
| 169 | p.send_line("")?; | ||
| 170 | p.expect(format!("fetching over filesystem from {source_path}...\r\n").as_str())?; | ||
| 171 | // expect no errors | ||
| 172 | p.expect_after_whitespace("\r\n")?; | ||
| 173 | p.exit()?; | ||
| 174 | for p in [51, 52, 53, 55, 56, 57] { | ||
| 175 | relay::shutdown_relay(8000 + p)?; | ||
| 176 | } | ||
| 177 | |||
| 178 | assert!(git_repo.git_repo.find_commit(proposal_tip).is_ok()); | ||
| 179 | |||
| 180 | Ok(()) | ||
| 181 | }); | ||
| 182 | // launch relays | ||
| 183 | let _ = join!( | ||
| 184 | r51.listen_until_close(), | ||
| 185 | r52.listen_until_close(), | ||
| 186 | r53.listen_until_close(), | ||
| 187 | r55.listen_until_close(), | ||
| 188 | r56.listen_until_close(), | ||
| 189 | r57.listen_until_close(), | ||
| 190 | ); | ||
| 191 | |||
| 192 | cli_tester_handle.join().unwrap()?; | ||
| 193 | |||
| 194 | Ok(()) | ||
| 195 | } | ||