upleb.uk

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

summaryrefslogtreecommitdiff
path: root/tests/claim.rs
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2023-12-12 00:00:00 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2023-12-12 00:00:00 +0000
commit3e52ecb609f8424cffb2e6398c599aa78224825a (patch)
tree5c199510c10e206d6c6801dbabdae9691c03341c /tests/claim.rs
parent6d3c9218d2d3320f5d7fb9b9ede8750e947b70e8 (diff)
feat(claim) create yaml add maintainers and relays
- create yaml file with maintainers and relays - add maintainers to repo event - add current user as maintainer - custom repo relays from cli argument - save git-server in repo event
Diffstat (limited to 'tests/claim.rs')
-rw-r--r--tests/claim.rs785
1 files changed, 556 insertions, 229 deletions
diff --git a/tests/claim.rs b/tests/claim.rs
index 61be68b..cd845f7 100644
--- a/tests/claim.rs
+++ b/tests/claim.rs
@@ -11,260 +11,509 @@ fn when_no_main_or_master_branch_return_error() -> Result<()> {
11 Ok(()) 11 Ok(())
12} 12}
13 13
14mod sends_repoistory_to_relays { 14fn expect_msgs_first(p: &mut CliTester) -> Result<()> {
15 use futures::join; 15 p.expect("searching for your details...\r\n")?;
16 use test_utils::relay::Relay; 16 p.expect("\r")?;
17 p.expect("logged in as fred\r\n")?;
18 // // p.expect("searching for existing claims on repository...\r\n")?;
19 p.expect("maintainers.yaml created. commit and push.\r\n")?;
20 p.expect("publishing repostory reference...\r\n")?;
21 Ok(())
22}
17 23
24mod when_repo_not_previously_claimed {
18 use super::*; 25 use super::*;
19 26
20 fn prep_git_repo() -> Result<GitTestRepo> { 27 mod when_repo_relays_specified_as_arguments {
21 let test_repo = GitTestRepo::default(); 28 use futures::join;
22 test_repo.populate()?; 29 use test_utils::relay::Relay;
23 Ok(test_repo)
24 }
25 30
26 fn cli_tester_claim(git_repo: &GitTestRepo) -> CliTester { 31 use super::*;
27 CliTester::new_from_dir(
28 &git_repo.dir,
29 [
30 "--nsec",
31 TEST_KEY_1_NSEC,
32 "--password",
33 TEST_PASSWORD,
34 "--disable-cli-spinners",
35 "claim",
36 "--title",
37 "example-name",
38 "--description",
39 "example-description",
40 ],
41 )
42 }
43 32
44 fn expect_msgs_first(p: &mut CliTester) -> Result<()> { 33 fn prep_git_repo() -> Result<GitTestRepo> {
45 p.expect("searching for your details...\r\n")?; 34 let test_repo = GitTestRepo::default();
46 p.expect("\r")?; 35 test_repo.populate()?;
47 p.expect("logged in as fred\r\n")?; 36 test_repo.add_remote("origin", "https://localhost:1000")?;
48 // // p.expect("searching for existing claims on repository...\r\n")?; 37 Ok(test_repo)
49 p.expect("publishing repostory reference...\r\n")?; 38 }
50 Ok(())
51 }
52 39
53 async fn prep_run_claim() -> Result<( 40 fn cli_tester_claim(git_repo: &GitTestRepo) -> CliTester {
54 Relay<'static>, 41 CliTester::new_from_dir(
55 Relay<'static>, 42 &git_repo.dir,
56 Relay<'static>, 43 [
57 Relay<'static>, 44 "--nsec",
58 Relay<'static>, 45 TEST_KEY_1_NSEC,
59 )> { 46 "--password",
60 let git_repo = prep_git_repo()?; 47 TEST_PASSWORD,
61 // fallback (51,52) user write (53, 55) repo (55, 56) 48 "--disable-cli-spinners",
62 let (mut r51, mut r52, mut r53, mut r55, mut r56) = ( 49 "claim",
63 Relay::new( 50 "--title",
64 8051, 51 "example-name",
65 None, 52 "--description",
66 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 53 "example-description",
67 relay.respond_events( 54 "--relays",
68 client_id, 55 "ws://localhost:8055",
69 &subscription_id, 56 "ws://localhost:8056",
70 &vec![ 57 ],
71 generate_test_key_1_metadata_event("fred"), 58 )
72 generate_test_key_1_relay_list_event(), 59 }
73 ], 60
74 )?; 61 async fn prep_run_claim() -> Result<(
62 Relay<'static>,
63 Relay<'static>,
64 Relay<'static>,
65 Relay<'static>,
66 Relay<'static>,
67 )> {
68 let git_repo = prep_git_repo()?;
69 // fallback (51,52) user write (53, 55) repo (55, 56)
70 let (mut r51, mut r52, mut r53, mut r55, mut r56) = (
71 Relay::new(
72 8051,
73 None,
74 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
75 relay.respond_events(
76 client_id,
77 &subscription_id,
78 &vec![
79 generate_test_key_1_metadata_event("fred"),
80 generate_test_key_1_relay_list_event(),
81 ],
82 )?;
83 Ok(())
84 }),
85 ),
86 Relay::new(8052, None, None),
87 Relay::new(8053, None, None),
88 Relay::new(8055, None, None),
89 Relay::new(8056, None, None),
90 );
91
92 // // check relay had the right number of events
93 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
94 let mut p = cli_tester_claim(&git_repo);
95 p.expect_end_eventually()?;
96 for p in [51, 52, 53, 55, 56] {
97 relay::shutdown_relay(8000 + p)?;
98 }
99 Ok(())
100 });
101
102 // launch relay
103 let _ = join!(
104 r51.listen_until_close(),
105 r52.listen_until_close(),
106 r53.listen_until_close(),
107 r55.listen_until_close(),
108 r56.listen_until_close(),
109 );
110 cli_tester_handle.join().unwrap()?;
111 Ok((r51, r52, r53, r55, r56))
112 }
113
114 mod sent_to_correct_relays {
115 use super::*;
116
117 #[test]
118 #[serial]
119 fn only_1_repository_kind_event_sent_to_user_relays() -> Result<()> {
120 let (_, _, r53, r55, _) = futures::executor::block_on(prep_run_claim())?;
121 for relay in [&r53, &r55] {
122 assert_eq!(
123 relay
124 .events
125 .iter()
126 .filter(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
127 .count(),
128 1,
129 );
130 }
131 Ok(())
132 }
133
134 #[test]
135 #[serial]
136 fn only_1_repository_kind_event_sent_to_specified_repo_relays() -> Result<()> {
137 let (_, _, _, r55, r56) = futures::executor::block_on(prep_run_claim())?;
138 for relay in [&r55, &r56] {
139 assert_eq!(
140 relay
141 .events
142 .iter()
143 .filter(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
144 .count(),
145 1,
146 );
147 }
148 Ok(())
149 }
150
151 #[test]
152 #[serial]
153 fn event_not_sent_to_fallback_relay() -> Result<()> {
154 let (r51, r52, _, _, _) = futures::executor::block_on(prep_run_claim())?;
155 for relay in [&r51, &r52] {
156 assert_eq!(
157 relay
158 .events
159 .iter()
160 .filter(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
161 .count(),
162 0,
163 );
164 }
165 Ok(())
166 }
167 }
168
169 mod yaml_file {
170 use std::{fs, io::Read};
171
172 use super::*;
173
174 async fn async_run_test() -> Result<()> {
175 let git_repo = prep_git_repo()?;
176 // fallback (51,52) user write (53, 55) repo (55, 56)
177 let (mut r51, mut r52, mut r53, mut r55, mut r56) = (
178 Relay::new(
179 8051,
180 None,
181 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
182 relay.respond_events(
183 client_id,
184 &subscription_id,
185 &vec![
186 generate_test_key_1_metadata_event("fred"),
187 generate_test_key_1_relay_list_event(),
188 ],
189 )?;
190 Ok(())
191 }),
192 ),
193 Relay::new(8052, None, None),
194 Relay::new(8053, None, None),
195 Relay::new(8055, None, None),
196 Relay::new(8056, None, None),
197 );
198
199 // // check relay had the right number of events
200 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
201 let mut p = cli_tester_claim(&git_repo);
202 p.expect_end_eventually()?;
203
204 let yaml_path = git_repo.dir.join("maintainers.yaml");
205
206 assert!(yaml_path.exists());
207
208 let mut file = fs::File::open(yaml_path).expect("no such file");
209 let mut file_contents = "".to_string();
210 let _ = file.read_to_string(&mut file_contents);
211 assert_eq!(
212 file_contents,
213 format!(
214 "\
215 maintainers:\n\
216 - {TEST_KEY_1_NPUB}\n\
217 relays:\n\
218 - ws://localhost:8055\n\
219 - ws://localhost:8056\n\
220 "
221 ),
222 );
223 for p in [51, 52, 53, 55, 56] {
224 relay::shutdown_relay(8000 + p)?;
225 }
75 Ok(()) 226 Ok(())
76 }), 227 });
77 ), 228
78 Relay::new(8052, None, None), 229 // launch relay
79 Relay::new(8053, None, None), 230 let _ = join!(
80 Relay::new(8055, None, None), 231 r51.listen_until_close(),
81 Relay::new(8056, None, None), 232 r52.listen_until_close(),
82 ); 233 r53.listen_until_close(),
83 234 r55.listen_until_close(),
84 // // check relay had the right number of events 235 r56.listen_until_close(),
85 let cli_tester_handle = std::thread::spawn(move || -> Result<()> { 236 );
86 let mut p = cli_tester_claim(&git_repo); 237 cli_tester_handle.join().unwrap()?;
87 p.expect_end_eventually()?; 238 Ok(())
88 for p in [51, 52, 53, 55, 56] {
89 relay::shutdown_relay(8000 + p)?;
90 } 239 }
91 Ok(())
92 });
93
94 // launch relay
95 let _ = join!(
96 r51.listen_until_close(),
97 r52.listen_until_close(),
98 r53.listen_until_close(),
99 r55.listen_until_close(),
100 r56.listen_until_close(),
101 );
102 cli_tester_handle.join().unwrap()?;
103 Ok((r51, r52, r53, r55, r56))
104 }
105 240
106 mod sent_to_correct_relays { 241 #[test]
107 use super::*; 242 #[serial]
243 fn contains_maintainers_and_relays() -> Result<()> {
244 futures::executor::block_on(async_run_test())?;
245 Ok(())
246 }
247 }
248
249 mod tags {
250 use super::*;
108 251
109 #[test] 252 #[test]
110 #[serial] 253 #[serial]
111 fn only_1_repository_kind_event_sent_to_user_relays() -> Result<()> { 254 fn root_commit_as_d_replaceable_event_identifier() -> Result<()> {
112 let (_, _, r53, r55, _) = futures::executor::block_on(prep_run_claim())?; 255 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_claim())?;
113 for relay in [&r53, &r55] { 256 for relay in [&r53, &r55, &r56] {
114 assert_eq!( 257 let event: &nostr::Event = relay
115 relay
116 .events 258 .events
117 .iter() 259 .iter()
118 .filter(|e| e.kind.as_u64().eq(&REPOSITORY_KIND)) 260 .find(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
119 .count(), 261 .unwrap();
120 1, 262
121 ); 263 assert!(event.tags.iter().any(|t| t.as_vec()[0].eq("d")
264 && t.as_vec()[1].eq("9ee507fc4357d7ee16a5d8901bedcd103f23c17d")));
265 }
266 Ok(())
122 } 267 }
123 Ok(())
124 }
125 268
126 #[test] 269 #[test]
127 #[serial] 270 #[serial]
128 fn only_1_repository_kind_event_sent_to_repo_relays() -> Result<()> { 271 fn root_commit_as_reference() -> Result<()> {
129 let (_, _, _, r55, r56) = futures::executor::block_on(prep_run_claim())?; 272 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_claim())?;
130 for relay in [&r55, &r56] { 273 for relay in [&r53, &r55, &r56] {
131 assert_eq!( 274 let event: &nostr::Event = relay
132 relay
133 .events 275 .events
134 .iter() 276 .iter()
135 .filter(|e| e.kind.as_u64().eq(&REPOSITORY_KIND)) 277 .find(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
136 .count(), 278 .unwrap();
137 1, 279
138 ); 280 // root commit 'r' tag with 'r-' prefix
281 assert!(event.tags.iter().any(|t| t.as_vec()[0].eq("r")
282 && t.as_vec()[1].eq("r-9ee507fc4357d7ee16a5d8901bedcd103f23c17d")));
283 }
284 Ok(())
139 } 285 }
140 Ok(())
141 }
142 286
143 #[test] 287 #[test]
144 #[serial] 288 #[serial]
145 fn event_not_sent_to_fallback_relay() -> Result<()> { 289 fn name() -> Result<()> {
146 let (r51, r52, _, _, _) = futures::executor::block_on(prep_run_claim())?; 290 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_claim())?;
147 for relay in [&r51, &r52] { 291 for relay in [&r53, &r55, &r56] {
148 assert_eq!( 292 let event: &nostr::Event = relay
149 relay
150 .events 293 .events
151 .iter() 294 .iter()
152 .filter(|e| e.kind.as_u64().eq(&REPOSITORY_KIND)) 295 .find(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
153 .count(), 296 .unwrap();
154 0, 297
155 ); 298 assert!(
299 event
300 .tags
301 .iter()
302 .any(|t| t.as_vec()[0].eq("name") && t.as_vec()[1].eq("example-name"))
303 );
304 }
305 Ok(())
156 } 306 }
157 Ok(())
158 }
159 }
160 307
161 mod tags { 308 #[test]
162 use super::*; 309 #[serial]
310 fn description() -> Result<()> {
311 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_claim())?;
312 for relay in [&r53, &r55, &r56] {
313 let event: &nostr::Event = relay
314 .events
315 .iter()
316 .find(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
317 .unwrap();
163 318
164 #[test] 319 assert!(event.tags.iter().any(|t| t.as_vec()[0].eq("description")
165 #[serial] 320 && t.as_vec()[1].eq("example-description")));
166 fn root_commit_as_d_replaceable_event_identifier() -> Result<()> { 321 }
167 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_claim())?; 322 Ok(())
168 for relay in [&r53, &r55, &r56] {
169 let event: &nostr::Event = relay
170 .events
171 .iter()
172 .find(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
173 .unwrap();
174
175 assert!(event.tags.iter().any(|t| t.as_vec()[0].eq("d")
176 && t.as_vec()[1].eq("9ee507fc4357d7ee16a5d8901bedcd103f23c17d")));
177 } 323 }
178 Ok(())
179 }
180 324
181 #[test] 325 #[test]
182 #[serial] 326 #[serial]
183 fn root_commit_as_reference() -> Result<()> { 327 fn git_server() -> Result<()> {
184 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_claim())?; 328 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_claim())?;
185 for relay in [&r53, &r55, &r56] { 329 for relay in [&r53, &r55, &r56] {
186 let event: &nostr::Event = relay 330 let event: &nostr::Event = relay
187 .events 331 .events
188 .iter() 332 .iter()
189 .find(|e| e.kind.as_u64().eq(&REPOSITORY_KIND)) 333 .find(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
190 .unwrap(); 334 .unwrap();
191 335
192 // root commit 'r' tag with 'r-' prefix 336 assert!(event.tags.iter().any(|t| t.as_vec()[0].eq("git-server")
193 assert!(event.tags.iter().any(|t| t.as_vec()[0].eq("r") 337 && t.as_vec()[1].eq("https://localhost:1000")));
194 && t.as_vec()[1].eq("r-9ee507fc4357d7ee16a5d8901bedcd103f23c17d"))); 338 }
339 Ok(())
340 }
341
342 #[test]
343 #[serial]
344 fn git_server_as_reference() -> Result<()> {
345 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_claim())?;
346 for relay in [&r53, &r55, &r56] {
347 let event: &nostr::Event = relay
348 .events
349 .iter()
350 .find(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
351 .unwrap();
352
353 assert!(event.tags.iter().any(
354 |t| t.as_vec()[0].eq("r") && t.as_vec()[1].eq("https://localhost:1000")
355 ));
356 }
357 Ok(())
195 } 358 }
196 Ok(())
197 }
198 359
199 #[test] 360 #[test]
200 #[serial] 361 #[serial]
201 fn name() -> Result<()> { 362 fn relays() -> Result<()> {
202 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_claim())?; 363 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_claim())?;
203 for relay in [&r53, &r55, &r56] { 364 for relay in [&r53, &r55, &r56] {
204 let event: &nostr::Event = relay 365 let event: &nostr::Event = relay
205 .events 366 .events
206 .iter() 367 .iter()
207 .find(|e| e.kind.as_u64().eq(&REPOSITORY_KIND)) 368 .find(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
208 .unwrap(); 369 .unwrap();
209 370
210 assert!( 371 let relay_tags = event
211 event
212 .tags 372 .tags
213 .iter() 373 .iter()
214 .any(|t| t.as_vec()[0].eq("name") && t.as_vec()[1].eq("example-name")) 374 .filter(|t| t.as_vec()[0].eq("relay"))
215 ); 375 .collect::<Vec<&nostr::Tag>>();
376 assert_eq!(relay_tags[0].as_vec()[1], "ws://localhost:8055");
377 assert_eq!(relay_tags[1].as_vec()[1], "ws://localhost:8056");
378 }
379 Ok(())
380 }
381
382 #[test]
383 #[serial]
384 fn current_user_tagged_indicating_maintainer() -> Result<()> {
385 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_claim())?;
386 for relay in [&r53, &r55, &r56] {
387 let event: &nostr::Event = relay
388 .events
389 .iter()
390 .find(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
391 .unwrap();
392
393 let relay_tags = event
394 .tags
395 .iter()
396 .filter(|t| t.as_vec()[0].eq("p"))
397 .collect::<Vec<&nostr::Tag>>();
398 assert_eq!(relay_tags.len(), 1);
399 assert_eq!(
400 relay_tags[0].as_vec()[1],
401 TEST_KEY_1_KEYS.public_key().to_string()
402 );
403 }
404 Ok(())
216 } 405 }
217 Ok(())
218 } 406 }
219 407
220 #[test] 408 mod cli_ouput {
221 #[serial] 409 use super::*;
222 fn description() -> Result<()> { 410
223 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_claim())?; 411 async fn run_test_async() -> Result<()> {
224 for relay in [&r53, &r55, &r56] { 412 let git_repo = prep_git_repo()?;
225 let event: &nostr::Event = relay 413
226 .events 414 let (mut r51, mut r52, mut r53, mut r55, mut r56) = (
227 .iter() 415 Relay::new(
228 .find(|e| e.kind.as_u64().eq(&REPOSITORY_KIND)) 416 8051,
229 .unwrap(); 417 None,
230 418 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
231 assert!( 419 relay.respond_events(
232 event.tags.iter().any(|t| t.as_vec()[0].eq("description") 420 client_id,
233 && t.as_vec()[1].eq("example-description")) 421 &subscription_id,
422 &vec![
423 generate_test_key_1_metadata_event("fred"),
424 generate_test_key_1_relay_list_event(),
425 ],
426 )?;
427 Ok(())
428 }),
429 ),
430 Relay::new(8052, None, None),
431 Relay::new(8053, None, None),
432 Relay::new(8055, None, None),
433 Relay::new(8056, None, None),
234 ); 434 );
435
436 // // check relay had the right number of events
437 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
438 let mut p = cli_tester_claim(&git_repo);
439 expect_msgs_first(&mut p)?;
440 relay::expect_send_with_progress(
441 &mut p,
442 vec![
443 (" [my-relay] [repo-relay] ws://localhost:8055", true, ""),
444 (" [my-relay] ws://localhost:8053", true, ""),
445 (" [repo-relay] ws://localhost:8056", true, ""),
446 ],
447 1,
448 )?;
449 p.expect_end_with_whitespace()?;
450 for p in [51, 52, 53, 55, 56] {
451 relay::shutdown_relay(8000 + p)?;
452 }
453 Ok(())
454 });
455
456 // launch relay
457 let _ = join!(
458 r51.listen_until_close(),
459 r52.listen_until_close(),
460 r53.listen_until_close(),
461 r55.listen_until_close(),
462 r56.listen_until_close(),
463 );
464 cli_tester_handle.join().unwrap()?;
465 Ok(())
235 } 466 }
236 Ok(())
237 }
238 467
239 #[test] 468 #[test]
240 #[serial] 469 #[serial]
241 fn relays() -> Result<()> { 470 fn check_cli_output() -> Result<()> {
242 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_claim())?; 471 futures::executor::block_on(run_test_async())?;
243 for relay in [&r53, &r55, &r56] { 472 Ok(())
244 let event: &nostr::Event = relay
245 .events
246 .iter()
247 .find(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
248 .unwrap();
249
250 let relay_tags = event
251 .tags
252 .iter()
253 .filter(|t| t.as_vec()[0].eq("relay"))
254 .collect::<Vec<&nostr::Tag>>();
255 assert_eq!(relay_tags[0].as_vec()[1], "ws://localhost:8055");
256 assert_eq!(relay_tags[1].as_vec()[1], "ws://localhost:8056");
257 } 473 }
258 Ok(())
259 } 474 }
260 } 475 }
261 476
262 mod cli_ouput { 477 mod when_repo_relays_not_specified {
478 use futures::join;
479 use test_utils::relay::Relay;
480
263 use super::*; 481 use super::*;
264 482
265 async fn run_test_async() -> Result<()> { 483 fn prep_git_repo() -> Result<GitTestRepo> {
266 let git_repo = prep_git_repo()?; 484 let test_repo = GitTestRepo::default();
485 test_repo.populate()?;
486 test_repo.add_remote("origin", "https://localhost:1000")?;
487 Ok(test_repo)
488 }
489
490 fn cli_tester_claim(git_repo: &GitTestRepo) -> CliTester {
491 CliTester::new_from_dir(
492 &git_repo.dir,
493 [
494 "--nsec",
495 TEST_KEY_1_NSEC,
496 "--password",
497 TEST_PASSWORD,
498 "--disable-cli-spinners",
499 "claim",
500 "--title",
501 "example-name",
502 "--description",
503 "example-description",
504 ],
505 )
506 }
267 507
508 async fn prep_run_claim() -> Result<(
509 Relay<'static>,
510 Relay<'static>,
511 Relay<'static>,
512 Relay<'static>,
513 Relay<'static>,
514 )> {
515 let git_repo = prep_git_repo()?;
516 // fallback (51,52) user write (53, 55) repo (55, 56)
268 let (mut r51, mut r52, mut r53, mut r55, mut r56) = ( 517 let (mut r51, mut r52, mut r53, mut r55, mut r56) = (
269 Relay::new( 518 Relay::new(
270 8051, 519 8051,
@@ -290,17 +539,7 @@ mod sends_repoistory_to_relays {
290 // // check relay had the right number of events 539 // // check relay had the right number of events
291 let cli_tester_handle = std::thread::spawn(move || -> Result<()> { 540 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
292 let mut p = cli_tester_claim(&git_repo); 541 let mut p = cli_tester_claim(&git_repo);
293 expect_msgs_first(&mut p)?; 542 p.expect_end_eventually()?;
294 relay::expect_send_with_progress(
295 &mut p,
296 vec![
297 (" [my-relay] [repo-relay] ws://localhost:8055", true, ""),
298 (" [my-relay] ws://localhost:8053", true, ""),
299 (" [repo-relay] ws://localhost:8056", true, ""),
300 ],
301 1,
302 )?;
303 p.expect_end_with_whitespace()?;
304 for p in [51, 52, 53, 55, 56] { 543 for p in [51, 52, 53, 55, 56] {
305 relay::shutdown_relay(8000 + p)?; 544 relay::shutdown_relay(8000 + p)?;
306 } 545 }
@@ -316,14 +555,102 @@ mod sends_repoistory_to_relays {
316 r56.listen_until_close(), 555 r56.listen_until_close(),
317 ); 556 );
318 cli_tester_handle.join().unwrap()?; 557 cli_tester_handle.join().unwrap()?;
319 Ok(()) 558 Ok((r51, r52, r53, r55, r56))
559 }
560
561 mod tags {
562 use super::*;
563
564 #[test]
565 #[serial]
566 fn relays_match_user_write_relays() -> Result<()> {
567 let (_, _, r53, r55, _) = futures::executor::block_on(prep_run_claim())?;
568 for relay in [&r53, &r55] {
569 let event: &nostr::Event = relay
570 .events
571 .iter()
572 .find(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
573 .unwrap();
574
575 let relay_tags = event
576 .tags
577 .iter()
578 .filter(|t| t.as_vec()[0].eq("relay"))
579 .collect::<Vec<&nostr::Tag>>();
580 assert_eq!(relay_tags[0].as_vec()[1], "ws://localhost:8053");
581 assert_eq!(relay_tags[1].as_vec()[1], "ws://localhost:8055");
582 }
583 Ok(())
584 }
320 } 585 }
321 586
322 #[test] 587 mod cli_ouput {
323 #[serial] 588 use super::*;
324 fn check_cli_output() -> Result<()> { 589
325 futures::executor::block_on(run_test_async())?; 590 async fn run_test_async() -> Result<()> {
326 Ok(()) 591 let git_repo = prep_git_repo()?;
592
593 let (mut r51, mut r52, mut r53, mut r55, mut r56) = (
594 Relay::new(
595 8051,
596 None,
597 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
598 relay.respond_events(
599 client_id,
600 &subscription_id,
601 &vec![
602 generate_test_key_1_metadata_event("fred"),
603 generate_test_key_1_relay_list_event(),
604 ],
605 )?;
606 Ok(())
607 }),
608 ),
609 Relay::new(8052, None, None),
610 Relay::new(8053, None, None),
611 Relay::new(8055, None, None),
612 Relay::new(8056, None, None),
613 );
614
615 // // check relay had the right number of events
616 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
617 let mut p = cli_tester_claim(&git_repo);
618 expect_msgs_first(&mut p)?;
619 relay::expect_send_with_progress(
620 &mut p,
621 vec![
622 (" [my-relay] [repo-relay] ws://localhost:8053", true, ""),
623 (" [my-relay] [repo-relay] ws://localhost:8055", true, ""),
624 ],
625 1,
626 )?;
627 p.expect_end_with_whitespace()?;
628 for p in [51, 52, 53, 55, 56] {
629 relay::shutdown_relay(8000 + p)?;
630 }
631 Ok(())
632 });
633
634 // launch relay
635 let _ = join!(
636 r51.listen_until_close(),
637 r52.listen_until_close(),
638 r53.listen_until_close(),
639 r55.listen_until_close(),
640 r56.listen_until_close(),
641 );
642 cli_tester_handle.join().unwrap()?;
643 Ok(())
644 }
645
646 #[test]
647 #[serial]
648 fn check_cli_output() -> Result<()> {
649 futures::executor::block_on(run_test_async())?;
650 Ok(())
651 }
327 } 652 }
328 } 653 }
329} 654}
655
656// TODO: when_updating_existing_repoistory