diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/send.rs | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/tests/send.rs b/tests/send.rs index 9c8561a..d8186bd 100644 --- a/tests/send.rs +++ b/tests/send.rs | |||
| @@ -1130,4 +1130,230 @@ mod sends_2_patches_without_cover_letter { | |||
| 1130 | } | 1130 | } |
| 1131 | Ok(()) | 1131 | Ok(()) |
| 1132 | } | 1132 | } |
| 1133 | mod specify_starting_commits { | ||
| 1134 | use super::*; | ||
| 1135 | fn cli_tester_create_proposal(git_repo: &GitTestRepo) -> CliTester { | ||
| 1136 | let args = vec![ | ||
| 1137 | "--nsec", | ||
| 1138 | TEST_KEY_1_NSEC, | ||
| 1139 | "--password", | ||
| 1140 | TEST_PASSWORD, | ||
| 1141 | "--disable-cli-spinners", | ||
| 1142 | "send", | ||
| 1143 | "HEAD~3", | ||
| 1144 | "--no-cover-letter", | ||
| 1145 | ]; | ||
| 1146 | CliTester::new_from_dir(&git_repo.dir, args) | ||
| 1147 | } | ||
| 1148 | fn expect_msgs_first(p: &mut CliTester) -> Result<()> { | ||
| 1149 | p.expect("creating patch for 3 commits\r\n")?; | ||
| 1150 | p.expect("searching for profile and relay updates...\r\n")?; | ||
| 1151 | p.expect("\r")?; | ||
| 1152 | p.expect("logged in as fred\r\n")?; | ||
| 1153 | p.expect("posting 3 patches without a covering letter...\r\n")?; | ||
| 1154 | Ok(()) | ||
| 1155 | } | ||
| 1156 | async fn prep_run_create_proposal() -> Result<( | ||
| 1157 | Relay<'static>, | ||
| 1158 | Relay<'static>, | ||
| 1159 | Relay<'static>, | ||
| 1160 | Relay<'static>, | ||
| 1161 | Relay<'static>, | ||
| 1162 | )> { | ||
| 1163 | let git_repo = prep_git_repo()?; | ||
| 1164 | // fallback (51,52) user write (53, 55) repo (55, 56) | ||
| 1165 | let (mut r51, mut r52, mut r53, mut r55, mut r56) = ( | ||
| 1166 | Relay::new( | ||
| 1167 | 8051, | ||
| 1168 | None, | ||
| 1169 | Some(&|relay, client_id, subscription_id, _| -> Result<()> { | ||
| 1170 | relay.respond_events( | ||
| 1171 | client_id, | ||
| 1172 | &subscription_id, | ||
| 1173 | &vec![ | ||
| 1174 | generate_test_key_1_metadata_event("fred"), | ||
| 1175 | generate_test_key_1_relay_list_event(), | ||
| 1176 | ], | ||
| 1177 | )?; | ||
| 1178 | Ok(()) | ||
| 1179 | }), | ||
| 1180 | ), | ||
| 1181 | Relay::new(8052, None, None), | ||
| 1182 | Relay::new(8053, None, None), | ||
| 1183 | Relay::new( | ||
| 1184 | 8055, | ||
| 1185 | None, | ||
| 1186 | Some(&|relay, client_id, subscription_id, _| -> Result<()> { | ||
| 1187 | relay.respond_events( | ||
| 1188 | client_id, | ||
| 1189 | &subscription_id, | ||
| 1190 | &vec![generate_repo_ref_event()], | ||
| 1191 | )?; | ||
| 1192 | Ok(()) | ||
| 1193 | }), | ||
| 1194 | ), | ||
| 1195 | Relay::new(8056, None, None), | ||
| 1196 | ); | ||
| 1197 | |||
| 1198 | // // check relay had the right number of events | ||
| 1199 | let cli_tester_handle = std::thread::spawn(move || -> Result<()> { | ||
| 1200 | let mut p = cli_tester_create_proposal(&git_repo); | ||
| 1201 | p.expect_end_eventually()?; | ||
| 1202 | for p in [51, 52, 53, 55, 56] { | ||
| 1203 | relay::shutdown_relay(8000 + p)?; | ||
| 1204 | } | ||
| 1205 | Ok(()) | ||
| 1206 | }); | ||
| 1207 | |||
| 1208 | // launch relay | ||
| 1209 | let _ = join!( | ||
| 1210 | r51.listen_until_close(), | ||
| 1211 | r52.listen_until_close(), | ||
| 1212 | r53.listen_until_close(), | ||
| 1213 | r55.listen_until_close(), | ||
| 1214 | r56.listen_until_close(), | ||
| 1215 | ); | ||
| 1216 | cli_tester_handle.join().unwrap()?; | ||
| 1217 | Ok((r51, r52, r53, r55, r56)) | ||
| 1218 | } | ||
| 1219 | mod cli_ouput { | ||
| 1220 | use super::*; | ||
| 1221 | |||
| 1222 | async fn run_test_async() -> Result<()> { | ||
| 1223 | let git_repo = prep_git_repo()?; | ||
| 1224 | |||
| 1225 | let (mut r51, mut r52, mut r53, mut r55, mut r56) = ( | ||
| 1226 | Relay::new( | ||
| 1227 | 8051, | ||
| 1228 | None, | ||
| 1229 | Some(&|relay, client_id, subscription_id, _| -> Result<()> { | ||
| 1230 | relay.respond_events( | ||
| 1231 | client_id, | ||
| 1232 | &subscription_id, | ||
| 1233 | &vec![ | ||
| 1234 | generate_test_key_1_metadata_event("fred"), | ||
| 1235 | generate_test_key_1_relay_list_event(), | ||
| 1236 | ], | ||
| 1237 | )?; | ||
| 1238 | Ok(()) | ||
| 1239 | }), | ||
| 1240 | ), | ||
| 1241 | Relay::new(8052, None, None), | ||
| 1242 | Relay::new(8053, None, None), | ||
| 1243 | Relay::new( | ||
| 1244 | 8055, | ||
| 1245 | None, | ||
| 1246 | Some(&|relay, client_id, subscription_id, _| -> Result<()> { | ||
| 1247 | relay.respond_events( | ||
| 1248 | client_id, | ||
| 1249 | &subscription_id, | ||
| 1250 | &vec![generate_repo_ref_event()], | ||
| 1251 | )?; | ||
| 1252 | Ok(()) | ||
| 1253 | }), | ||
| 1254 | ), | ||
| 1255 | Relay::new(8056, None, None), | ||
| 1256 | ); | ||
| 1257 | |||
| 1258 | // // check relay had the right number of events | ||
| 1259 | let cli_tester_handle = std::thread::spawn(move || -> Result<()> { | ||
| 1260 | let mut p = cli_tester_create_proposal(&git_repo); | ||
| 1261 | |||
| 1262 | expect_msgs_first(&mut p)?; | ||
| 1263 | relay::expect_send_with_progress( | ||
| 1264 | &mut p, | ||
| 1265 | vec![ | ||
| 1266 | (" [my-relay] [repo-relay] ws://localhost:8055", true, ""), | ||
| 1267 | (" [my-relay] ws://localhost:8053", true, ""), | ||
| 1268 | (" [repo-relay] ws://localhost:8056", true, ""), | ||
| 1269 | (" [default] ws://localhost:8051", true, ""), | ||
| 1270 | (" [default] ws://localhost:8052", true, ""), | ||
| 1271 | ], | ||
| 1272 | 3, | ||
| 1273 | )?; | ||
| 1274 | p.expect_end_with_whitespace()?; | ||
| 1275 | for p in [51, 52, 53, 55, 56] { | ||
| 1276 | relay::shutdown_relay(8000 + p)?; | ||
| 1277 | } | ||
| 1278 | Ok(()) | ||
| 1279 | }); | ||
| 1280 | |||
| 1281 | // launch relay | ||
| 1282 | let _ = join!( | ||
| 1283 | r51.listen_until_close(), | ||
| 1284 | r52.listen_until_close(), | ||
| 1285 | r53.listen_until_close(), | ||
| 1286 | r55.listen_until_close(), | ||
| 1287 | r56.listen_until_close(), | ||
| 1288 | ); | ||
| 1289 | cli_tester_handle.join().unwrap()?; | ||
| 1290 | Ok(()) | ||
| 1291 | } | ||
| 1292 | |||
| 1293 | #[tokio::test] | ||
| 1294 | #[serial] | ||
| 1295 | async fn check_cli_output() -> Result<()> { | ||
| 1296 | run_test_async().await?; | ||
| 1297 | Ok(()) | ||
| 1298 | } | ||
| 1299 | } | ||
| 1300 | |||
| 1301 | #[tokio::test] | ||
| 1302 | #[serial] | ||
| 1303 | async fn three_patch_events() -> Result<()> { | ||
| 1304 | let (_, _, r53, r55, r56) = prep_run_create_proposal().await?; | ||
| 1305 | for relay in [&r53, &r55, &r56] { | ||
| 1306 | assert_eq!(relay.events.iter().filter(|e| is_patch(e)).count(), 3); | ||
| 1307 | } | ||
| 1308 | Ok(()) | ||
| 1309 | } | ||
| 1310 | |||
| 1311 | #[tokio::test] | ||
| 1312 | #[serial] | ||
| 1313 | async fn first_patch_is_ancestor_and_root_others_in_correct_order() -> Result<()> { | ||
| 1314 | let (_, _, r53, r55, r56) = prep_run_create_proposal().await?; | ||
| 1315 | for relay in [&r53, &r55, &r56] { | ||
| 1316 | let patch_events = relay | ||
| 1317 | .events | ||
| 1318 | .iter() | ||
| 1319 | .filter(|e| is_patch(e)) | ||
| 1320 | .collect::<Vec<&nostr::Event>>(); | ||
| 1321 | |||
| 1322 | // first patch tagged as root | ||
| 1323 | assert!( | ||
| 1324 | patch_events[0] | ||
| 1325 | .iter_tags() | ||
| 1326 | .any(|t| t.as_vec()[0].eq("t") && t.as_vec()[1].eq("root")) | ||
| 1327 | ); | ||
| 1328 | // first patch is ancestor | ||
| 1329 | assert_eq!( | ||
| 1330 | patch_events[0] | ||
| 1331 | .iter_tags() | ||
| 1332 | .find(|t| t.as_vec()[0].eq("commit")) | ||
| 1333 | .unwrap() | ||
| 1334 | .as_vec()[1], | ||
| 1335 | "431b84edc0d2fa118d63faa3c2db9c73d630a5ae" | ||
| 1336 | ); | ||
| 1337 | // second patch not tagged as root | ||
| 1338 | assert_eq!( | ||
| 1339 | patch_events[1] | ||
| 1340 | .iter_tags() | ||
| 1341 | .find(|t| t.as_vec()[0].eq("commit")) | ||
| 1342 | .unwrap() | ||
| 1343 | .as_vec()[1], | ||
| 1344 | "232efb37ebc67692c9e9ff58b83c0d3d63971a0a" | ||
| 1345 | ); | ||
| 1346 | // second patch not tagged as root | ||
| 1347 | assert_eq!( | ||
| 1348 | patch_events[2] | ||
| 1349 | .iter_tags() | ||
| 1350 | .find(|t| t.as_vec()[0].eq("commit")) | ||
| 1351 | .unwrap() | ||
| 1352 | .as_vec()[1], | ||
| 1353 | "fe973a840fba2a8ab37dd505c154854a69a6505c" | ||
| 1354 | ); | ||
| 1355 | } | ||
| 1356 | Ok(()) | ||
| 1357 | } | ||
| 1358 | } | ||
| 1133 | } | 1359 | } |