upleb.uk

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

summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/git_remote_helper.rs80
1 files changed, 70 insertions, 10 deletions
diff --git a/tests/git_remote_helper.rs b/tests/git_remote_helper.rs
index 9bbd10f..05ef442 100644
--- a/tests/git_remote_helper.rs
+++ b/tests/git_remote_helper.rs
@@ -50,31 +50,26 @@ fn cli_tester_after_fetch(git_repo: &GitTestRepo) -> Result<CliTester> {
50 50
51mod initially_runs_fetch { 51mod initially_runs_fetch {
52 52
53 use relay::ListenerReqFunc;
54
55 use super::*; 53 use super::*;
56 async fn async_run_test() -> Result<()> { 54 async fn async_run_test() -> Result<()> {
57 let source_git_repo = prep_git_repo()?; 55 let source_git_repo = prep_git_repo()?;
58 let source_git_url = format!("git://{}", source_git_repo.dir.to_str().unwrap());
59 let git_repo = prep_git_repo()?; 56 let git_repo = prep_git_repo()?;
60 let events = vec![ 57 let events = vec![
61 generate_test_key_1_metadata_event("fred"), 58 generate_test_key_1_metadata_event("fred"),
62 generate_test_key_1_relay_list_event(), 59 generate_test_key_1_relay_list_event(),
63 generate_repo_ref_event_with_git_server(source_git_url), 60 generate_repo_ref_event_with_git_server(source_git_repo.dir.to_str().unwrap()),
64 ]; 61 ];
65 let responder: ListenerReqFunc = &|relay, client_id, subscription_id, _| -> Result<()> {
66 relay.respond_events(client_id, &subscription_id, &events)?;
67 Ok(())
68 };
69 // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57) 62 // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57)
70 let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = ( 63 let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = (
71 Relay::new(8051, None, Some(&responder)), 64 Relay::new(8051, None, None),
72 Relay::new(8052, None, None), 65 Relay::new(8052, None, None),
73 Relay::new(8053, None, None), 66 Relay::new(8053, None, None),
74 Relay::new(8055, None, None), 67 Relay::new(8055, None, None),
75 Relay::new(8056, None, None), 68 Relay::new(8056, None, None),
76 Relay::new(8057, None, None), 69 Relay::new(8057, None, None),
77 ); 70 );
71 r51.events = events.clone();
72 r55.events = events;
78 73
79 // // check relay had the right number of events 74 // // check relay had the right number of events
80 let cli_tester_handle = std::thread::spawn(move || -> Result<()> { 75 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
@@ -86,7 +81,7 @@ mod initially_runs_fetch {
86 Ok(()) 81 Ok(())
87 }); 82 });
88 83
89 // launch relay 84 // launch relays
90 let _ = join!( 85 let _ = join!(
91 r51.listen_until_close(), 86 r51.listen_until_close(),
92 r52.listen_until_close(), 87 r52.listen_until_close(),
@@ -105,3 +100,68 @@ mod initially_runs_fetch {
105 async_run_test().await 100 async_run_test().await
106 } 101 }
107} 102}
103
104mod list {
105
106 use super::*;
107
108 async fn async_run_test() -> Result<()> {
109 let source_git_repo = prep_git_repo()?;
110 std::fs::write(source_git_repo.dir.join("commit.md"), "some content")?;
111 let main_commit_id = source_git_repo.stage_and_commit("commit.md")?;
112
113 let git_repo = prep_git_repo()?;
114 let events = vec![
115 generate_test_key_1_metadata_event("fred"),
116 generate_test_key_1_relay_list_event(),
117 generate_repo_ref_event_with_git_server(source_git_repo.dir.to_str().unwrap()),
118 ];
119 // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57)
120 let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = (
121 Relay::new(8051, None, None),
122 Relay::new(8052, None, None),
123 Relay::new(8053, None, None),
124 Relay::new(8055, None, None),
125 Relay::new(8056, None, None),
126 Relay::new(8057, None, None),
127 );
128 r51.events = events.clone();
129 r55.events = events;
130
131 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
132 let mut p = cli_tester_after_fetch(&git_repo)?;
133 p.send_line("list")?;
134 assert_eq!(
135 p.expect_eventually("\r\n\r\n")?
136 .split("\r\n")
137 .collect::<Vec<&str>>(),
138 vec![
139 &format!("{} HEAD", main_commit_id),
140 &format!("{} refs/heads/main", main_commit_id),
141 ],
142 );
143 p.exit()?;
144 for p in [51, 52, 53, 55, 56, 57] {
145 relay::shutdown_relay(8000 + p)?;
146 }
147 Ok(())
148 });
149 // launch relays
150 let _ = join!(
151 r51.listen_until_close(),
152 r52.listen_until_close(),
153 r53.listen_until_close(),
154 r55.listen_until_close(),
155 r56.listen_until_close(),
156 r57.listen_until_close(),
157 );
158 cli_tester_handle.join().unwrap()?;
159 Ok(())
160 }
161
162 #[tokio::test]
163 #[serial]
164 async fn lists_head_and_main_heads() -> Result<()> {
165 async_run_test().await
166 }
167}