diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2024-02-14 13:47:11 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2024-02-14 13:47:11 +0000 |
| commit | a1d67c50c8ebc5395b069e30b60d66e0c7de5a5a (patch) | |
| tree | 0895e4cfab98e7c7bbf45ddbac2e7af2c51935e6 | |
| parent | fed60687b2438b6bd19ee8f5c854ddc53cad0c9b (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.rs | 16 | ||||
| -rw-r--r-- | src/sub_commands/init.rs | 12 | ||||
| -rw-r--r-- | src/sub_commands/send.rs | 25 | ||||
| -rw-r--r-- | tests/init.rs | 112 | ||||
| -rw-r--r-- | tests/push.rs | 2 | ||||
| -rw-r--r-- | tests/send.rs | 14 |
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 | ||
| 248 | fn get_dedup_events(relay_results: Vec<Result<Vec<nostr::Event>>>) -> Vec<Event> { | 262 | fn 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 | )?; |