upleb.uk

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

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test_utils/src/lib.rs8
-rw-r--r--tests/git_remote_helper.rs80
2 files changed, 74 insertions, 14 deletions
diff --git a/test_utils/src/lib.rs b/test_utils/src/lib.rs
index 7697e6f..7a2bf35 100644
--- a/test_utils/src/lib.rs
+++ b/test_utils/src/lib.rs
@@ -150,10 +150,10 @@ pub fn make_event_old_or_change_user(
150} 150}
151 151
152pub fn generate_repo_ref_event() -> nostr::Event { 152pub fn generate_repo_ref_event() -> nostr::Event {
153 generate_repo_ref_event_with_git_server("git:://123.gitexample.com/test".to_string()) 153 generate_repo_ref_event_with_git_server("git:://123.gitexample.com/test")
154} 154}
155 155
156pub fn generate_repo_ref_event_with_git_server(git_server: String) -> nostr::Event { 156pub fn generate_repo_ref_event_with_git_server(git_server: &str) -> nostr::Event {
157 // taken from test git_repo 157 // taken from test git_repo
158 // TODO - this may not be consistant across computers as it might take the 158 // TODO - this may not be consistant across computers as it might take the
159 // author and committer from global git config 159 // author and committer from global git config
@@ -171,7 +171,7 @@ pub fn generate_repo_ref_event_with_git_server(git_server: String) -> nostr::Eve
171 Tag::from_standardized(TagStandard::Description("example description".into())), 171 Tag::from_standardized(TagStandard::Description("example description".into())),
172 Tag::custom( 172 Tag::custom(
173 nostr::TagKind::Custom(std::borrow::Cow::Borrowed("clone")), 173 nostr::TagKind::Custom(std::borrow::Cow::Borrowed("clone")),
174 vec![git_server], 174 vec![git_server.to_string()],
175 ), 175 ),
176 Tag::custom( 176 Tag::custom(
177 nostr::TagKind::Custom(std::borrow::Cow::Borrowed("web")), 177 nostr::TagKind::Custom(std::borrow::Cow::Borrowed("web")),
@@ -887,7 +887,7 @@ impl CliTester {
887 self.expect_end() 887 self.expect_end()
888 } 888 }
889 889
890 fn send_line(&mut self, line: &str) -> Result<()> { 890 pub fn send_line(&mut self, line: &str) -> Result<()> {
891 self.rexpect_session 891 self.rexpect_session
892 .send_line(line) 892 .send_line(line)
893 .context("send_line failed")?; 893 .context("send_line failed")?;
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}