Skip to content

Commit f5669ce

Browse files
Copilotpixlwave
andcommitted
feat(sdk): Add federation version mock endpoint and log server version in FFI
Co-authored-by: pixlwave <6060466+pixlwave@users.noreply.github.com>
1 parent 9a15775 commit f5669ce

4 files changed

Lines changed: 47 additions & 43 deletions

File tree

‎bindings/matrix-sdk-ffi/src/client.rs‎

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1608,15 +1608,6 @@ impl Client {
16081608
Ok(self.inner.server_versions().await?.contains(&ruma::api::MatrixVersion::V1_13))
16091609
}
16101610

1611-
/// Get the server version information from the federation API.
1612-
///
1613-
/// This method calls the `/_matrix/federation/v1/version` endpoint to get
1614-
/// both the server name and version.
1615-
pub async fn server_version(&self) -> Result<ServerVersionInfo, ClientError> {
1616-
let server_info = self.inner.server_version().await?;
1617-
Ok(server_info.into())
1618-
}
1619-
16201611
/// Checks if the server supports the LiveKit RTC focus for placing calls.
16211612
pub async fn is_livekit_rtc_supported(&self) -> Result<bool, ClientError> {
16221613
Ok(self
@@ -1806,23 +1797,6 @@ impl From<search_users::v3::Response> for SearchUsersResults {
18061797
}
18071798
}
18081799

1809-
#[derive(uniffi::Record)]
1810-
pub struct ServerVersionInfo {
1811-
/// The server name.
1812-
pub server_name: String,
1813-
/// The server version.
1814-
pub version: String,
1815-
}
1816-
1817-
impl From<matrix_sdk::ServerVersionInfo> for ServerVersionInfo {
1818-
fn from(value: matrix_sdk::ServerVersionInfo) -> Self {
1819-
Self {
1820-
server_name: value.server_name,
1821-
version: value.version,
1822-
}
1823-
}
1824-
}
1825-
18261800
#[derive(uniffi::Record)]
18271801
pub struct UserProfile {
18281802
pub user_id: String,

‎bindings/matrix-sdk-ffi/src/client_builder.rs‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,17 @@ impl ClientBuilder {
574574

575575
let sdk_client = inner_builder.build().await?;
576576

577+
// Log server version information at info level
578+
if let Ok(server_info) = sdk_client.server_version().await {
579+
tracing::info!(
580+
server_name = %server_info.server_name,
581+
version = %server_info.version,
582+
"Connected to Matrix server"
583+
);
584+
} else {
585+
tracing::debug!("Could not retrieve server version information");
586+
}
587+
577588
Ok(Arc::new(
578589
Client::new(
579590
sdk_client,

‎crates/matrix-sdk/src/test_utils/mocks/mod.rs‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1377,6 +1377,12 @@ impl MatrixMockServer {
13771377
)));
13781378
self.mock_endpoint(mock, EnablePushRuleEndpoint).expect_default_access_token()
13791379
}
1380+
1381+
/// Create a prebuilt mock for the federation version endpoint.
1382+
pub fn mock_federation_version(&self) -> MockEndpoint<'_, FederationVersionEndpoint> {
1383+
let mock = Mock::given(method("GET")).and(path("/_matrix/federation/v1/version"));
1384+
self.mock_endpoint(mock, FederationVersionEndpoint)
1385+
}
13801386
}
13811387

13821388
/// Parameter to [`MatrixMockServer::sync_room`].
@@ -3955,3 +3961,25 @@ impl<'a> MockEndpoint<'a, EnablePushRuleEndpoint> {
39553961
self.ok_empty_json()
39563962
}
39573963
}
3964+
3965+
/// A prebuilt mock for the federation version endpoint.
3966+
pub struct FederationVersionEndpoint;
3967+
3968+
impl<'a> MockEndpoint<'a, FederationVersionEndpoint> {
3969+
/// Returns a successful response with the given server name and version.
3970+
pub fn ok(self, server_name: &str, version: &str) -> MatrixMock<'a> {
3971+
let response_body = json!({
3972+
"server": {
3973+
"name": server_name,
3974+
"version": version
3975+
}
3976+
});
3977+
self.respond_with(ResponseTemplate::new(200).set_body_json(response_body))
3978+
}
3979+
3980+
/// Returns a successful response with empty/missing server information.
3981+
pub fn ok_empty(self) -> MatrixMock<'a> {
3982+
let response_body = json!({});
3983+
self.respond_with(ResponseTemplate::new(200).set_body_json(response_body))
3984+
}
3985+
}

‎crates/matrix-sdk/tests/integration/client.rs‎

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1494,22 +1494,15 @@ async fn test_room_sync_state_after() {
14941494
#[async_test]
14951495
async fn test_server_version() {
14961496
use matrix_sdk::test_utils::mocks::MatrixMockServer;
1497-
use serde_json::json;
1498-
use wiremock::{matchers::{method, path}, Mock, ResponseTemplate};
14991497

15001498
let server = MatrixMockServer::new().await;
15011499
let client = server.client_builder().build().await;
15021500

15031501
// Mock the federation version endpoint
1504-
Mock::given(method("GET"))
1505-
.and(path("/_matrix/federation/v1/version"))
1506-
.respond_with(ResponseTemplate::new(200).set_body_json(json!({
1507-
"server": {
1508-
"name": "Synapse",
1509-
"version": "1.70.0"
1510-
}
1511-
})))
1512-
.mount(server.server())
1502+
server
1503+
.mock_federation_version()
1504+
.ok("Synapse", "1.70.0")
1505+
.mount()
15131506
.await;
15141507

15151508
let server_info = client.server_version().await.unwrap();
@@ -1521,17 +1514,15 @@ async fn test_server_version() {
15211514
#[async_test]
15221515
async fn test_server_version_with_missing_fields() {
15231516
use matrix_sdk::test_utils::mocks::MatrixMockServer;
1524-
use serde_json::json;
1525-
use wiremock::{matchers::{method, path}, Mock, ResponseTemplate};
15261517

15271518
let server = MatrixMockServer::new().await;
15281519
let client = server.client_builder().build().await;
15291520

15301521
// Mock the federation version endpoint with missing fields
1531-
Mock::given(method("GET"))
1532-
.and(path("/_matrix/federation/v1/version"))
1533-
.respond_with(ResponseTemplate::new(200).set_body_json(json!({})))
1534-
.mount(server.server())
1522+
server
1523+
.mock_federation_version()
1524+
.ok_empty()
1525+
.mount()
15351526
.await;
15361527

15371528
let server_info = client.server_version().await.unwrap();

0 commit comments

Comments
 (0)