upleb.uk

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

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2024-02-14 13:47:11 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2024-02-14 13:47:11 +0000
commita1d67c50c8ebc5395b069e30b60d66e0c7de5a5a (patch)
tree0895e4cfab98e7c7bbf45ddbac2e7af2c51935e6
parentfed60687b2438b6bd19ee8f5c854ddc53cad0c9b (diff)
feat: send to default relays, blast repo event
improve the distribution of events by sending to default relays in addition to user and repo relays. for better discoverability of repo events, this is also blasted. a temporary fix to blast everything was removed. the less reliable purplepages.es relay is moved to more_fallback_relays that currently isn't used
-rw-r--r--src/client.rs16
-rw-r--r--src/sub_commands/init.rs12
-rw-r--r--src/sub_commands/send.rs25
-rw-r--r--tests/init.rs112
-rw-r--r--tests/push.rs2
-rw-r--r--tests/send.rs14
6 files changed, 124 insertions, 57 deletions
diff --git a/src/client.rs b/src/client.rs
index 97cb856..9bc171a 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -26,6 +26,7 @@ pub struct Client {
26 client: nostr_sdk::Client, 26 client: nostr_sdk::Client,
27 fallback_relays: Vec<String>, 27 fallback_relays: Vec<String>,
28 more_fallback_relays: Vec<String>, 28 more_fallback_relays: Vec<String>,
29 blaster_relays: Vec<String>,
29} 30}
30 31
31#[cfg_attr(test, automock)] 32#[cfg_attr(test, automock)]
@@ -37,6 +38,7 @@ pub trait Connect {
37 async fn disconnect(&self) -> Result<()>; 38 async fn disconnect(&self) -> Result<()>;
38 fn get_fallback_relays(&self) -> &Vec<String>; 39 fn get_fallback_relays(&self) -> &Vec<String>;
39 fn get_more_fallback_relays(&self) -> &Vec<String>; 40 fn get_more_fallback_relays(&self) -> &Vec<String>;
41 fn get_blaster_relays(&self) -> &Vec<String>;
40 async fn send_event_to(&self, url: &str, event: nostr::event::Event) -> Result<nostr::EventId>; 42 async fn send_event_to(&self, url: &str, event: nostr::event::Event) -> Result<nostr::EventId>;
41 async fn get_events( 43 async fn get_events(
42 &self, 44 &self,
@@ -55,7 +57,6 @@ impl Connect for Client {
55 ] 57 ]
56 } else { 58 } else {
57 vec![ 59 vec![
58 "wss://purplepages.es".to_string(),
59 "wss://relay.damus.io".to_string(), 60 "wss://relay.damus.io".to_string(),
60 "wss://nostr-pub.wellorder.net".to_string(), 61 "wss://nostr-pub.wellorder.net".to_string(),
61 "wss://nos.lol".to_string(), 62 "wss://nos.lol".to_string(),
@@ -70,6 +71,7 @@ impl Connect for Client {
70 ] 71 ]
71 } else { 72 } else {
72 vec![ 73 vec![
74 "wss://purplepages.es".to_string(),
73 "wss://nostr.wine/".to_string(), 75 "wss://nostr.wine/".to_string(),
74 "wss://eden.nostr.land/".to_string(), 76 "wss://eden.nostr.land/".to_string(),
75 "wss://relay.nostr.band/".to_string(), 77 "wss://relay.nostr.band/".to_string(),
@@ -77,10 +79,16 @@ impl Connect for Client {
77 ] 79 ]
78 }; 80 };
79 81
82 let blaster_relays: Vec<String> = if std::env::var("NGITTEST").is_ok() {
83 vec!["ws://localhost:8057".to_string()]
84 } else {
85 vec!["wss://nostr.mutinywallet.com".to_string()]
86 };
80 Client { 87 Client {
81 client: nostr_sdk::Client::new(&nostr::Keys::generate()), 88 client: nostr_sdk::Client::new(&nostr::Keys::generate()),
82 fallback_relays, 89 fallback_relays,
83 more_fallback_relays, 90 more_fallback_relays,
91 blaster_relays,
84 } 92 }
85 } 93 }
86 fn new(opts: Params) -> Self { 94 fn new(opts: Params) -> Self {
@@ -88,6 +96,7 @@ impl Connect for Client {
88 client: nostr_sdk::Client::new(&opts.keys.unwrap_or(nostr::Keys::generate())), 96 client: nostr_sdk::Client::new(&opts.keys.unwrap_or(nostr::Keys::generate())),
89 fallback_relays: opts.fallback_relays, 97 fallback_relays: opts.fallback_relays,
90 more_fallback_relays: opts.more_fallback_relays, 98 more_fallback_relays: opts.more_fallback_relays,
99 blaster_relays: opts.blaster_relays,
91 } 100 }
92 } 101 }
93 102
@@ -110,6 +119,10 @@ impl Connect for Client {
110 &self.more_fallback_relays 119 &self.more_fallback_relays
111 } 120 }
112 121
122 fn get_blaster_relays(&self) -> &Vec<String> {
123 &self.blaster_relays
124 }
125
113 async fn send_event_to(&self, url: &str, event: Event) -> Result<nostr::EventId> { 126 async fn send_event_to(&self, url: &str, event: Event) -> Result<nostr::EventId> {
114 self.client.add_relay(url).await?; 127 self.client.add_relay(url).await?;
115 self.client.connect_relay(url).await?; 128 self.client.connect_relay(url).await?;
@@ -243,6 +256,7 @@ pub struct Params {
243 pub keys: Option<nostr::Keys>, 256 pub keys: Option<nostr::Keys>,
244 pub fallback_relays: Vec<String>, 257 pub fallback_relays: Vec<String>,
245 pub more_fallback_relays: Vec<String>, 258 pub more_fallback_relays: Vec<String>,
259 pub blaster_relays: Vec<String>,
246} 260}
247 261
248fn get_dedup_events(relay_results: Vec<Result<Vec<nostr::Event>>>) -> Vec<Event> { 262fn get_dedup_events(relay_results: Vec<Result<Vec<nostr::Event>>>) -> Vec<Event> {
diff --git a/src/sub_commands/init.rs b/src/sub_commands/init.rs
index a95021d..9fdcca5 100644
--- a/src/sub_commands/init.rs
+++ b/src/sub_commands/init.rs
@@ -81,7 +81,7 @@ pub async fn launch(cli_args: &Cli, args: &SubCommandArgs) -> Result<()> {
81 81
82 let mut maintainers = vec![keys.public_key()]; 82 let mut maintainers = vec![keys.public_key()];
83 83
84 let mut repo_relays: Vec<String> = if !args.relays.is_empty() { 84 let repo_relays: Vec<String> = if !args.relays.is_empty() {
85 args.relays.clone() 85 args.relays.clone()
86 } else if let Ok(config) = &repo_config_result { 86 } else if let Ok(config) = &repo_config_result {
87 config.relays.clone() 87 config.relays.clone()
@@ -92,16 +92,6 @@ pub async fn launch(cli_args: &Cli, args: &SubCommandArgs) -> Result<()> {
92 user_ref.relays.write() 92 user_ref.relays.write()
93 }; 93 };
94 94
95 // TODO: add blaster for just repo event and don't add it to repo relays
96 // TODO: fix the tests to support blaster
97 if std::env::var("NGITTEST").is_err()
98 && !repo_relays
99 .iter()
100 .any(|s| s.contains("nostr.mutinywallet.com"))
101 {
102 repo_relays.push("wss://nostr.mutinywallet.com".to_string());
103 }
104
105 if let Ok(config) = &repo_config_result { 95 if let Ok(config) = &repo_config_result {
106 maintainers = extract_pks(config.maintainers.clone())?; 96 maintainers = extract_pks(config.maintainers.clone())?;
107 } 97 }
diff --git a/src/sub_commands/send.rs b/src/sub_commands/send.rs
index 2c1dec8..b8cb271 100644
--- a/src/sub_commands/send.rs
+++ b/src/sub_commands/send.rs
@@ -183,7 +183,23 @@ pub async fn send_events(
183 repo_read_relays: Vec<String>, 183 repo_read_relays: Vec<String>,
184 animate: bool, 184 animate: bool,
185) -> Result<()> { 185) -> Result<()> {
186 let (_, _, _, all) = unique_and_duplicate_all(&my_write_relays, &repo_read_relays); 186 let (_, _, _, mut all) = unique_and_duplicate_all(&my_write_relays, &repo_read_relays);
187
188 let mut fallback = client.get_fallback_relays().clone();
189
190 // blast repo events
191 if events.iter().any(|e| e.kind().as_u64().eq(&REPO_REF_KIND)) {
192 for r in client.get_blaster_relays() {
193 fallback.push(r.to_string());
194 }
195 }
196
197 // then remaining fallback list
198 for r in &fallback {
199 if !all.iter().any(|r2| r2.eq(&r)) {
200 all.push(r);
201 }
202 }
187 203
188 let m = MultiProgress::new(); 204 let m = MultiProgress::new();
189 let pb_style = ProgressStyle::with_template(if animate { 205 let pb_style = ProgressStyle::with_template(if animate {
@@ -215,7 +231,7 @@ pub async fn send_events(
215 231
216 join_all(all.iter().map(|&relay| async { 232 join_all(all.iter().map(|&relay| async {
217 let details = format!( 233 let details = format!(
218 "{}{} {}", 234 "{}{}{} {}",
219 if my_write_relays.iter().any(|r| relay.eq(r)) { 235 if my_write_relays.iter().any(|r| relay.eq(r)) {
220 " [my-relay]" 236 " [my-relay]"
221 } else { 237 } else {
@@ -226,6 +242,11 @@ pub async fn send_events(
226 } else { 242 } else {
227 "" 243 ""
228 }, 244 },
245 if fallback.iter().any(|r| relay.eq(r)) {
246 " [default]"
247 } else {
248 ""
249 },
229 *relay, 250 *relay,
230 ); 251 );
231 let pb = m.add( 252 let pb = m.add(
diff --git a/tests/init.rs b/tests/init.rs
index 56ce332..6db2554 100644
--- a/tests/init.rs
+++ b/tests/init.rs
@@ -58,10 +58,11 @@ mod when_repo_not_previously_claimed {
58 Relay<'static>, 58 Relay<'static>,
59 Relay<'static>, 59 Relay<'static>,
60 Relay<'static>, 60 Relay<'static>,
61 Relay<'static>,
61 )> { 62 )> {
62 let git_repo = prep_git_repo()?; 63 let git_repo = prep_git_repo()?;
63 // fallback (51,52) user write (53, 55) repo (55, 56) 64 // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57)
64 let (mut r51, mut r52, mut r53, mut r55, mut r56) = ( 65 let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = (
65 Relay::new( 66 Relay::new(
66 8051, 67 8051,
67 None, 68 None,
@@ -81,13 +82,14 @@ mod when_repo_not_previously_claimed {
81 Relay::new(8053, None, None), 82 Relay::new(8053, None, None),
82 Relay::new(8055, None, None), 83 Relay::new(8055, None, None),
83 Relay::new(8056, None, None), 84 Relay::new(8056, None, None),
85 Relay::new(8057, None, None),
84 ); 86 );
85 87
86 // // check relay had the right number of events 88 // // check relay had the right number of events
87 let cli_tester_handle = std::thread::spawn(move || -> Result<()> { 89 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
88 let mut p = cli_tester_init(&git_repo); 90 let mut p = cli_tester_init(&git_repo);
89 p.expect_end_eventually()?; 91 p.expect_end_eventually()?;
90 for p in [51, 52, 53, 55, 56] { 92 for p in [51, 52, 53, 55, 56, 57] {
91 relay::shutdown_relay(8000 + p)?; 93 relay::shutdown_relay(8000 + p)?;
92 } 94 }
93 Ok(()) 95 Ok(())
@@ -100,9 +102,10 @@ mod when_repo_not_previously_claimed {
100 r53.listen_until_close(), 102 r53.listen_until_close(),
101 r55.listen_until_close(), 103 r55.listen_until_close(),
102 r56.listen_until_close(), 104 r56.listen_until_close(),
105 r57.listen_until_close(),
103 ); 106 );
104 cli_tester_handle.join().unwrap()?; 107 cli_tester_handle.join().unwrap()?;
105 Ok((r51, r52, r53, r55, r56)) 108 Ok((r51, r52, r53, r55, r56, r57))
106 } 109 }
107 110
108 mod sent_to_correct_relays { 111 mod sent_to_correct_relays {
@@ -111,7 +114,7 @@ mod when_repo_not_previously_claimed {
111 #[tokio::test] 114 #[tokio::test]
112 #[serial] 115 #[serial]
113 async fn only_1_repository_kind_event_sent_to_user_relays() -> Result<()> { 116 async fn only_1_repository_kind_event_sent_to_user_relays() -> Result<()> {
114 let (_, _, r53, r55, _) = prep_run_init().await?; 117 let (_, _, r53, r55, _, _) = prep_run_init().await?;
115 for relay in [&r53, &r55] { 118 for relay in [&r53, &r55] {
116 assert_eq!( 119 assert_eq!(
117 relay 120 relay
@@ -128,7 +131,7 @@ mod when_repo_not_previously_claimed {
128 #[tokio::test] 131 #[tokio::test]
129 #[serial] 132 #[serial]
130 async fn only_1_repository_kind_event_sent_to_specified_repo_relays() -> Result<()> { 133 async fn only_1_repository_kind_event_sent_to_specified_repo_relays() -> Result<()> {
131 let (_, _, _, r55, r56) = prep_run_init().await?; 134 let (_, _, _, r55, r56, _) = prep_run_init().await?;
132 for relay in [&r55, &r56] { 135 for relay in [&r55, &r56] {
133 assert_eq!( 136 assert_eq!(
134 relay 137 relay
@@ -144,8 +147,8 @@ mod when_repo_not_previously_claimed {
144 147
145 #[tokio::test] 148 #[tokio::test]
146 #[serial] 149 #[serial]
147 async fn event_not_sent_to_fallback_relay() -> Result<()> { 150 async fn only_1_repository_kind_event_sent_to_fallback_relays() -> Result<()> {
148 let (r51, r52, _, _, _) = prep_run_init().await?; 151 let (r51, r52, _, _, _, _) = prep_run_init().await?;
149 for relay in [&r51, &r52] { 152 for relay in [&r51, &r52] {
150 assert_eq!( 153 assert_eq!(
151 relay 154 relay
@@ -153,11 +156,25 @@ mod when_repo_not_previously_claimed {
153 .iter() 156 .iter()
154 .filter(|e| e.kind.as_u64().eq(&REPOSITORY_KIND)) 157 .filter(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
155 .count(), 158 .count(),
156 0, 159 1,
157 ); 160 );
158 } 161 }
159 Ok(()) 162 Ok(())
160 } 163 }
164
165 #[tokio::test]
166 #[serial]
167 async fn only_1_repository_kind_event_sent_to_blaster_relays() -> Result<()> {
168 let (_, _, _, _, _, r57) = prep_run_init().await?;
169 assert_eq!(
170 r57.events
171 .iter()
172 .filter(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
173 .count(),
174 1,
175 );
176 Ok(())
177 }
161 } 178 }
162 179
163 mod yaml_file { 180 mod yaml_file {
@@ -167,8 +184,8 @@ mod when_repo_not_previously_claimed {
167 184
168 async fn async_run_test() -> Result<()> { 185 async fn async_run_test() -> Result<()> {
169 let git_repo = prep_git_repo()?; 186 let git_repo = prep_git_repo()?;
170 // fallback (51,52) user write (53, 55) repo (55, 56) 187 // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57)
171 let (mut r51, mut r52, mut r53, mut r55, mut r56) = ( 188 let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = (
172 Relay::new( 189 Relay::new(
173 8051, 190 8051,
174 None, 191 None,
@@ -188,6 +205,7 @@ mod when_repo_not_previously_claimed {
188 Relay::new(8053, None, None), 205 Relay::new(8053, None, None),
189 Relay::new(8055, None, None), 206 Relay::new(8055, None, None),
190 Relay::new(8056, None, None), 207 Relay::new(8056, None, None),
208 Relay::new(8057, None, None),
191 ); 209 );
192 210
193 // // check relay had the right number of events 211 // // check relay had the right number of events
@@ -214,7 +232,7 @@ mod when_repo_not_previously_claimed {
214 " 232 "
215 ), 233 ),
216 ); 234 );
217 for p in [51, 52, 53, 55, 56] { 235 for p in [51, 52, 53, 55, 56, 57] {
218 relay::shutdown_relay(8000 + p)?; 236 relay::shutdown_relay(8000 + p)?;
219 } 237 }
220 Ok(()) 238 Ok(())
@@ -227,6 +245,7 @@ mod when_repo_not_previously_claimed {
227 r53.listen_until_close(), 245 r53.listen_until_close(),
228 r55.listen_until_close(), 246 r55.listen_until_close(),
229 r56.listen_until_close(), 247 r56.listen_until_close(),
248 r57.listen_until_close(),
230 ); 249 );
231 cli_tester_handle.join().unwrap()?; 250 cli_tester_handle.join().unwrap()?;
232 Ok(()) 251 Ok(())
@@ -247,8 +266,8 @@ mod when_repo_not_previously_claimed {
247 #[serial] 266 #[serial]
248 async fn d_replaceable_event_identifier_defaults_to_root_commit_id_shorthand() 267 async fn d_replaceable_event_identifier_defaults_to_root_commit_id_shorthand()
249 -> Result<()> { 268 -> Result<()> {
250 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_init())?; 269 let (_, _, r53, r55, r56, r57) = prep_run_init().await?;
251 for relay in [&r53, &r55, &r56] { 270 for relay in [&r53, &r55, &r56, &r57] {
252 let event: &nostr::Event = relay 271 let event: &nostr::Event = relay
253 .events 272 .events
254 .iter() 273 .iter()
@@ -268,8 +287,8 @@ mod when_repo_not_previously_claimed {
268 #[tokio::test] 287 #[tokio::test]
269 #[serial] 288 #[serial]
270 async fn root_commit_as_reference() -> Result<()> { 289 async fn root_commit_as_reference() -> Result<()> {
271 let (_, _, r53, r55, r56) = prep_run_init().await?; 290 let (_, _, r53, r55, r56, r57) = prep_run_init().await?;
272 for relay in [&r53, &r55, &r56] { 291 for relay in [&r53, &r55, &r56, &r57] {
273 let event: &nostr::Event = relay 292 let event: &nostr::Event = relay
274 .events 293 .events
275 .iter() 294 .iter()
@@ -285,8 +304,8 @@ mod when_repo_not_previously_claimed {
285 #[tokio::test] 304 #[tokio::test]
286 #[serial] 305 #[serial]
287 async fn name() -> Result<()> { 306 async fn name() -> Result<()> {
288 let (_, _, r53, r55, r56) = prep_run_init().await?; 307 let (_, _, r53, r55, r56, r57) = prep_run_init().await?;
289 for relay in [&r53, &r55, &r56] { 308 for relay in [&r53, &r55, &r56, &r57] {
290 let event: &nostr::Event = relay 309 let event: &nostr::Event = relay
291 .events 310 .events
292 .iter() 311 .iter()
@@ -306,8 +325,8 @@ mod when_repo_not_previously_claimed {
306 #[tokio::test] 325 #[tokio::test]
307 #[serial] 326 #[serial]
308 async fn description() -> Result<()> { 327 async fn description() -> Result<()> {
309 let (_, _, r53, r55, r56) = prep_run_init().await?; 328 let (_, _, r53, r55, r56, r57) = prep_run_init().await?;
310 for relay in [&r53, &r55, &r56] { 329 for relay in [&r53, &r55, &r56, &r57] {
311 let event: &nostr::Event = relay 330 let event: &nostr::Event = relay
312 .events 331 .events
313 .iter() 332 .iter()
@@ -323,8 +342,8 @@ mod when_repo_not_previously_claimed {
323 #[tokio::test] 342 #[tokio::test]
324 #[serial] 343 #[serial]
325 async fn git_server() -> Result<()> { 344 async fn git_server() -> Result<()> {
326 let (_, _, r53, r55, r56) = prep_run_init().await?; 345 let (_, _, r53, r55, r56, r57) = prep_run_init().await?;
327 for relay in [&r53, &r55, &r56] { 346 for relay in [&r53, &r55, &r56, &r57] {
328 let event: &nostr::Event = relay 347 let event: &nostr::Event = relay
329 .events 348 .events
330 .iter() 349 .iter()
@@ -342,8 +361,8 @@ mod when_repo_not_previously_claimed {
342 #[tokio::test] 361 #[tokio::test]
343 #[serial] 362 #[serial]
344 async fn relays() -> Result<()> { 363 async fn relays() -> Result<()> {
345 let (_, _, r53, r55, r56) = prep_run_init().await?; 364 let (_, _, r53, r55, r56, r57) = prep_run_init().await?;
346 for relay in [&r53, &r55, &r56] { 365 for relay in [&r53, &r55, &r56, &r57] {
347 let event: &nostr::Event = relay 366 let event: &nostr::Event = relay
348 .events 367 .events
349 .iter() 368 .iter()
@@ -364,8 +383,8 @@ mod when_repo_not_previously_claimed {
364 #[tokio::test] 383 #[tokio::test]
365 #[serial] 384 #[serial]
366 async fn web() -> Result<()> { 385 async fn web() -> Result<()> {
367 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_init())?; 386 let (_, _, r53, r55, r56, r57) = prep_run_init().await?;
368 for relay in [&r53, &r55, &r56] { 387 for relay in [&r53, &r55, &r56, &r57] {
369 let event: &nostr::Event = relay 388 let event: &nostr::Event = relay
370 .events 389 .events
371 .iter() 390 .iter()
@@ -383,11 +402,11 @@ mod when_repo_not_previously_claimed {
383 Ok(()) 402 Ok(())
384 } 403 }
385 404
386 #[test] 405 #[tokio::test]
387 #[serial] 406 #[serial]
388 fn current_user_in_maintainers() -> Result<()> { 407 async fn current_user_in_maintainers() -> Result<()> {
389 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_init())?; 408 let (_, _, r53, r55, r56, r57) = prep_run_init().await?;
390 for relay in [&r53, &r55, &r56] { 409 for relay in [&r53, &r55, &r56, &r57] {
391 let event: &nostr::Event = relay 410 let event: &nostr::Event = relay
392 .events 411 .events
393 .iter() 412 .iter()
@@ -411,7 +430,8 @@ mod when_repo_not_previously_claimed {
411 async fn run_test_async() -> Result<()> { 430 async fn run_test_async() -> Result<()> {
412 let git_repo = prep_git_repo()?; 431 let git_repo = prep_git_repo()?;
413 432
414 let (mut r51, mut r52, mut r53, mut r55, mut r56) = ( 433 // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57)
434 let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = (
415 Relay::new( 435 Relay::new(
416 8051, 436 8051,
417 None, 437 None,
@@ -431,6 +451,7 @@ mod when_repo_not_previously_claimed {
431 Relay::new(8053, None, None), 451 Relay::new(8053, None, None),
432 Relay::new(8055, None, None), 452 Relay::new(8055, None, None),
433 Relay::new(8056, None, None), 453 Relay::new(8056, None, None),
454 Relay::new(8057, None, None),
434 ); 455 );
435 456
436 // // check relay had the right number of events 457 // // check relay had the right number of events
@@ -443,11 +464,14 @@ mod when_repo_not_previously_claimed {
443 (" [my-relay] [repo-relay] ws://localhost:8055", true, ""), 464 (" [my-relay] [repo-relay] ws://localhost:8055", true, ""),
444 (" [my-relay] ws://localhost:8053", true, ""), 465 (" [my-relay] ws://localhost:8053", true, ""),
445 (" [repo-relay] ws://localhost:8056", true, ""), 466 (" [repo-relay] ws://localhost:8056", true, ""),
467 (" [default] ws://localhost:8051", true, ""),
468 (" [default] ws://localhost:8052", true, ""),
469 (" [default] ws://localhost:8057", true, ""),
446 ], 470 ],
447 1, 471 1,
448 )?; 472 )?;
449 p.expect_end_with_whitespace()?; 473 p.expect_end_with_whitespace()?;
450 for p in [51, 52, 53, 55, 56] { 474 for p in [51, 52, 53, 55, 56, 57] {
451 relay::shutdown_relay(8000 + p)?; 475 relay::shutdown_relay(8000 + p)?;
452 } 476 }
453 Ok(()) 477 Ok(())
@@ -460,6 +484,7 @@ mod when_repo_not_previously_claimed {
460 r53.listen_until_close(), 484 r53.listen_until_close(),
461 r55.listen_until_close(), 485 r55.listen_until_close(),
462 r56.listen_until_close(), 486 r56.listen_until_close(),
487 r57.listen_until_close(),
463 ); 488 );
464 cli_tester_handle.join().unwrap()?; 489 cli_tester_handle.join().unwrap()?;
465 Ok(()) 490 Ok(())
@@ -514,10 +539,11 @@ mod when_repo_not_previously_claimed {
514 Relay<'static>, 539 Relay<'static>,
515 Relay<'static>, 540 Relay<'static>,
516 Relay<'static>, 541 Relay<'static>,
542 Relay<'static>,
517 )> { 543 )> {
518 let git_repo = prep_git_repo()?; 544 let git_repo = prep_git_repo()?;
519 // fallback (51,52) user write (53, 55) repo (55, 56) 545 // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57)
520 let (mut r51, mut r52, mut r53, mut r55, mut r56) = ( 546 let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = (
521 Relay::new( 547 Relay::new(
522 8051, 548 8051,
523 None, 549 None,
@@ -537,13 +563,14 @@ mod when_repo_not_previously_claimed {
537 Relay::new(8053, None, None), 563 Relay::new(8053, None, None),
538 Relay::new(8055, None, None), 564 Relay::new(8055, None, None),
539 Relay::new(8056, None, None), 565 Relay::new(8056, None, None),
566 Relay::new(8057, None, None),
540 ); 567 );
541 568
542 // // check relay had the right number of events 569 // // check relay had the right number of events
543 let cli_tester_handle = std::thread::spawn(move || -> Result<()> { 570 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
544 let mut p = cli_tester_init(&git_repo); 571 let mut p = cli_tester_init(&git_repo);
545 p.expect_end_eventually()?; 572 p.expect_end_eventually()?;
546 for p in [51, 52, 53, 55, 56] { 573 for p in [51, 52, 53, 55, 56, 57] {
547 relay::shutdown_relay(8000 + p)?; 574 relay::shutdown_relay(8000 + p)?;
548 } 575 }
549 Ok(()) 576 Ok(())
@@ -556,9 +583,10 @@ mod when_repo_not_previously_claimed {
556 r53.listen_until_close(), 583 r53.listen_until_close(),
557 r55.listen_until_close(), 584 r55.listen_until_close(),
558 r56.listen_until_close(), 585 r56.listen_until_close(),
586 r57.listen_until_close(),
559 ); 587 );
560 cli_tester_handle.join().unwrap()?; 588 cli_tester_handle.join().unwrap()?;
561 Ok((r51, r52, r53, r55, r56)) 589 Ok((r51, r52, r53, r55, r56, r57))
562 } 590 }
563 591
564 mod tags { 592 mod tags {
@@ -567,7 +595,7 @@ mod when_repo_not_previously_claimed {
567 #[tokio::test] 595 #[tokio::test]
568 #[serial] 596 #[serial]
569 async fn relays_match_user_write_relays() -> Result<()> { 597 async fn relays_match_user_write_relays() -> Result<()> {
570 let (_, _, r53, r55, _) = prep_run_init().await?; 598 let (_, _, r53, r55, _, _) = prep_run_init().await?;
571 for relay in [&r53, &r55] { 599 for relay in [&r53, &r55] {
572 let event: &nostr::Event = relay 600 let event: &nostr::Event = relay
573 .events 601 .events
@@ -589,7 +617,8 @@ mod when_repo_not_previously_claimed {
589 async fn run_test_async() -> Result<()> { 617 async fn run_test_async() -> Result<()> {
590 let git_repo = prep_git_repo()?; 618 let git_repo = prep_git_repo()?;
591 619
592 let (mut r51, mut r52, mut r53, mut r55, mut r56) = ( 620 // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57)
621 let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = (
593 Relay::new( 622 Relay::new(
594 8051, 623 8051,
595 None, 624 None,
@@ -609,6 +638,7 @@ mod when_repo_not_previously_claimed {
609 Relay::new(8053, None, None), 638 Relay::new(8053, None, None),
610 Relay::new(8055, None, None), 639 Relay::new(8055, None, None),
611 Relay::new(8056, None, None), 640 Relay::new(8056, None, None),
641 Relay::new(8057, None, None),
612 ); 642 );
613 643
614 // // check relay had the right number of events 644 // // check relay had the right number of events
@@ -620,11 +650,14 @@ mod when_repo_not_previously_claimed {
620 vec![ 650 vec![
621 (" [my-relay] [repo-relay] ws://localhost:8053", true, ""), 651 (" [my-relay] [repo-relay] ws://localhost:8053", true, ""),
622 (" [my-relay] [repo-relay] ws://localhost:8055", true, ""), 652 (" [my-relay] [repo-relay] ws://localhost:8055", true, ""),
653 (" [default] ws://localhost:8051", true, ""),
654 (" [default] ws://localhost:8052", true, ""),
655 (" [default] ws://localhost:8057", true, ""),
623 ], 656 ],
624 1, 657 1,
625 )?; 658 )?;
626 p.expect_end_with_whitespace()?; 659 p.expect_end_with_whitespace()?;
627 for p in [51, 52, 53, 55, 56] { 660 for p in [51, 52, 53, 55, 56, 57] {
628 relay::shutdown_relay(8000 + p)?; 661 relay::shutdown_relay(8000 + p)?;
629 } 662 }
630 Ok(()) 663 Ok(())
@@ -637,6 +670,7 @@ mod when_repo_not_previously_claimed {
637 r53.listen_until_close(), 670 r53.listen_until_close(),
638 r55.listen_until_close(), 671 r55.listen_until_close(),
639 r56.listen_until_close(), 672 r56.listen_until_close(),
673 r57.listen_until_close(),
640 ); 674 );
641 cli_tester_handle.join().unwrap()?; 675 cli_tester_handle.join().unwrap()?;
642 Ok(()) 676 Ok(())
diff --git a/tests/push.rs b/tests/push.rs
index 9791d9d..409b36f 100644
--- a/tests/push.rs
+++ b/tests/push.rs
@@ -366,6 +366,8 @@ mod when_branch_is_checked_out {
366 (" [my-relay] [repo-relay] ws://localhost:8055", true, ""), 366 (" [my-relay] [repo-relay] ws://localhost:8055", true, ""),
367 (" [my-relay] ws://localhost:8053", true, ""), 367 (" [my-relay] ws://localhost:8053", true, ""),
368 (" [repo-relay] ws://localhost:8056", true, ""), 368 (" [repo-relay] ws://localhost:8056", true, ""),
369 (" [default] ws://localhost:8051", true, ""),
370 (" [default] ws://localhost:8052", true, ""),
369 ], 371 ],
370 1, 372 1,
371 )?; 373 )?;
diff --git a/tests/send.rs b/tests/send.rs
index a109918..b202d54 100644
--- a/tests/send.rs
+++ b/tests/send.rs
@@ -309,12 +309,12 @@ mod sends_cover_letter_and_2_patches_to_3_relays {
309 309
310 #[tokio::test] 310 #[tokio::test]
311 #[serial] 311 #[serial]
312 async fn pr_not_sent_to_fallback_relay() -> Result<()> { 312 async fn only_1_pr_kind_event_sent_to_fallback_relays() -> Result<()> {
313 let (r51, r52, _, _, _) = prep_run_create_pr(true).await?; 313 let (r51, r52, _, _, _) = prep_run_create_pr(true).await?;
314 for relay in [&r51, &r52] { 314 for relay in [&r51, &r52] {
315 assert_eq!( 315 assert_eq!(
316 relay.events.iter().filter(|e| is_cover_letter(e)).count(), 316 relay.events.iter().filter(|e| is_cover_letter(e)).count(),
317 0, 317 1,
318 ); 318 );
319 } 319 }
320 Ok(()) 320 Ok(())
@@ -323,8 +323,8 @@ mod sends_cover_letter_and_2_patches_to_3_relays {
323 #[tokio::test] 323 #[tokio::test]
324 #[serial] 324 #[serial]
325 async fn only_2_patch_kind_events_sent_to_each_relay() -> Result<()> { 325 async fn only_2_patch_kind_events_sent_to_each_relay() -> Result<()> {
326 let (_, _, r53, r55, r56) = prep_run_create_pr(true).await?; 326 let (r51, r52, r53, r55, r56) = prep_run_create_pr(true).await?;
327 for relay in [&r53, &r55, &r56] { 327 for relay in [&r51, &r52, &r53, &r55, &r56] {
328 assert_eq!(relay.events.iter().filter(|e| is_patch(e)).count(), 2,); 328 assert_eq!(relay.events.iter().filter(|e| is_patch(e)).count(), 2,);
329 } 329 }
330 Ok(()) 330 Ok(())
@@ -757,6 +757,8 @@ mod sends_cover_letter_and_2_patches_to_3_relays {
757 (" [my-relay] [repo-relay] ws://localhost:8055", true, ""), 757 (" [my-relay] [repo-relay] ws://localhost:8055", true, ""),
758 (" [my-relay] ws://localhost:8053", true, ""), 758 (" [my-relay] ws://localhost:8053", true, ""),
759 (" [repo-relay] ws://localhost:8056", true, ""), 759 (" [repo-relay] ws://localhost:8056", true, ""),
760 (" [default] ws://localhost:8051", true, ""),
761 (" [default] ws://localhost:8052", true, ""),
760 ], 762 ],
761 3, 763 3,
762 )?; 764 )?;
@@ -930,6 +932,8 @@ mod sends_cover_letter_and_2_patches_to_3_relays {
930 false, 932 false,
931 "error: Payment Required", 933 "error: Payment Required",
932 ), 934 ),
935 (" [default] ws://localhost:8051", true, ""),
936 (" [default] ws://localhost:8052", true, ""),
933 ], 937 ],
934 3, 938 3,
935 )?; 939 )?;
@@ -1016,6 +1020,8 @@ mod sends_2_patches_without_cover_letter {
1016 (" [my-relay] [repo-relay] ws://localhost:8055", true, ""), 1020 (" [my-relay] [repo-relay] ws://localhost:8055", true, ""),
1017 (" [my-relay] ws://localhost:8053", true, ""), 1021 (" [my-relay] ws://localhost:8053", true, ""),
1018 (" [repo-relay] ws://localhost:8056", true, ""), 1022 (" [repo-relay] ws://localhost:8056", true, ""),
1023 (" [default] ws://localhost:8051", true, ""),
1024 (" [default] ws://localhost:8052", true, ""),
1019 ], 1025 ],
1020 2, 1026 2,
1021 )?; 1027 )?;