diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2023-12-12 00:00:00 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2023-12-12 00:00:00 +0000 |
| commit | 3e52ecb609f8424cffb2e6398c599aa78224825a (patch) | |
| tree | 5c199510c10e206d6c6801dbabdae9691c03341c /tests/claim.rs | |
| parent | 6d3c9218d2d3320f5d7fb9b9ede8750e947b70e8 (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.rs | 785 |
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 | ||
| 14 | mod sends_repoistory_to_relays { | 14 | fn 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 | ||
| 24 | mod 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 | ||