upleb.uk

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

summaryrefslogtreecommitdiff
path: root/tests/git_remote_helper.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/git_remote_helper.rs')
-rw-r--r--tests/git_remote_helper.rs93
1 files changed, 93 insertions, 0 deletions
diff --git a/tests/git_remote_helper.rs b/tests/git_remote_helper.rs
index ab29726..fced270 100644
--- a/tests/git_remote_helper.rs
+++ b/tests/git_remote_helper.rs
@@ -248,3 +248,96 @@ mod fetch {
248 async_run_test().await 248 async_run_test().await
249 } 249 }
250} 250}
251
252mod push {
253
254 use super::*;
255
256 mod two_branches_in_batch {
257
258 use super::*;
259
260 mod git_server_updated {
261
262 use super::*;
263
264 async fn async_run_test() -> Result<()> {
265 let git_repo = prep_git_repo()?;
266 let source_git_repo = GitTestRepo::recreate_as_bare(&git_repo)?;
267
268 std::fs::write(git_repo.dir.join("commit.md"), "some content")?;
269 let main_commit_id = git_repo.stage_and_commit("commit.md")?;
270
271 git_repo.create_branch("vnext")?;
272 git_repo.checkout("vnext")?;
273 std::fs::write(git_repo.dir.join("vnext.md"), "some content")?;
274 let vnext_commit_id = git_repo.stage_and_commit("vnext.md")?;
275
276 let events = vec![
277 generate_test_key_1_metadata_event("fred"),
278 generate_test_key_1_relay_list_event(),
279 generate_repo_ref_event_with_git_server(source_git_repo.dir.to_str().unwrap()),
280 ];
281 // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57)
282 let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = (
283 Relay::new(8051, None, None),
284 Relay::new(8052, None, None),
285 Relay::new(8053, None, None),
286 Relay::new(8055, None, None),
287 Relay::new(8056, None, None),
288 Relay::new(8057, None, None),
289 );
290 r51.events = events.clone();
291 r55.events = events;
292
293 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
294 assert_ne!(
295 source_git_repo.get_tip_of_local_branch("main")?,
296 main_commit_id
297 );
298
299 let mut p = cli_tester_after_fetch(&git_repo)?;
300 p.send_line("push refs/heads/main:refs/heads/main")?;
301 p.send_line("push refs/heads/vnext:refs/heads/vnext")?;
302 p.send_line("")?;
303 p.expect("ok refs/heads/main\r\n")?;
304 p.expect("ok refs/heads/vnext\r\n")?;
305 p.expect("\r\n")?;
306
307 assert_eq!(
308 source_git_repo.get_tip_of_local_branch("main")?,
309 main_commit_id
310 );
311
312 assert_eq!(
313 source_git_repo.get_tip_of_local_branch("vnext")?,
314 vnext_commit_id
315 );
316
317 p.exit()?;
318 for p in [51, 52, 53, 55, 56, 57] {
319 relay::shutdown_relay(8000 + p)?;
320 }
321 Ok(())
322 });
323 // launch relays
324 let _ = join!(
325 r51.listen_until_close(),
326 r52.listen_until_close(),
327 r53.listen_until_close(),
328 r55.listen_until_close(),
329 r56.listen_until_close(),
330 r57.listen_until_close(),
331 );
332 cli_tester_handle.join().unwrap()?;
333 Ok(())
334 }
335
336 #[tokio::test]
337 #[serial]
338 async fn push_updates_ref_on_git_server() -> Result<()> {
339 async_run_test().await
340 }
341 }
342 }
343}