upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2025-11-19 11:55:32 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2025-11-19 15:43:29 +0000
commitfa065ad128882755f2a988d6203b59a2ab5e38ff (patch)
treee8326de70a6e6ea56b5bf4250e0a00a3cda4afed /tests
parent98c6fa4bfa897ff0b8f9c95ea698d4d065b5e9f3 (diff)
add landing page and nostr-relay-builder relay on same port
Diffstat (limited to 'tests')
-rw-r--r--tests/nip01_compliance.rs50
-rw-r--r--tests/nip34_announcements.rs111
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::*;
39async fn test_nip01_smoke() { 39async 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]
72async fn test_nip01_individual_tests() { 72async 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;
36const KIND_REPOSITORY_STATE: u16 = 30618; 36const KIND_REPOSITORY_STATE: u16 = 30618;
37 37
38/// Helper to connect to a test relay 38/// Helper to connect to a test relay
39async fn connect_to_relay(url: &str) -> tokio_tungstenite::WebSocketStream<tokio_tungstenite::MaybeTlsStream<tokio::net::TcpStream>> { 39async 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]
95async fn test_relay_accepts_connection() { 94async 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(),