diff options
Diffstat (limited to 'test_utils')
| -rw-r--r-- | test_utils/Cargo.toml | 8 | ||||
| -rw-r--r-- | test_utils/src/git.rs | 12 | ||||
| -rw-r--r-- | test_utils/src/lib.rs | 54 | ||||
| -rw-r--r-- | test_utils/src/relay.rs | 27 |
4 files changed, 57 insertions, 44 deletions
diff --git a/test_utils/Cargo.toml b/test_utils/Cargo.toml index b354ff4..951bd39 100644 --- a/test_utils/Cargo.toml +++ b/test_utils/Cargo.toml | |||
| @@ -10,10 +10,10 @@ dialoguer = "0.10.4" | |||
| 10 | directories = "5.0.1" | 10 | directories = "5.0.1" |
| 11 | futures = "0.3.28" | 11 | futures = "0.3.28" |
| 12 | git2 = "0.19.0" | 12 | git2 = "0.19.0" |
| 13 | nostr = "0.37.0" | 13 | nostr = "0.40.0" |
| 14 | nostr-database = "0.37.0" | 14 | nostr-database = "0.40.0" |
| 15 | nostr-lmdb = "0.37.0" | 15 | nostr-lmdb = "0.40.0" |
| 16 | nostr-sdk = "0.37.0" | 16 | nostr-sdk = "0.40.0" |
| 17 | once_cell = "1.18.0" | 17 | once_cell = "1.18.0" |
| 18 | rand = "0.8" | 18 | rand = "0.8" |
| 19 | rexpect = { git = "https://github.com/rust-cli/rexpect.git", rev = "9eb61dd" } | 19 | rexpect = { git = "https://github.com/rust-cli/rexpect.git", rev = "9eb61dd" } |
diff --git a/test_utils/src/git.rs b/test_utils/src/git.rs index 474fc59..5942a54 100644 --- a/test_utils/src/git.rs +++ b/test_utils/src/git.rs | |||
| @@ -9,7 +9,7 @@ use std::{ | |||
| 9 | 9 | ||
| 10 | use anyhow::{Context, Result}; | 10 | use anyhow::{Context, Result}; |
| 11 | use git2::{Branch, Oid, RepositoryInitOptions, Signature, Time}; | 11 | use git2::{Branch, Oid, RepositoryInitOptions, Signature, Time}; |
| 12 | use nostr::nips::nip01::Coordinate; | 12 | use nostr::nips::{nip01::Coordinate, nip19::Nip19Coordinate}; |
| 13 | use nostr_sdk::{Kind, RelayUrl, ToBech32}; | 13 | use nostr_sdk::{Kind, RelayUrl, ToBech32}; |
| 14 | 14 | ||
| 15 | use crate::generate_repo_ref_event; | 15 | use crate::generate_repo_ref_event; |
| @@ -23,10 +23,12 @@ pub struct GitTestRepo { | |||
| 23 | impl Default for GitTestRepo { | 23 | impl Default for GitTestRepo { |
| 24 | fn default() -> Self { | 24 | fn default() -> Self { |
| 25 | let repo_event = generate_repo_ref_event(); | 25 | let repo_event = generate_repo_ref_event(); |
| 26 | let coordinate = Coordinate { | 26 | let coordinate = Nip19Coordinate { |
| 27 | kind: Kind::GitRepoAnnouncement, | 27 | coordinate: Coordinate { |
| 28 | public_key: repo_event.pubkey, | 28 | kind: Kind::GitRepoAnnouncement, |
| 29 | identifier: repo_event.tags.identifier().unwrap().to_string(), | 29 | public_key: repo_event.pubkey, |
| 30 | identifier: repo_event.tags.identifier().unwrap().to_string(), | ||
| 31 | }, | ||
| 30 | relays: vec![ | 32 | relays: vec![ |
| 31 | RelayUrl::parse("ws://localhost:8055").unwrap(), | 33 | RelayUrl::parse("ws://localhost:8055").unwrap(), |
| 32 | RelayUrl::parse("ws://localhost:8056").unwrap(), | 34 | RelayUrl::parse("ws://localhost:8056").unwrap(), |
diff --git a/test_utils/src/lib.rs b/test_utils/src/lib.rs index 5c8d7a5..66d0df5 100644 --- a/test_utils/src/lib.rs +++ b/test_utils/src/lib.rs | |||
| @@ -1,4 +1,5 @@ | |||
| 1 | use std::{ | 1 | use std::{ |
| 2 | collections::HashSet, | ||
| 2 | ffi::OsStr, | 3 | ffi::OsStr, |
| 3 | path::{Path, PathBuf}, | 4 | path::{Path, PathBuf}, |
| 4 | str::FromStr, | 5 | str::FromStr, |
| @@ -8,13 +9,13 @@ use std::{ | |||
| 8 | 9 | ||
| 9 | use anyhow::{Context, Result, bail, ensure}; | 10 | use anyhow::{Context, Result, bail, ensure}; |
| 10 | use dialoguer::theme::{ColorfulTheme, Theme}; | 11 | use dialoguer::theme::{ColorfulTheme, Theme}; |
| 11 | use futures::executor::block_on; | 12 | use futures::{executor::block_on, future::join_all}; |
| 12 | use git::GitTestRepo; | 13 | use git::GitTestRepo; |
| 13 | use git2::{Signature, Time}; | 14 | use git2::{Signature, Time}; |
| 14 | use nostr::{self, Kind, Tag, nips::nip65::RelayMetadata}; | 15 | use nostr::{self, Kind, Tag, nips::nip65::RelayMetadata}; |
| 15 | use nostr_database::NostrEventsDatabase; | 16 | use nostr_database::NostrEventsDatabase; |
| 16 | use nostr_lmdb::NostrLMDB; | 17 | use nostr_lmdb::NostrLMDB; |
| 17 | use nostr_sdk::{Client, NostrSigner, TagStandard, serde_json}; | 18 | use nostr_sdk::{Client, Event, NostrSigner, TagStandard, serde_json}; |
| 18 | use once_cell::sync::Lazy; | 19 | use once_cell::sync::Lazy; |
| 19 | use rexpect::session::{Options, PtySession}; | 20 | use rexpect::session::{Options, PtySession}; |
| 20 | use strip_ansi_escapes::strip_str; | 21 | use strip_ansi_escapes::strip_str; |
| @@ -139,7 +140,7 @@ pub fn make_event_old_or_change_user( | |||
| 139 | &keys.public_key(), | 140 | &keys.public_key(), |
| 140 | &unsigned.created_at, | 141 | &unsigned.created_at, |
| 141 | &unsigned.kind, | 142 | &unsigned.kind, |
| 142 | &unsigned.tags.clone().to_vec(), | 143 | &unsigned.tags.clone(), |
| 143 | &unsigned.content, | 144 | &unsigned.content, |
| 144 | )); | 145 | )); |
| 145 | 146 | ||
| @@ -1107,14 +1108,24 @@ pub async fn get_events_from_cache( | |||
| 1107 | git_repo_path: &Path, | 1108 | git_repo_path: &Path, |
| 1108 | filters: Vec<nostr::Filter>, | 1109 | filters: Vec<nostr::Filter>, |
| 1109 | ) -> Result<Vec<nostr::Event>> { | 1110 | ) -> Result<Vec<nostr::Event>> { |
| 1110 | Ok(get_local_cache_database(git_repo_path) | 1111 | let db = get_local_cache_database(git_repo_path).await?; |
| 1111 | .await? | 1112 | |
| 1112 | .query(filters.clone()) | 1113 | let query_results = join_all(filters.into_iter().map(|filter| async { |
| 1113 | .await | 1114 | db.query(filter).await.context( |
| 1114 | .context( | ||
| 1115 | "failed to execute query on opened git repo nostr cache database .git/nostr-cache.lmdb", | 1115 | "failed to execute query on opened git repo nostr cache database .git/nostr-cache.lmdb", |
| 1116 | )? | 1116 | ) |
| 1117 | .to_vec()) | 1117 | })) |
| 1118 | .await; | ||
| 1119 | |||
| 1120 | // no Event is being mutated, just new items added to the set | ||
| 1121 | #[allow(clippy::mutable_key_type)] | ||
| 1122 | let mut events: HashSet<Event> = HashSet::new(); | ||
| 1123 | |||
| 1124 | for result in query_results { | ||
| 1125 | events.extend(result?); | ||
| 1126 | } | ||
| 1127 | |||
| 1128 | Ok(events.into_iter().collect()) | ||
| 1118 | } | 1129 | } |
| 1119 | 1130 | ||
| 1120 | pub fn get_proposal_branch_name( | 1131 | pub fn get_proposal_branch_name( |
| @@ -1436,19 +1447,18 @@ fn get_first_proposal_event_id() -> Result<nostr::EventId> { | |||
| 1436 | Handle::current().block_on(client.add_relay("ws://localhost:8055"))?; | 1447 | Handle::current().block_on(client.add_relay("ws://localhost:8055"))?; |
| 1437 | Handle::current().block_on(client.connect_relay("ws://localhost:8055"))?; | 1448 | Handle::current().block_on(client.connect_relay("ws://localhost:8055"))?; |
| 1438 | let proposals = Handle::current() | 1449 | let proposals = Handle::current() |
| 1439 | .block_on(client.fetch_events( | 1450 | .block_on( |
| 1440 | vec![ | 1451 | client.fetch_events( |
| 1441 | nostr::Filter::default() | 1452 | nostr::Filter::default() |
| 1442 | .kind(nostr::Kind::GitPatch) | 1453 | .kind(nostr::Kind::GitPatch) |
| 1443 | .custom_tag( | 1454 | .custom_tags(nostr::SingleLetterTag::lowercase(nostr::Alphabet::T), vec![ |
| 1444 | nostr::SingleLetterTag::lowercase(nostr::Alphabet::T), | 1455 | "root", |
| 1445 | vec!["root"], | 1456 | ]), |
| 1446 | ), | 1457 | Duration::from_millis(500), |
| 1447 | ], | 1458 | ), |
| 1448 | Some(Duration::from_millis(500)), | 1459 | )? |
| 1449 | ))? | ||
| 1450 | .to_vec(); | 1460 | .to_vec(); |
| 1451 | Handle::current().block_on(client.disconnect())?; | 1461 | Handle::current().block_on(client.disconnect()); |
| 1452 | 1462 | ||
| 1453 | let proposal_1_id = proposals | 1463 | let proposal_1_id = proposals |
| 1454 | .iter() | 1464 | .iter() |
diff --git a/test_utils/src/relay.rs b/test_utils/src/relay.rs index 634b2d6..e820651 100644 --- a/test_utils/src/relay.rs +++ b/test_utils/src/relay.rs | |||
| @@ -48,7 +48,7 @@ impl<'a> Relay<'a> { | |||
| 48 | let ok_json = RelayMessage::Ok { | 48 | let ok_json = RelayMessage::Ok { |
| 49 | event_id: event.id, | 49 | event_id: event.id, |
| 50 | status: error.is_none(), | 50 | status: error.is_none(), |
| 51 | message: error.unwrap_or("").to_string(), | 51 | message: error.unwrap_or("").to_string().into(), |
| 52 | } | 52 | } |
| 53 | .as_json(); | 53 | .as_json(); |
| 54 | // bail!(format!("{}", &ok_json)); | 54 | // bail!(format!("{}", &ok_json)); |
| @@ -63,7 +63,7 @@ impl<'a> Relay<'a> { | |||
| 63 | let responder = self.clients.get(&client_id).unwrap(); | 63 | let responder = self.clients.get(&client_id).unwrap(); |
| 64 | 64 | ||
| 65 | Ok(responder.send(simple_websockets::Message::Text( | 65 | Ok(responder.send(simple_websockets::Message::Text( |
| 66 | RelayMessage::EndOfStoredEvents(subscription_id).as_json(), | 66 | RelayMessage::EndOfStoredEvents(std::borrow::Cow::Borrowed(&subscription_id)).as_json(), |
| 67 | ))) | 67 | ))) |
| 68 | } | 68 | } |
| 69 | 69 | ||
| @@ -79,8 +79,8 @@ impl<'a> Relay<'a> { | |||
| 79 | for event in events { | 79 | for event in events { |
| 80 | let res = responder.send(simple_websockets::Message::Text( | 80 | let res = responder.send(simple_websockets::Message::Text( |
| 81 | RelayMessage::Event { | 81 | RelayMessage::Event { |
| 82 | subscription_id: subscription_id.clone(), | 82 | subscription_id: std::borrow::Cow::Borrowed(subscription_id), |
| 83 | event: Box::new(event.clone()), | 83 | event: std::borrow::Cow::Borrowed(event), |
| 84 | } | 84 | } |
| 85 | .as_json(), | 85 | .as_json(), |
| 86 | )); | 86 | )); |
| @@ -156,12 +156,14 @@ impl<'a> Relay<'a> { | |||
| 156 | } | 156 | } |
| 157 | } | 157 | } |
| 158 | 158 | ||
| 159 | if let Ok((subscription_id, filters)) = get_nreq(&message) { | 159 | if let Ok((subscription_id, filter)) = get_nreq(&message) { |
| 160 | self.reqs.push(filters.clone()); | 160 | self.reqs.push(vec![filter.clone()]); |
| 161 | if let Some(listner) = self.req_listener { | 161 | if let Some(listner) = self.req_listener { |
| 162 | listner(self, client_id, subscription_id, filters)?; | 162 | listner(self, client_id, subscription_id, vec![filter.clone()])?; |
| 163 | } else { | 163 | } else { |
| 164 | self.respond_standard_req(client_id, &subscription_id, &filters)?; | 164 | self.respond_standard_req(client_id, &subscription_id, &[ |
| 165 | filter.clone() | ||
| 166 | ])?; | ||
| 165 | // self.respond_eose(client_id, subscription_id)?; | 167 | // self.respond_eose(client_id, subscription_id)?; |
| 166 | } | 168 | } |
| 167 | // respond with events | 169 | // respond with events |
| @@ -198,8 +200,7 @@ fn get_nevent(message: &simple_websockets::Message) -> Result<nostr::Event> { | |||
| 198 | if let simple_websockets::Message::Text(s) = message.clone() { | 200 | if let simple_websockets::Message::Text(s) = message.clone() { |
| 199 | let cm_result = ClientMessage::from_json(s); | 201 | let cm_result = ClientMessage::from_json(s); |
| 200 | if let Ok(ClientMessage::Event(event)) = cm_result { | 202 | if let Ok(ClientMessage::Event(event)) = cm_result { |
| 201 | let e = *event; | 203 | return Ok(event.into_owned()); |
| 202 | return Ok(e.clone()); | ||
| 203 | } | 204 | } |
| 204 | } | 205 | } |
| 205 | bail!("not nostr event") | 206 | bail!("not nostr event") |
| @@ -207,15 +208,15 @@ fn get_nevent(message: &simple_websockets::Message) -> Result<nostr::Event> { | |||
| 207 | 208 | ||
| 208 | fn get_nreq( | 209 | fn get_nreq( |
| 209 | message: &simple_websockets::Message, | 210 | message: &simple_websockets::Message, |
| 210 | ) -> Result<(nostr::SubscriptionId, Vec<nostr::Filter>)> { | 211 | ) -> Result<(nostr::SubscriptionId, nostr::Filter)> { |
| 211 | if let simple_websockets::Message::Text(s) = message.clone() { | 212 | if let simple_websockets::Message::Text(s) = message.clone() { |
| 212 | let cm_result = ClientMessage::from_json(s); | 213 | let cm_result = ClientMessage::from_json(s); |
| 213 | if let Ok(ClientMessage::Req { | 214 | if let Ok(ClientMessage::Req { |
| 214 | subscription_id, | 215 | subscription_id, |
| 215 | filters, | 216 | filter, |
| 216 | }) = cm_result | 217 | }) = cm_result |
| 217 | { | 218 | { |
| 218 | return Ok((subscription_id, filters)); | 219 | return Ok((subscription_id.into_owned(), filter.into_owned())); |
| 219 | } | 220 | } |
| 220 | } | 221 | } |
| 221 | bail!("not nostr event") | 222 | bail!("not nostr event") |