@@ -450,6 +450,7 @@ impl ClientBuilder {
450
450
451
451
let http_client = HttpClient :: new ( inner_http_client. clone ( ) , self . request_config ) ;
452
452
453
+ #[ allow( unused_variables) ]
453
454
let ( homeserver, well_known) = match homeserver_cfg {
454
455
HomeserverConfig :: Url ( url) => ( url, None ) ,
455
456
@@ -471,12 +472,19 @@ impl ClientBuilder {
471
472
let mut sliding_sync_proxy =
472
473
self . sliding_sync_proxy . as_ref ( ) . map ( |url| Url :: parse ( url) ) . transpose ( ) ?;
473
474
474
- #[ allow( unused_variables) ]
475
- if let Some ( well_known) = well_known {
476
- #[ cfg( feature = "experimental-sliding-sync" ) ]
477
- if sliding_sync_proxy. is_none ( ) {
478
- sliding_sync_proxy =
479
- well_known. sliding_sync_proxy . and_then ( |p| Url :: parse ( & p. url ) . ok ( ) )
475
+ #[ cfg( feature = "experimental-sliding-sync" ) ]
476
+ if self . is_simplified_sliding_sync_enabled {
477
+ // When using Simplified MSC3575, don't use a sliding sync proxy, allow the
478
+ // requests to be sent directly to the homeserver.
479
+ tracing:: info!( "Simplified MSC3575 is enabled, ignoring any sliding sync proxy." ) ;
480
+ sliding_sync_proxy = None ;
481
+ } else {
482
+ // Otherwise, if a proxy wasn't set, use the one discovered from the well-known.
483
+ if let Some ( well_known) = well_known {
484
+ if sliding_sync_proxy. is_none ( ) {
485
+ sliding_sync_proxy =
486
+ well_known. sliding_sync_proxy . and_then ( |p| Url :: parse ( & p. url ) . ok ( ) )
487
+ }
480
488
}
481
489
}
482
490
@@ -879,7 +887,7 @@ pub(crate) mod tests {
879
887
#[ async_test]
880
888
async fn test_discovery_invalid_server ( ) {
881
889
// Given a new client builder.
882
- let mut builder = ClientBuilder :: new ( ) ;
890
+ let mut builder = make_non_sss_client_builder ( ) ;
883
891
884
892
// When building a client with an invalid server name.
885
893
builder = builder. server_name_or_homeserver_url ( "⚠️ This won't work 🚫" ) ;
@@ -892,7 +900,7 @@ pub(crate) mod tests {
892
900
#[ async_test]
893
901
async fn test_discovery_no_server ( ) {
894
902
// Given a new client builder.
895
- let mut builder = ClientBuilder :: new ( ) ;
903
+ let mut builder = make_non_sss_client_builder ( ) ;
896
904
897
905
// When building a client with a valid server name that doesn't exist.
898
906
builder = builder. server_name_or_homeserver_url ( "localhost:3456" ) ;
@@ -908,7 +916,7 @@ pub(crate) mod tests {
908
916
// Given a random web server that isn't a Matrix homeserver or hosting the
909
917
// well-known file for one.
910
918
let server = MockServer :: start ( ) . await ;
911
- let mut builder = ClientBuilder :: new ( ) ;
919
+ let mut builder = make_non_sss_client_builder ( ) ;
912
920
913
921
// When building a client with the server's URL.
914
922
builder = builder. server_name_or_homeserver_url ( server. uri ( ) ) ;
@@ -922,7 +930,7 @@ pub(crate) mod tests {
922
930
async fn test_discovery_direct_legacy ( ) {
923
931
// Given a homeserver without a well-known file.
924
932
let homeserver = make_mock_homeserver ( ) . await ;
925
- let mut builder = ClientBuilder :: new ( ) ;
933
+ let mut builder = make_non_sss_client_builder ( ) ;
926
934
927
935
// When building a client with the server's URL.
928
936
builder = builder. server_name_or_homeserver_url ( homeserver. uri ( ) ) ;
@@ -938,7 +946,7 @@ pub(crate) mod tests {
938
946
// Given a homeserver without a well-known file and with a custom sliding sync
939
947
// proxy injected.
940
948
let homeserver = make_mock_homeserver ( ) . await ;
941
- let mut builder = ClientBuilder :: new ( ) ;
949
+ let mut builder = make_non_sss_client_builder ( ) ;
942
950
#[ cfg( feature = "experimental-sliding-sync" ) ]
943
951
{
944
952
builder = builder. sliding_sync_proxy ( "https://localhost:1234" ) ;
@@ -958,7 +966,7 @@ pub(crate) mod tests {
958
966
// Given a base server with a well-known file that has errors.
959
967
let server = MockServer :: start ( ) . await ;
960
968
let homeserver = make_mock_homeserver ( ) . await ;
961
- let mut builder = ClientBuilder :: new ( ) ;
969
+ let mut builder = make_non_sss_client_builder ( ) ;
962
970
963
971
let well_known = make_well_known_json ( & homeserver. uri ( ) , None ) ;
964
972
let bad_json = well_known. to_string ( ) . replace ( ',' , "" ) ;
@@ -985,7 +993,7 @@ pub(crate) mod tests {
985
993
// doesn't support sliding sync.
986
994
let server = MockServer :: start ( ) . await ;
987
995
let homeserver = make_mock_homeserver ( ) . await ;
988
- let mut builder = ClientBuilder :: new ( ) ;
996
+ let mut builder = make_non_sss_client_builder ( ) ;
989
997
990
998
Mock :: given ( method ( "GET" ) )
991
999
. and ( path ( "/.well-known/matrix/client" ) )
@@ -1011,7 +1019,7 @@ pub(crate) mod tests {
1011
1019
// sliding sync proxy.
1012
1020
let server = MockServer :: start ( ) . await ;
1013
1021
let homeserver = make_mock_homeserver ( ) . await ;
1014
- let mut builder = ClientBuilder :: new ( ) ;
1022
+ let mut builder = make_non_sss_client_builder ( ) ;
1015
1023
1016
1024
Mock :: given ( method ( "GET" ) )
1017
1025
. and ( path ( "/.well-known/matrix/client" ) )
@@ -1038,7 +1046,7 @@ pub(crate) mod tests {
1038
1046
// sliding sync proxy.
1039
1047
let server = MockServer :: start ( ) . await ;
1040
1048
let homeserver = make_mock_homeserver ( ) . await ;
1041
- let mut builder = ClientBuilder :: new ( ) ;
1049
+ let mut builder = make_non_sss_client_builder ( ) ;
1042
1050
1043
1051
Mock :: given ( method ( "GET" ) )
1044
1052
. and ( path ( "/.well-known/matrix/client" ) )
@@ -1061,6 +1069,33 @@ pub(crate) mod tests {
1061
1069
assert_eq ! ( client. sliding_sync_proxy( ) , Some ( "https://localhost:9012" . parse( ) . unwrap( ) ) ) ;
1062
1070
}
1063
1071
1072
+ #[ async_test]
1073
+ #[ cfg( feature = "experimental-sliding-sync" ) ]
1074
+ async fn test_discovery_well_known_with_simplified_sliding_sync ( ) {
1075
+ // Given a base server with a well-known file that points to a homeserver with a
1076
+ // sliding sync proxy.
1077
+ let server = MockServer :: start ( ) . await ;
1078
+ let homeserver = make_mock_homeserver ( ) . await ;
1079
+ let mut builder = make_non_sss_client_builder ( ) ;
1080
+
1081
+ Mock :: given ( method ( "GET" ) )
1082
+ . and ( path ( "/.well-known/matrix/client" ) )
1083
+ . respond_with ( ResponseTemplate :: new ( 200 ) . set_body_json ( make_well_known_json (
1084
+ & homeserver. uri ( ) ,
1085
+ Some ( "https://localhost:1234" ) ,
1086
+ ) ) )
1087
+ . mount ( & server)
1088
+ . await ;
1089
+
1090
+ // When building a client for simplified sliding sync with the base server.
1091
+ builder = builder. simplified_sliding_sync ( true ) ;
1092
+ builder = builder. server_name_or_homeserver_url ( server. uri ( ) ) ;
1093
+ let client = builder. build ( ) . await . unwrap ( ) ;
1094
+
1095
+ // Then a client should not use the discovered sliding sync proxy.
1096
+ assert ! ( client. sliding_sync_proxy( ) . is_none( ) ) ;
1097
+ }
1098
+
1064
1099
/* Requires sliding sync */
1065
1100
1066
1101
#[ async_test]
@@ -1070,7 +1105,7 @@ pub(crate) mod tests {
1070
1105
// doesn't support sliding sync.
1071
1106
let server = MockServer :: start ( ) . await ;
1072
1107
let homeserver = make_mock_homeserver ( ) . await ;
1073
- let mut builder = ClientBuilder :: new ( ) ;
1108
+ let mut builder = make_non_sss_client_builder ( ) ;
1074
1109
1075
1110
Mock :: given ( method ( "GET" ) )
1076
1111
. and ( path ( "/.well-known/matrix/client" ) )
@@ -1096,7 +1131,7 @@ pub(crate) mod tests {
1096
1131
// sliding sync proxy.
1097
1132
let server = MockServer :: start ( ) . await ;
1098
1133
let homeserver = make_mock_homeserver ( ) . await ;
1099
- let mut builder = ClientBuilder :: new ( ) ;
1134
+ let mut builder = make_non_sss_client_builder ( ) ;
1100
1135
1101
1136
Mock :: given ( method ( "GET" ) )
1102
1137
. and ( path ( "/.well-known/matrix/client" ) )
@@ -1121,7 +1156,7 @@ pub(crate) mod tests {
1121
1156
// Given a homeserver without a well-known file and with a custom sliding sync
1122
1157
// proxy injected.
1123
1158
let homeserver = make_mock_homeserver ( ) . await ;
1124
- let mut builder = ClientBuilder :: new ( ) ;
1159
+ let mut builder = make_non_sss_client_builder ( ) ;
1125
1160
builder = builder. sliding_sync_proxy ( "https://localhost:1234" ) ;
1126
1161
1127
1162
// When building a client that requires sliding sync with the server's URL.
@@ -1174,4 +1209,18 @@ pub(crate) mod tests {
1174
1209
object
1175
1210
} )
1176
1211
}
1212
+
1213
+ /// These tests were built with regular sliding sync in mind so until
1214
+ /// we remove it and update the tests, this makes a builder with SSS
1215
+ /// disabled.
1216
+ fn make_non_sss_client_builder ( ) -> ClientBuilder {
1217
+ let mut builder = ClientBuilder :: new ( ) ;
1218
+
1219
+ #[ cfg( feature = "experimental-sliding-sync" ) ]
1220
+ {
1221
+ builder = builder. simplified_sliding_sync ( false ) ;
1222
+ }
1223
+
1224
+ builder
1225
+ }
1177
1226
}
0 commit comments