+245
-34
Diff
round #0
+196
-34
Cargo.lock
+196
-34
Cargo.lock
···
914
914
"syn 2.0.117",
915
915
]
916
916
917
+
[[package]]
918
+
name = "axum-test"
919
+
version = "19.1.1"
920
+
source = "registry+https://github.com/rust-lang/crates.io-index"
921
+
checksum = "6a28640adad0e99978d38bc455b323c62a5cddc4e22f83eacde93f8c395ae7e3"
922
+
dependencies = [
923
+
"anyhow",
924
+
"axum",
925
+
"base64 0.22.1",
926
+
"bytes",
927
+
"bytesize",
928
+
"cookie",
929
+
"expect-json",
930
+
"futures-util",
931
+
"http 1.4.0",
932
+
"http-body-util",
933
+
"hyper 1.8.1",
934
+
"hyper-util",
935
+
"mime",
936
+
"pretty_assertions",
937
+
"reserve-port",
938
+
"rust-multipart-rfc7578_2",
939
+
"serde",
940
+
"serde_json",
941
+
"serde_urlencoded",
942
+
"tokio",
943
+
"tokio-tungstenite",
944
+
"tower",
945
+
"url",
946
+
"uuid",
947
+
]
948
+
917
949
[[package]]
918
950
name = "backon"
919
951
version = "1.6.0"
···
1274
1306
"either",
1275
1307
]
1276
1308
1309
+
[[package]]
1310
+
name = "bytesize"
1311
+
version = "2.3.1"
1312
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1313
+
checksum = "6bd91ee7b2422bcb158d90ef4d14f75ef67f340943fc4149891dcce8f8b972a3"
1314
+
1277
1315
[[package]]
1278
1316
name = "cbc"
1279
1317
version = "0.1.2"
···
1570
1608
source = "registry+https://github.com/rust-lang/crates.io-index"
1571
1609
checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6"
1572
1610
1611
+
[[package]]
1612
+
name = "cookie"
1613
+
version = "0.18.1"
1614
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1615
+
checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747"
1616
+
dependencies = [
1617
+
"time",
1618
+
"version_check",
1619
+
]
1620
+
1573
1621
[[package]]
1574
1622
name = "cordyceps"
1575
1623
version = "0.3.4"
···
2011
2059
source = "registry+https://github.com/rust-lang/crates.io-index"
2012
2060
checksum = "ab03c107fafeb3ee9f5925686dbb7a73bc76e3932abb0d2b365cb64b169cf04c"
2013
2061
2062
+
[[package]]
2063
+
name = "diff"
2064
+
version = "0.1.13"
2065
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2066
+
checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
2067
+
2014
2068
[[package]]
2015
2069
name = "digest"
2016
2070
version = "0.10.7"
···
2179
2233
"zeroize",
2180
2234
]
2181
2235
2236
+
[[package]]
2237
+
name = "email_address"
2238
+
version = "0.2.9"
2239
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2240
+
checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449"
2241
+
dependencies = [
2242
+
"serde",
2243
+
]
2244
+
2182
2245
[[package]]
2183
2246
name = "embedded-io"
2184
2247
version = "0.4.0"
···
2218
2281
source = "registry+https://github.com/rust-lang/crates.io-index"
2219
2282
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
2220
2283
2284
+
[[package]]
2285
+
name = "erased-serde"
2286
+
version = "0.4.10"
2287
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2288
+
checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec"
2289
+
dependencies = [
2290
+
"serde",
2291
+
"serde_core",
2292
+
"typeid",
2293
+
]
2294
+
2221
2295
[[package]]
2222
2296
name = "errno"
2223
2297
version = "0.3.14"
···
2270
2344
"pin-project-lite",
2271
2345
]
2272
2346
2347
+
[[package]]
2348
+
name = "expect-json"
2349
+
version = "1.10.1"
2350
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2351
+
checksum = "869f97f4abe8e78fc812a94ad6b721d72c4fb5532877c79610f2c238d7ccf6c4"
2352
+
dependencies = [
2353
+
"chrono",
2354
+
"email_address",
2355
+
"expect-json-macros",
2356
+
"num",
2357
+
"regex",
2358
+
"serde",
2359
+
"serde_json",
2360
+
"thiserror 2.0.18",
2361
+
"typetag",
2362
+
"uuid",
2363
+
]
2364
+
2365
+
[[package]]
2366
+
name = "expect-json-macros"
2367
+
version = "1.10.1"
2368
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2369
+
checksum = "6e6fdf550180a6c29a28cb9aac262dc0064c25735641d2317f670075e9a469d9"
2370
+
dependencies = [
2371
+
"proc-macro2",
2372
+
"quote",
2373
+
"syn 2.0.117",
2374
+
]
2375
+
2273
2376
[[package]]
2274
2377
name = "fastrand"
2275
2378
version = "2.3.0"
···
3429
3532
3430
3533
[[package]]
3431
3534
name = "ipconfig"
3432
-
version = "0.3.2"
3535
+
version = "0.3.4"
3433
3536
source = "registry+https://github.com/rust-lang/crates.io-index"
3434
-
checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f"
3537
+
checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222"
3435
3538
dependencies = [
3436
-
"socket2 0.5.10",
3539
+
"socket2 0.6.3",
3437
3540
"widestring",
3438
-
"windows-sys 0.48.0",
3439
-
"winreg",
3541
+
"windows-registry",
3542
+
"windows-result",
3543
+
"windows-sys 0.61.2",
3440
3544
]
3441
3545
3442
3546
[[package]]
···
3458
3562
3459
3563
[[package]]
3460
3564
name = "iri-string"
3461
-
version = "0.7.10"
3565
+
version = "0.7.11"
3462
3566
source = "registry+https://github.com/rust-lang/crates.io-index"
3463
-
checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a"
3567
+
checksum = "d8e7418f59cc01c88316161279a7f665217ae316b388e58a0d10e29f54f1e5eb"
3464
3568
dependencies = [
3465
3569
"memchr",
3466
3570
"serde",
···
3835
3939
3836
3940
[[package]]
3837
3941
name = "libredox"
3838
-
version = "0.1.14"
3942
+
version = "0.1.15"
3839
3943
source = "registry+https://github.com/rust-lang/crates.io-index"
3840
-
checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a"
3944
+
checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08"
3841
3945
dependencies = [
3842
3946
"bitflags",
3843
3947
"libc",
···
4341
4445
4342
4446
[[package]]
4343
4447
name = "num-conv"
4344
-
version = "0.2.0"
4448
+
version = "0.2.1"
4345
4449
source = "registry+https://github.com/rust-lang/crates.io-index"
4346
-
checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050"
4450
+
checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967"
4347
4451
4348
4452
[[package]]
4349
4453
name = "num-integer"
···
4891
4995
"url",
4892
4996
]
4893
4997
4998
+
[[package]]
4999
+
name = "pretty_assertions"
5000
+
version = "1.4.1"
5001
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5002
+
checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d"
5003
+
dependencies = [
5004
+
"diff",
5005
+
"yansi",
5006
+
]
5007
+
4894
5008
[[package]]
4895
5009
name = "prettyplease"
4896
5010
version = "0.2.37"
···
5573
5687
"web-sys",
5574
5688
]
5575
5689
5690
+
[[package]]
5691
+
name = "reserve-port"
5692
+
version = "2.4.0"
5693
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5694
+
checksum = "94070964579245eb2f76e62a7668fe87bd9969ed6c41256f3bf614e3323dd3cc"
5695
+
dependencies = [
5696
+
"thiserror 2.0.18",
5697
+
]
5698
+
5576
5699
[[package]]
5577
5700
name = "resolv-conf"
5578
5701
version = "0.7.6"
···
5634
5757
"zeroize",
5635
5758
]
5636
5759
5760
+
[[package]]
5761
+
name = "rust-multipart-rfc7578_2"
5762
+
version = "0.9.0"
5763
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5764
+
checksum = "00bdaa068902270ca7fa8619775e1838e23a63620abac0947ce0f715819b8cec"
5765
+
dependencies = [
5766
+
"bytes",
5767
+
"futures-core",
5768
+
"futures-util",
5769
+
"http 1.4.0",
5770
+
"mime",
5771
+
"rand 0.10.0",
5772
+
"thiserror 2.0.18",
5773
+
]
5774
+
5637
5775
[[package]]
5638
5776
name = "rustc-hash"
5639
5777
version = "2.1.1"
···
6007
6145
6008
6146
[[package]]
6009
6147
name = "serde_spanned"
6010
-
version = "1.0.4"
6148
+
version = "1.1.0"
6011
6149
source = "registry+https://github.com/rust-lang/crates.io-index"
6012
-
checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776"
6150
+
checksum = "876ac351060d4f882bb1032b6369eb0aef79ad9df1ea8bc404874d8cc3d0cd98"
6013
6151
dependencies = [
6014
6152
"serde_core",
6015
6153
]
···
6937
7075
6938
7076
[[package]]
6939
7077
name = "toml_datetime"
6940
-
version = "1.0.1+spec-1.1.0"
7078
+
version = "1.1.0+spec-1.1.0"
6941
7079
source = "registry+https://github.com/rust-lang/crates.io-index"
6942
-
checksum = "9b320e741db58cac564e26c607d3cc1fdc4a88fd36c879568c07856ed83ff3e9"
7080
+
checksum = "97251a7c317e03ad83774a8752a7e81fb6067740609f75ea2b585b569a59198f"
6943
7081
dependencies = [
6944
7082
"serde_core",
6945
7083
]
6946
7084
6947
7085
[[package]]
6948
7086
name = "toml_edit"
6949
-
version = "0.25.5+spec-1.1.0"
7087
+
version = "0.25.8+spec-1.1.0"
6950
7088
source = "registry+https://github.com/rust-lang/crates.io-index"
6951
-
checksum = "8ca1a40644a28bce036923f6a431df0b34236949d111cc07cb6dca830c9ef2e1"
7089
+
checksum = "16bff38f1d86c47f9ff0647e6838d7bb362522bdf44006c7068c2b1e606f1f3c"
6952
7090
dependencies = [
6953
7091
"indexmap 2.13.0",
6954
-
"toml_datetime 1.0.1+spec-1.1.0",
7092
+
"toml_datetime 1.1.0+spec-1.1.0",
6955
7093
"toml_parser",
6956
7094
"winnow 1.0.0",
6957
7095
]
6958
7096
6959
7097
[[package]]
6960
7098
name = "toml_parser"
6961
-
version = "1.0.10+spec-1.1.0"
7099
+
version = "1.1.0+spec-1.1.0"
6962
7100
source = "registry+https://github.com/rust-lang/crates.io-index"
6963
-
checksum = "7df25b4befd31c4816df190124375d5a20c6b6921e2cad937316de3fccd63420"
7101
+
checksum = "2334f11ee363607eb04df9b8fc8a13ca1715a72ba8662a26ac285c98aabb4011"
6964
7102
dependencies = [
6965
7103
"winnow 1.0.0",
6966
7104
]
6967
7105
6968
7106
[[package]]
6969
7107
name = "toml_writer"
6970
-
version = "1.0.7+spec-1.1.0"
7108
+
version = "1.1.0+spec-1.1.0"
6971
7109
source = "registry+https://github.com/rust-lang/crates.io-index"
6972
-
checksum = "f17aaa1c6e3dc22b1da4b6bba97d066e354c7945cac2f7852d4e4e7ca7a6b56d"
7110
+
checksum = "d282ade6016312faf3e41e57ebbba0c073e4056dab1232ab1cb624199648f8ed"
6973
7111
6974
7112
[[package]]
6975
7113
name = "tonic"
···
7624
7762
dependencies = [
7625
7763
"anyhow",
7626
7764
"axum",
7765
+
"axum-test",
7627
7766
"bytes",
7628
7767
"chrono",
7629
7768
"cid",
···
7632
7771
"jacquard-repo",
7633
7772
"serde",
7634
7773
"serde_ipld_dagcbor",
7774
+
"sqlx",
7635
7775
"tokio",
7776
+
"tokio-util",
7636
7777
"tracing",
7778
+
"tracing-subscriber",
7637
7779
"tranquil-config",
7638
7780
"tranquil-db-traits",
7639
7781
"tranquil-pds",
···
7702
7844
source = "registry+https://github.com/rust-lang/crates.io-index"
7703
7845
checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e"
7704
7846
7847
+
[[package]]
7848
+
name = "typeid"
7849
+
version = "1.0.3"
7850
+
source = "registry+https://github.com/rust-lang/crates.io-index"
7851
+
checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
7852
+
7705
7853
[[package]]
7706
7854
name = "typenum"
7707
7855
version = "1.19.0"
7708
7856
source = "registry+https://github.com/rust-lang/crates.io-index"
7709
7857
checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
7710
7858
7859
+
[[package]]
7860
+
name = "typetag"
7861
+
version = "0.2.21"
7862
+
source = "registry+https://github.com/rust-lang/crates.io-index"
7863
+
checksum = "be2212c8a9b9bcfca32024de14998494cf9a5dfa59ea1b829de98bac374b86bf"
7864
+
dependencies = [
7865
+
"erased-serde",
7866
+
"inventory",
7867
+
"once_cell",
7868
+
"serde",
7869
+
"typetag-impl",
7870
+
]
7871
+
7872
+
[[package]]
7873
+
name = "typetag-impl"
7874
+
version = "0.2.21"
7875
+
source = "registry+https://github.com/rust-lang/crates.io-index"
7876
+
checksum = "27a7a9b72ba121f6f1f6c3632b85604cac41aedb5ddc70accbebb6cac83de846"
7877
+
dependencies = [
7878
+
"proc-macro2",
7879
+
"quote",
7880
+
"syn 2.0.117",
7881
+
]
7882
+
7711
7883
[[package]]
7712
7884
name = "unicase"
7713
7885
version = "2.9.0"
···
7743
7915
7744
7916
[[package]]
7745
7917
name = "unicode-segmentation"
7746
-
version = "1.12.0"
7918
+
version = "1.13.1"
7747
7919
source = "registry+https://github.com/rust-lang/crates.io-index"
7748
-
checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
7920
+
checksum = "da36089a805484bcccfffe0739803392c8298778a2d2f09febf76fac5ad9025b"
7749
7921
7750
7922
[[package]]
7751
7923
name = "unicode-width"
···
8550
8722
"memchr",
8551
8723
]
8552
8724
8553
-
[[package]]
8554
-
name = "winreg"
8555
-
version = "0.50.0"
8556
-
source = "registry+https://github.com/rust-lang/crates.io-index"
8557
-
checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
8558
-
dependencies = [
8559
-
"cfg-if",
8560
-
"windows-sys 0.48.0",
8561
-
]
8562
-
8563
8725
[[package]]
8564
8726
name = "wiremock"
8565
8727
version = "0.6.5"
+6
crates/tranquil-sync/Cargo.toml
+6
crates/tranquil-sync/Cargo.toml
···
22
22
serde_ipld_dagcbor = { workspace = true }
23
23
tokio = { workspace = true }
24
24
tracing = { workspace = true }
25
+
26
+
[dev-dependencies]
27
+
axum-test = { version = "19.1.1", features = [ "ws" ] }
28
+
sqlx = { workspace = true }
29
+
tokio-util = { workspace = true }
30
+
tracing-subscriber.workspace = true
+43
crates/tranquil-sync/src/subscribe_repos.rs
+43
crates/tranquil-sync/src/subscribe_repos.rs
···
244
244
break;
245
245
};
246
246
247
+
info!("{msg:?}");
248
+
247
249
if let Message::Close(_) = msg {
248
250
info!("Client closed connection");
249
251
break;
···
254
256
}
255
257
Ok(())
256
258
}
259
+
260
+
#[cfg(test)]
261
+
mod test {
262
+
use std::net::SocketAddr;
263
+
use std::time::Duration;
264
+
265
+
use super::super::sync_routes;
266
+
use super::*;
267
+
use axum_test::TestServer;
268
+
use tokio_util::sync::CancellationToken;
269
+
270
+
#[tokio::test]
271
+
async fn test_websockets_closing() {
272
+
// tracing_subscriber::fmt().init();
273
+
tranquil_config::ensure_test_defaults();
274
+
let state = AppState::new(CancellationToken::new()).await.unwrap();
275
+
let app = sync_routes()
276
+
.with_state(state)
277
+
.into_make_service_with_connect_info::<SocketAddr>();
278
+
let server = TestServer::builder().http_transport().build(app);
279
+
280
+
const CONNECTIONS: usize = 100;
281
+
let mut open_sockets = Vec::with_capacity(CONNECTIONS);
282
+
283
+
for _ in 0..CONNECTIONS {
284
+
let socket = server
285
+
.get_websocket("/com.atproto.sync.subscribeRepos")
286
+
.await
287
+
.into_websocket()
288
+
.await;
289
+
open_sockets.push(socket);
290
+
}
291
+
assert_eq!(SUBSCRIBER_COUNT.load(Ordering::SeqCst), CONNECTIONS);
292
+
293
+
drop(open_sockets);
294
+
// disgusting awful hack to give tokio time to poll the server futures enough times to actually drop all the
295
+
// websockets on the other end as well
296
+
tokio::time::sleep(Duration::from_millis(8)).await;
297
+
assert_eq!(SUBSCRIBER_COUNT.load(Ordering::SeqCst), 0);
298
+
}
299
+
}
draft. def dont merge yet. lotsa issues