diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2025-11-19 11:55:32 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2025-11-19 15:43:29 +0000 |
| commit | fa065ad128882755f2a988d6203b59a2ab5e38ff (patch) | |
| tree | e8326de70a6e6ea56b5bf4250e0a00a3cda4afed /tests | |
| parent | 98c6fa4bfa897ff0b8f9c95ea698d4d065b5e9f3 (diff) | |
add landing page and nostr-relay-builder relay on same port
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/nip01_compliance.rs | 50 | ||||
| -rw-r--r-- | tests/nip34_announcements.rs | 111 |
2 files changed, 74 insertions, 87 deletions
diff --git a/tests/nip01_compliance.rs b/tests/nip01_compliance.rs index 3e2fdd3..05957fd 100644 --- a/tests/nip01_compliance.rs +++ b/tests/nip01_compliance.rs | |||
| @@ -39,22 +39,22 @@ use grasp_audit::*; | |||
| 39 | async fn test_nip01_smoke() { | 39 | async fn test_nip01_smoke() { |
| 40 | // Start test relay | 40 | // Start test relay |
| 41 | let relay = TestRelay::start().await; | 41 | let relay = TestRelay::start().await; |
| 42 | 42 | ||
| 43 | // Create audit client in CI mode (isolated, no cleanup needed) | 43 | // Create audit client in CI mode (isolated, no cleanup needed) |
| 44 | let config = AuditConfig::ci(); | 44 | let config = AuditConfig::ci(); |
| 45 | let client = AuditClient::new(relay.url(), config) | 45 | let client = AuditClient::new(relay.url(), config) |
| 46 | .await | 46 | .await |
| 47 | .expect("Failed to create audit client"); | 47 | .expect("Failed to create audit client"); |
| 48 | 48 | ||
| 49 | // Run all NIP-01 smoke tests | 49 | // Run all NIP-01 smoke tests |
| 50 | let results = specs::Nip01SmokeTests::run_all(&client).await; | 50 | let results = specs::Nip01SmokeTests::run_all(&client).await; |
| 51 | 51 | ||
| 52 | // Print detailed report | 52 | // Print detailed report |
| 53 | results.print_report(); | 53 | results.print_report(); |
| 54 | 54 | ||
| 55 | // Stop relay | 55 | // Stop relay |
| 56 | relay.stop().await; | 56 | relay.stop().await; |
| 57 | 57 | ||
| 58 | // Assert all tests passed | 58 | // Assert all tests passed |
| 59 | assert!( | 59 | assert!( |
| 60 | results.all_passed(), | 60 | results.all_passed(), |
| @@ -70,20 +70,20 @@ async fn test_nip01_smoke() { | |||
| 70 | /// for more granular testing or debugging. | 70 | /// for more granular testing or debugging. |
| 71 | #[tokio::test] | 71 | #[tokio::test] |
| 72 | async fn test_nip01_individual_tests() { | 72 | async fn test_nip01_individual_tests() { |
| 73 | use grasp_audit::specs::nip01_smoke::Nip01SmokeTests; | 73 | use grasp_audit::specs::grasp01::Nip01SmokeTests; |
| 74 | 74 | ||
| 75 | let relay = TestRelay::start().await; | 75 | let relay = TestRelay::start().await; |
| 76 | let config = AuditConfig::ci(); | 76 | let config = AuditConfig::ci(); |
| 77 | let client = AuditClient::new(relay.url(), config) | 77 | let client = AuditClient::new(relay.url(), config) |
| 78 | .await | 78 | .await |
| 79 | .expect("Failed to create audit client"); | 79 | .expect("Failed to create audit client"); |
| 80 | 80 | ||
| 81 | // We can't call private methods, so we'll run the full suite | 81 | // We can't call private methods, so we'll run the full suite |
| 82 | // This test is mainly to show the pattern | 82 | // This test is mainly to show the pattern |
| 83 | let all_results = Nip01SmokeTests::run_all(&client).await; | 83 | let all_results = Nip01SmokeTests::run_all(&client).await; |
| 84 | 84 | ||
| 85 | relay.stop().await; | 85 | relay.stop().await; |
| 86 | 86 | ||
| 87 | // Verify | 87 | // Verify |
| 88 | assert!(all_results.all_passed()); | 88 | assert!(all_results.all_passed()); |
| 89 | } | 89 | } |
| @@ -99,25 +99,25 @@ async fn test_relay_validates_events() { | |||
| 99 | let client = AuditClient::new(relay.url(), config) | 99 | let client = AuditClient::new(relay.url(), config) |
| 100 | .await | 100 | .await |
| 101 | .expect("Failed to create audit client"); | 101 | .expect("Failed to create audit client"); |
| 102 | 102 | ||
| 103 | // The validation tests are part of the smoke tests | 103 | // The validation tests are part of the smoke tests |
| 104 | let results = specs::Nip01SmokeTests::run_all(&client).await; | 104 | let results = specs::Nip01SmokeTests::run_all(&client).await; |
| 105 | 105 | ||
| 106 | // Check that validation tests exist and pass | 106 | // Check that validation tests exist and pass |
| 107 | let validation_tests: Vec<_> = results | 107 | let validation_tests: Vec<_> = results |
| 108 | .results | 108 | .results |
| 109 | .iter() | 109 | .iter() |
| 110 | .filter(|t| t.spec_ref.contains("validation")) | 110 | .filter(|t| t.spec_ref.contains("validation")) |
| 111 | .collect(); | 111 | .collect(); |
| 112 | 112 | ||
| 113 | relay.stop().await; | 113 | relay.stop().await; |
| 114 | 114 | ||
| 115 | // Should have validation tests | 115 | // Should have validation tests |
| 116 | assert!( | 116 | assert!( |
| 117 | !validation_tests.is_empty(), | 117 | !validation_tests.is_empty(), |
| 118 | "No validation tests found in NIP-01 smoke tests" | 118 | "No validation tests found in NIP-01 smoke tests" |
| 119 | ); | 119 | ); |
| 120 | 120 | ||
| 121 | // All validation tests should pass | 121 | // All validation tests should pass |
| 122 | for test in validation_tests { | 122 | for test in validation_tests { |
| 123 | assert!( | 123 | assert!( |
| @@ -137,18 +137,18 @@ async fn test_relay_lifecycle() { | |||
| 137 | // Start relay | 137 | // Start relay |
| 138 | let relay = TestRelay::start().await; | 138 | let relay = TestRelay::start().await; |
| 139 | let url = relay.url().to_string(); | 139 | let url = relay.url().to_string(); |
| 140 | 140 | ||
| 141 | // Verify we can connect | 141 | // Verify we can connect |
| 142 | let config = AuditConfig::ci(); | 142 | let config = AuditConfig::ci(); |
| 143 | let client = AuditClient::new(&url, config) | 143 | let client = AuditClient::new(&url, config) |
| 144 | .await | 144 | .await |
| 145 | .expect("Failed to connect to relay"); | 145 | .expect("Failed to connect to relay"); |
| 146 | 146 | ||
| 147 | assert!(client.is_connected().await, "Client should be connected"); | 147 | assert!(client.is_connected().await, "Client should be connected"); |
| 148 | 148 | ||
| 149 | // Stop relay | 149 | // Stop relay |
| 150 | relay.stop().await; | 150 | relay.stop().await; |
| 151 | 151 | ||
| 152 | // Note: We can't easily verify disconnection without modifying grasp-audit | 152 | // Note: We can't easily verify disconnection without modifying grasp-audit |
| 153 | // to expose connection state after relay shutdown. That's okay - the | 153 | // to expose connection state after relay shutdown. That's okay - the |
| 154 | // important part is that the relay starts and stops cleanly. | 154 | // important part is that the relay starts and stops cleanly. |
| @@ -162,28 +162,28 @@ async fn test_parallel_relays() { | |||
| 162 | // Start two relays simultaneously | 162 | // Start two relays simultaneously |
| 163 | let relay1 = TestRelay::start().await; | 163 | let relay1 = TestRelay::start().await; |
| 164 | let relay2 = TestRelay::start().await; | 164 | let relay2 = TestRelay::start().await; |
| 165 | 165 | ||
| 166 | // Should have different URLs (different ports) | 166 | // Should have different URLs (different ports) |
| 167 | assert_ne!( | 167 | assert_ne!( |
| 168 | relay1.url(), | 168 | relay1.url(), |
| 169 | relay2.url(), | 169 | relay2.url(), |
| 170 | "Relays should use different ports" | 170 | "Relays should use different ports" |
| 171 | ); | 171 | ); |
| 172 | 172 | ||
| 173 | // Both should be connectable | 173 | // Both should be connectable |
| 174 | let config = AuditConfig::ci(); | 174 | let config = AuditConfig::ci(); |
| 175 | 175 | ||
| 176 | let client1 = AuditClient::new(relay1.url(), config.clone()) | 176 | let client1 = AuditClient::new(relay1.url(), config.clone()) |
| 177 | .await | 177 | .await |
| 178 | .expect("Failed to connect to relay 1"); | 178 | .expect("Failed to connect to relay 1"); |
| 179 | 179 | ||
| 180 | let client2 = AuditClient::new(relay2.url(), config) | 180 | let client2 = AuditClient::new(relay2.url(), config) |
| 181 | .await | 181 | .await |
| 182 | .expect("Failed to connect to relay 2"); | 182 | .expect("Failed to connect to relay 2"); |
| 183 | 183 | ||
| 184 | assert!(client1.is_connected().await); | 184 | assert!(client1.is_connected().await); |
| 185 | assert!(client2.is_connected().await); | 185 | assert!(client2.is_connected().await); |
| 186 | 186 | ||
| 187 | // Clean up | 187 | // Clean up |
| 188 | relay1.stop().await; | 188 | relay1.stop().await; |
| 189 | relay2.stop().await; | 189 | relay2.stop().await; |
diff --git a/tests/nip34_announcements.rs b/tests/nip34_announcements.rs index 6e83bb6..535425d 100644 --- a/tests/nip34_announcements.rs +++ b/tests/nip34_announcements.rs | |||
| @@ -36,7 +36,9 @@ const KIND_REPOSITORY_ANNOUNCEMENT: u16 = 30617; | |||
| 36 | const KIND_REPOSITORY_STATE: u16 = 30618; | 36 | const KIND_REPOSITORY_STATE: u16 = 30618; |
| 37 | 37 | ||
| 38 | /// Helper to connect to a test relay | 38 | /// Helper to connect to a test relay |
| 39 | async fn connect_to_relay(url: &str) -> tokio_tungstenite::WebSocketStream<tokio_tungstenite::MaybeTlsStream<tokio::net::TcpStream>> { | 39 | async fn connect_to_relay( |
| 40 | url: &str, | ||
| 41 | ) -> tokio_tungstenite::WebSocketStream<tokio_tungstenite::MaybeTlsStream<tokio::net::TcpStream>> { | ||
| 40 | let (ws, _) = connect_async(url) | 42 | let (ws, _) = connect_async(url) |
| 41 | .await | 43 | .await |
| 42 | .expect("Failed to connect to relay"); | 44 | .expect("Failed to connect to relay"); |
| @@ -54,10 +56,7 @@ fn create_announcement( | |||
| 54 | let mut tags = vec![Tag::custom(TagKind::d(), vec![identifier.to_string()])]; | 56 | let mut tags = vec![Tag::custom(TagKind::d(), vec![identifier.to_string()])]; |
| 55 | 57 | ||
| 56 | for url in clone_urls { | 58 | for url in clone_urls { |
| 57 | tags.push(Tag::custom( | 59 | tags.push(Tag::custom(TagKind::Clone, vec![url])); |
| 58 | TagKind::Clone, | ||
| 59 | vec![url], | ||
| 60 | )); | ||
| 61 | } | 60 | } |
| 62 | 61 | ||
| 63 | for relay in relays { | 62 | for relay in relays { |
| @@ -94,10 +93,10 @@ fn create_state(keys: &Keys, identifier: &str, branches: Vec<(&str, &str)>) -> n | |||
| 94 | #[tokio::test] | 93 | #[tokio::test] |
| 95 | async fn test_relay_accepts_connection() { | 94 | async fn test_relay_accepts_connection() { |
| 96 | let relay = TestRelay::start().await; | 95 | let relay = TestRelay::start().await; |
| 97 | 96 | ||
| 98 | // Try to connect | 97 | // Try to connect |
| 99 | let ws = connect_to_relay(relay.url()).await; | 98 | let ws = connect_to_relay(relay.url()).await; |
| 100 | 99 | ||
| 101 | drop(ws); // Clean disconnect | 100 | drop(ws); // Clean disconnect |
| 102 | } | 101 | } |
| 103 | 102 | ||
| @@ -119,14 +118,14 @@ async fn test_accepts_valid_announcement() { | |||
| 119 | 118 | ||
| 120 | // Send event | 119 | // Send event |
| 121 | let event_msg = json!(["EVENT", event]); | 120 | let event_msg = json!(["EVENT", event]); |
| 122 | ws.send(Message::Text(event_msg.to_string())) | 121 | ws.send(Message::Text(event_msg.to_string().into())) |
| 123 | .await | 122 | .await |
| 124 | .expect("Failed to send event"); | 123 | .expect("Failed to send event"); |
| 125 | 124 | ||
| 126 | // Read response | 125 | // Read response |
| 127 | if let Some(Ok(Message::Text(text))) = ws.next().await { | 126 | if let Some(Ok(Message::Text(text))) = ws.next().await { |
| 128 | let response: Value = serde_json::from_str(&text).expect("Failed to parse response"); | 127 | let response: Value = serde_json::from_str(&text).expect("Failed to parse response"); |
| 129 | 128 | ||
| 130 | // Should be ["OK", event_id, true, ""] | 129 | // Should be ["OK", event_id, true, ""] |
| 131 | assert_eq!(response[0], "OK"); | 130 | assert_eq!(response[0], "OK"); |
| 132 | assert_eq!(response[1], event.id.to_hex()); | 131 | assert_eq!(response[1], event.id.to_hex()); |
| @@ -146,9 +145,7 @@ async fn test_rejects_announcement_without_clone() { | |||
| 146 | let relay = TestRelay::start().await; | 145 | let relay = TestRelay::start().await; |
| 147 | let keys = Keys::generate(); | 146 | let keys = Keys::generate(); |
| 148 | 147 | ||
| 149 | let (mut ws, _) = connect_async(relay.url()) | 148 | let (mut ws, _) = connect_async(relay.url()).await.expect("Failed to connect"); |
| 150 | .await | ||
| 151 | .expect("Failed to connect"); | ||
| 152 | 149 | ||
| 153 | // Missing clone tag | 150 | // Missing clone tag |
| 154 | let event = create_announcement( | 151 | let event = create_announcement( |
| @@ -160,18 +157,18 @@ async fn test_rejects_announcement_without_clone() { | |||
| 160 | ); | 157 | ); |
| 161 | 158 | ||
| 162 | let event_msg = json!(["EVENT", event]); | 159 | let event_msg = json!(["EVENT", event]); |
| 163 | ws.send(Message::Text(event_msg.to_string())) | 160 | ws.send(Message::Text(event_msg.to_string().into())) |
| 164 | .await | 161 | .await |
| 165 | .expect("Failed to send event"); | 162 | .expect("Failed to send event"); |
| 166 | 163 | ||
| 167 | if let Some(Ok(Message::Text(text))) = ws.next().await { | 164 | if let Some(Ok(Message::Text(text))) = ws.next().await { |
| 168 | let response: Value = serde_json::from_str(&text).expect("Failed to parse"); | 165 | let response: Value = serde_json::from_str(&text).expect("Failed to parse"); |
| 169 | 166 | ||
| 170 | // Should be rejected | 167 | // Should be rejected |
| 171 | assert_eq!(response[0], "OK"); | 168 | assert_eq!(response[0], "OK"); |
| 172 | assert_eq!(response[1], event.id.to_hex()); | 169 | assert_eq!(response[1], event.id.to_hex()); |
| 173 | assert_eq!(response[2], false, "Event should be rejected"); | 170 | assert_eq!(response[2], false, "Event should be rejected"); |
| 174 | 171 | ||
| 175 | let message = response[3].as_str().unwrap(); | 172 | let message = response[3].as_str().unwrap(); |
| 176 | assert!( | 173 | assert!( |
| 177 | message.contains("clone") || message.contains("invalid"), | 174 | message.contains("clone") || message.contains("invalid"), |
| @@ -190,9 +187,7 @@ async fn test_rejects_announcement_without_relay() { | |||
| 190 | let relay = TestRelay::start().await; | 187 | let relay = TestRelay::start().await; |
| 191 | let keys = Keys::generate(); | 188 | let keys = Keys::generate(); |
| 192 | 189 | ||
| 193 | let (mut ws, _) = connect_async(relay.url()) | 190 | let (mut ws, _) = connect_async(relay.url()).await.expect("Failed to connect"); |
| 194 | .await | ||
| 195 | .expect("Failed to connect"); | ||
| 196 | 191 | ||
| 197 | // Missing relay tag | 192 | // Missing relay tag |
| 198 | let event = create_announcement( | 193 | let event = create_announcement( |
| @@ -204,18 +199,18 @@ async fn test_rejects_announcement_without_relay() { | |||
| 204 | ); | 199 | ); |
| 205 | 200 | ||
| 206 | let event_msg = json!(["EVENT", event]); | 201 | let event_msg = json!(["EVENT", event]); |
| 207 | ws.send(Message::Text(event_msg.to_string())) | 202 | ws.send(Message::Text(event_msg.to_string().into())) |
| 208 | .await | 203 | .await |
| 209 | .expect("Failed to send event"); | 204 | .expect("Failed to send event"); |
| 210 | 205 | ||
| 211 | if let Some(Ok(Message::Text(text))) = ws.next().await { | 206 | if let Some(Ok(Message::Text(text))) = ws.next().await { |
| 212 | let response: Value = serde_json::from_str(&text).expect("Failed to parse"); | 207 | let response: Value = serde_json::from_str(&text).expect("Failed to parse"); |
| 213 | 208 | ||
| 214 | // Should be rejected | 209 | // Should be rejected |
| 215 | assert_eq!(response[0], "OK"); | 210 | assert_eq!(response[0], "OK"); |
| 216 | assert_eq!(response[1], event.id.to_hex()); | 211 | assert_eq!(response[1], event.id.to_hex()); |
| 217 | assert_eq!(response[2], false, "Event should be rejected"); | 212 | assert_eq!(response[2], false, "Event should be rejected"); |
| 218 | 213 | ||
| 219 | let message = response[3].as_str().unwrap(); | 214 | let message = response[3].as_str().unwrap(); |
| 220 | assert!( | 215 | assert!( |
| 221 | message.contains("relays") || message.contains("invalid"), | 216 | message.contains("relays") || message.contains("invalid"), |
| @@ -233,9 +228,7 @@ async fn test_rejects_announcement_for_other_service() { | |||
| 233 | let relay = TestRelay::start().await; | 228 | let relay = TestRelay::start().await; |
| 234 | let keys = Keys::generate(); | 229 | let keys = Keys::generate(); |
| 235 | 230 | ||
| 236 | let (mut ws, _) = connect_async(relay.url()) | 231 | let (mut ws, _) = connect_async(relay.url()).await.expect("Failed to connect"); |
| 237 | .await | ||
| 238 | .expect("Failed to connect"); | ||
| 239 | 232 | ||
| 240 | // Lists different service | 233 | // Lists different service |
| 241 | let event = create_announcement( | 234 | let event = create_announcement( |
| @@ -247,13 +240,13 @@ async fn test_rejects_announcement_for_other_service() { | |||
| 247 | ); | 240 | ); |
| 248 | 241 | ||
| 249 | let event_msg = json!(["EVENT", event]); | 242 | let event_msg = json!(["EVENT", event]); |
| 250 | ws.send(Message::Text(event_msg.to_string())) | 243 | ws.send(Message::Text(event_msg.to_string().into())) |
| 251 | .await | 244 | .await |
| 252 | .expect("Failed to send event"); | 245 | .expect("Failed to send event"); |
| 253 | 246 | ||
| 254 | if let Some(Ok(Message::Text(text))) = ws.next().await { | 247 | if let Some(Ok(Message::Text(text))) = ws.next().await { |
| 255 | let response: Value = serde_json::from_str(&text).expect("Failed to parse"); | 248 | let response: Value = serde_json::from_str(&text).expect("Failed to parse"); |
| 256 | 249 | ||
| 257 | // Should be rejected | 250 | // Should be rejected |
| 258 | assert_eq!(response[0], "OK"); | 251 | assert_eq!(response[0], "OK"); |
| 259 | assert_eq!(response[1], event.id.to_hex()); | 252 | assert_eq!(response[1], event.id.to_hex()); |
| @@ -269,9 +262,7 @@ async fn test_accepts_valid_state() { | |||
| 269 | let relay = TestRelay::start().await; | 262 | let relay = TestRelay::start().await; |
| 270 | let keys = Keys::generate(); | 263 | let keys = Keys::generate(); |
| 271 | 264 | ||
| 272 | let (mut ws, _) = connect_async(relay.url()) | 265 | let (mut ws, _) = connect_async(relay.url()).await.expect("Failed to connect"); |
| 273 | .await | ||
| 274 | .expect("Failed to connect"); | ||
| 275 | 266 | ||
| 276 | let event = create_state( | 267 | let event = create_state( |
| 277 | &keys, | 268 | &keys, |
| @@ -280,13 +271,13 @@ async fn test_accepts_valid_state() { | |||
| 280 | ); | 271 | ); |
| 281 | 272 | ||
| 282 | let event_msg = json!(["EVENT", event]); | 273 | let event_msg = json!(["EVENT", event]); |
| 283 | ws.send(Message::Text(event_msg.to_string())) | 274 | ws.send(Message::Text(event_msg.to_string().into())) |
| 284 | .await | 275 | .await |
| 285 | .expect("Failed to send event"); | 276 | .expect("Failed to send event"); |
| 286 | 277 | ||
| 287 | if let Some(Ok(Message::Text(text))) = ws.next().await { | 278 | if let Some(Ok(Message::Text(text))) = ws.next().await { |
| 288 | let response: Value = serde_json::from_str(&text).expect("Failed to parse"); | 279 | let response: Value = serde_json::from_str(&text).expect("Failed to parse"); |
| 289 | 280 | ||
| 290 | // Should be accepted | 281 | // Should be accepted |
| 291 | assert_eq!(response[0], "OK"); | 282 | assert_eq!(response[0], "OK"); |
| 292 | assert_eq!(response[1], event.id.to_hex()); | 283 | assert_eq!(response[1], event.id.to_hex()); |
| @@ -302,9 +293,7 @@ async fn test_accepts_state_with_multiple_branches() { | |||
| 302 | let relay = TestRelay::start().await; | 293 | let relay = TestRelay::start().await; |
| 303 | let keys = Keys::generate(); | 294 | let keys = Keys::generate(); |
| 304 | 295 | ||
| 305 | let (mut ws, _) = connect_async(relay.url()) | 296 | let (mut ws, _) = connect_async(relay.url()).await.expect("Failed to connect"); |
| 306 | .await | ||
| 307 | .expect("Failed to connect"); | ||
| 308 | 297 | ||
| 309 | let event = create_state( | 298 | let event = create_state( |
| 310 | &keys, | 299 | &keys, |
| @@ -317,13 +306,13 @@ async fn test_accepts_state_with_multiple_branches() { | |||
| 317 | ); | 306 | ); |
| 318 | 307 | ||
| 319 | let event_msg = json!(["EVENT", event]); | 308 | let event_msg = json!(["EVENT", event]); |
| 320 | ws.send(Message::Text(event_msg.to_string())) | 309 | ws.send(Message::Text(event_msg.to_string().into())) |
| 321 | .await | 310 | .await |
| 322 | .expect("Failed to send event"); | 311 | .expect("Failed to send event"); |
| 323 | 312 | ||
| 324 | if let Some(Ok(Message::Text(text))) = ws.next().await { | 313 | if let Some(Ok(Message::Text(text))) = ws.next().await { |
| 325 | let response: Value = serde_json::from_str(&text).expect("Failed to parse"); | 314 | let response: Value = serde_json::from_str(&text).expect("Failed to parse"); |
| 326 | 315 | ||
| 327 | assert_eq!(response[0], "OK"); | 316 | assert_eq!(response[0], "OK"); |
| 328 | assert_eq!(response[2], true, "State event should be accepted"); | 317 | assert_eq!(response[2], true, "State event should be accepted"); |
| 329 | } else { | 318 | } else { |
| @@ -337,9 +326,7 @@ async fn test_rejects_state_without_identifier() { | |||
| 337 | let relay = TestRelay::start().await; | 326 | let relay = TestRelay::start().await; |
| 338 | let keys = Keys::generate(); | 327 | let keys = Keys::generate(); |
| 339 | 328 | ||
| 340 | let (mut ws, _) = connect_async(relay.url()) | 329 | let (mut ws, _) = connect_async(relay.url()).await.expect("Failed to connect"); |
| 341 | .await | ||
| 342 | .expect("Failed to connect"); | ||
| 343 | 330 | ||
| 344 | // Create state without identifier | 331 | // Create state without identifier |
| 345 | let event = EventBuilder::new(Kind::from(KIND_REPOSITORY_STATE), "") | 332 | let event = EventBuilder::new(Kind::from(KIND_REPOSITORY_STATE), "") |
| @@ -347,18 +334,18 @@ async fn test_rejects_state_without_identifier() { | |||
| 347 | .expect("Failed to sign event"); | 334 | .expect("Failed to sign event"); |
| 348 | 335 | ||
| 349 | let event_msg = json!(["EVENT", event]); | 336 | let event_msg = json!(["EVENT", event]); |
| 350 | ws.send(Message::Text(event_msg.to_string())) | 337 | ws.send(Message::Text(event_msg.to_string().into())) |
| 351 | .await | 338 | .await |
| 352 | .expect("Failed to send event"); | 339 | .expect("Failed to send event"); |
| 353 | 340 | ||
| 354 | if let Some(Ok(Message::Text(text))) = ws.next().await { | 341 | if let Some(Ok(Message::Text(text))) = ws.next().await { |
| 355 | let response: Value = serde_json::from_str(&text).expect("Failed to parse"); | 342 | let response: Value = serde_json::from_str(&text).expect("Failed to parse"); |
| 356 | 343 | ||
| 357 | // Should be rejected | 344 | // Should be rejected |
| 358 | assert_eq!(response[0], "OK"); | 345 | assert_eq!(response[0], "OK"); |
| 359 | assert_eq!(response[1], event.id.to_hex()); | 346 | assert_eq!(response[1], event.id.to_hex()); |
| 360 | assert_eq!(response[2], false, "Event should be rejected"); | 347 | assert_eq!(response[2], false, "Event should be rejected"); |
| 361 | 348 | ||
| 362 | let message = response[3].as_str().unwrap(); | 349 | let message = response[3].as_str().unwrap(); |
| 363 | assert!( | 350 | assert!( |
| 364 | message.contains("identifier") || message.contains("invalid"), | 351 | message.contains("identifier") || message.contains("invalid"), |
| @@ -376,21 +363,22 @@ async fn test_query_announcements() { | |||
| 376 | let relay = TestRelay::start().await; | 363 | let relay = TestRelay::start().await; |
| 377 | let keys = Keys::generate(); | 364 | let keys = Keys::generate(); |
| 378 | 365 | ||
| 379 | let (mut ws, _) = connect_async(relay.url()) | 366 | let (mut ws, _) = connect_async(relay.url()).await.expect("Failed to connect"); |
| 380 | .await | ||
| 381 | .expect("Failed to connect"); | ||
| 382 | 367 | ||
| 383 | // Send an announcement | 368 | // Send an announcement |
| 384 | let event = create_announcement( | 369 | let event = create_announcement( |
| 385 | &keys, | 370 | &keys, |
| 386 | &relay.domain(), | 371 | &relay.domain(), |
| 387 | "query-test-repo", | 372 | "query-test-repo", |
| 388 | vec![format!("https://{}/alice/query-test-repo.git", relay.domain())], | 373 | vec![format!( |
| 374 | "https://{}/alice/query-test-repo.git", | ||
| 375 | relay.domain() | ||
| 376 | )], | ||
| 389 | vec![format!("wss://{}", relay.domain())], | 377 | vec![format!("wss://{}", relay.domain())], |
| 390 | ); | 378 | ); |
| 391 | 379 | ||
| 392 | let event_msg = json!(["EVENT", event]); | 380 | let event_msg = json!(["EVENT", event]); |
| 393 | ws.send(Message::Text(event_msg.to_string())) | 381 | ws.send(Message::Text(event_msg.to_string().into())) |
| 394 | .await | 382 | .await |
| 395 | .expect("Failed to send event"); | 383 | .expect("Failed to send event"); |
| 396 | 384 | ||
| @@ -409,7 +397,7 @@ async fn test_query_announcements() { | |||
| 409 | } | 397 | } |
| 410 | ]); | 398 | ]); |
| 411 | 399 | ||
| 412 | ws.send(Message::Text(req.to_string())) | 400 | ws.send(Message::Text(req.to_string().into())) |
| 413 | .await | 401 | .await |
| 414 | .expect("Failed to send REQ"); | 402 | .expect("Failed to send REQ"); |
| 415 | 403 | ||
| @@ -420,7 +408,7 @@ async fn test_query_announcements() { | |||
| 420 | for _ in 0..10 { | 408 | for _ in 0..10 { |
| 421 | if let Some(Ok(Message::Text(text))) = ws.next().await { | 409 | if let Some(Ok(Message::Text(text))) = ws.next().await { |
| 422 | let response: Value = serde_json::from_str(&text).expect("Failed to parse"); | 410 | let response: Value = serde_json::from_str(&text).expect("Failed to parse"); |
| 423 | 411 | ||
| 424 | if response[0] == "EVENT" { | 412 | if response[0] == "EVENT" { |
| 425 | assert_eq!(response[1], "test-sub"); | 413 | assert_eq!(response[1], "test-sub"); |
| 426 | found_event = true; | 414 | found_event = true; |
| @@ -442,9 +430,7 @@ async fn test_query_states() { | |||
| 442 | let relay = TestRelay::start().await; | 430 | let relay = TestRelay::start().await; |
| 443 | let keys = Keys::generate(); | 431 | let keys = Keys::generate(); |
| 444 | 432 | ||
| 445 | let (mut ws, _) = connect_async(relay.url()) | 433 | let (mut ws, _) = connect_async(relay.url()).await.expect("Failed to connect"); |
| 446 | .await | ||
| 447 | .expect("Failed to connect"); | ||
| 448 | 434 | ||
| 449 | // Send a state event | 435 | // Send a state event |
| 450 | let event = create_state( | 436 | let event = create_state( |
| @@ -454,7 +440,7 @@ async fn test_query_states() { | |||
| 454 | ); | 440 | ); |
| 455 | 441 | ||
| 456 | let event_msg = json!(["EVENT", event]); | 442 | let event_msg = json!(["EVENT", event]); |
| 457 | ws.send(Message::Text(event_msg.to_string())) | 443 | ws.send(Message::Text(event_msg.to_string().into())) |
| 458 | .await | 444 | .await |
| 459 | .expect("Failed to send event"); | 445 | .expect("Failed to send event"); |
| 460 | 446 | ||
| @@ -473,7 +459,7 @@ async fn test_query_states() { | |||
| 473 | } | 459 | } |
| 474 | ]); | 460 | ]); |
| 475 | 461 | ||
| 476 | ws.send(Message::Text(req.to_string())) | 462 | ws.send(Message::Text(req.to_string().into())) |
| 477 | .await | 463 | .await |
| 478 | .expect("Failed to send REQ"); | 464 | .expect("Failed to send REQ"); |
| 479 | 465 | ||
| @@ -484,7 +470,7 @@ async fn test_query_states() { | |||
| 484 | for _ in 0..10 { | 470 | for _ in 0..10 { |
| 485 | if let Some(Ok(Message::Text(text))) = ws.next().await { | 471 | if let Some(Ok(Message::Text(text))) = ws.next().await { |
| 486 | let response: Value = serde_json::from_str(&text).expect("Failed to parse"); | 472 | let response: Value = serde_json::from_str(&text).expect("Failed to parse"); |
| 487 | 473 | ||
| 488 | if response[0] == "EVENT" { | 474 | if response[0] == "EVENT" { |
| 489 | assert_eq!(response[1], "test-sub"); | 475 | assert_eq!(response[1], "test-sub"); |
| 490 | found_event = true; | 476 | found_event = true; |
| @@ -506,21 +492,22 @@ async fn test_duplicate_announcement() { | |||
| 506 | let relay = TestRelay::start().await; | 492 | let relay = TestRelay::start().await; |
| 507 | let keys = Keys::generate(); | 493 | let keys = Keys::generate(); |
| 508 | 494 | ||
| 509 | let (mut ws, _) = connect_async(relay.url()) | 495 | let (mut ws, _) = connect_async(relay.url()).await.expect("Failed to connect"); |
| 510 | .await | ||
| 511 | .expect("Failed to connect"); | ||
| 512 | 496 | ||
| 513 | let event = create_announcement( | 497 | let event = create_announcement( |
| 514 | &keys, | 498 | &keys, |
| 515 | &relay.domain(), | 499 | &relay.domain(), |
| 516 | "duplicate-test", | 500 | "duplicate-test", |
| 517 | vec![format!("https://{}/alice/duplicate-test.git", relay.domain())], | 501 | vec![format!( |
| 502 | "https://{}/alice/duplicate-test.git", | ||
| 503 | relay.domain() | ||
| 504 | )], | ||
| 518 | vec![format!("wss://{}", relay.domain())], | 505 | vec![format!("wss://{}", relay.domain())], |
| 519 | ); | 506 | ); |
| 520 | 507 | ||
| 521 | // Send first time | 508 | // Send first time |
| 522 | let event_msg = json!(["EVENT", event]); | 509 | let event_msg = json!(["EVENT", event]); |
| 523 | ws.send(Message::Text(event_msg.to_string())) | 510 | ws.send(Message::Text(event_msg.to_string().into())) |
| 524 | .await | 511 | .await |
| 525 | .expect("Failed to send event"); | 512 | .expect("Failed to send event"); |
| 526 | 513 | ||
| @@ -531,14 +518,14 @@ async fn test_duplicate_announcement() { | |||
| 531 | 518 | ||
| 532 | // Send second time (duplicate) | 519 | // Send second time (duplicate) |
| 533 | let event_msg = json!(["EVENT", event]); | 520 | let event_msg = json!(["EVENT", event]); |
| 534 | ws.send(Message::Text(event_msg.to_string())) | 521 | ws.send(Message::Text(event_msg.to_string().into())) |
| 535 | .await | 522 | .await |
| 536 | .expect("Failed to send event"); | 523 | .expect("Failed to send event"); |
| 537 | 524 | ||
| 538 | if let Some(Ok(Message::Text(text))) = ws.next().await { | 525 | if let Some(Ok(Message::Text(text))) = ws.next().await { |
| 539 | let response2: Value = serde_json::from_str(&text).expect("Failed to parse"); | 526 | let response2: Value = serde_json::from_str(&text).expect("Failed to parse"); |
| 540 | assert_eq!(response2[2], true, "Duplicate should be acknowledged"); | 527 | assert_eq!(response2[2], true, "Duplicate should be acknowledged"); |
| 541 | 528 | ||
| 542 | let message = response2[3].as_str().unwrap(); | 529 | let message = response2[3].as_str().unwrap(); |
| 543 | assert!( | 530 | assert!( |
| 544 | message.contains("duplicate") || message.is_empty(), | 531 | message.contains("duplicate") || message.is_empty(), |