Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F32574366
D10800.1767387227.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D10800.1767387227.diff
View Options
diff --git a/services/commtest/tests/identity_device_list_tests.rs b/services/commtest/tests/identity_device_list_tests.rs
--- a/services/commtest/tests/identity_device_list_tests.rs
+++ b/services/commtest/tests/identity_device_list_tests.rs
@@ -5,10 +5,13 @@
PLACEHOLDER_CODE_VERSION,
};
use commtest::service_addr;
+use grpc_clients::identity::authenticated::ChainedInterceptedAuthClient;
use grpc_clients::identity::get_auth_client;
+use grpc_clients::identity::protos::auth::UpdateDeviceListRequest;
use grpc_clients::identity::protos::authenticated::GetDeviceListRequest;
use grpc_clients::identity::DeviceType;
use serde::Deserialize;
+use serde_json::{from_str, json};
// 1. register user with android device
// 2. register a web device
@@ -20,7 +23,7 @@
// - [web]
// - [ios, web] - mobile should be first
#[tokio::test]
-async fn test_device_list_updates() {
+async fn test_device_list_rotation() {
use commtest::identity::olm_account_infos::{
DEFAULT_CLIENT_KEYS as DEVICE_KEYS_ANDROID,
MOCK_CLIENT_KEYS_1 as DEVICE_KEYS_WEB,
@@ -66,29 +69,12 @@
.await;
// Get device list updates for the user
- let request = GetDeviceListRequest {
- user_id,
- since_timestamp: None,
- };
- let response = auth_client
- .get_device_list_for_user(request)
- .await
- .expect("Get device list request failed")
- .into_inner();
-
- let device_lists_response: Vec<Vec<String>> = response
- .device_list_updates
- .into_iter()
- .map(|update| {
- let update: DeviceListUpdate = serde_json::from_str(&update)
- .expect("Failed to parse device list update");
- let device_list: RawDeviceList = update
- .raw_device_list
- .parse()
- .expect("Failed to parse raw device list");
- device_list.devices
- })
- .collect();
+ let device_lists_response: Vec<Vec<String>> =
+ get_device_list_history(&mut auth_client, &user_id)
+ .await
+ .into_iter()
+ .map(|device_list| device_list.devices)
+ .collect();
let expected_device_list: Vec<Vec<String>> = vec![
vec![android_device_id.into()],
@@ -100,6 +86,60 @@
assert_eq!(device_lists_response, expected_device_list);
}
+#[tokio::test]
+async fn test_update_device_list_rpc() {
+ // Register user with primary device
+ let primary_device = register_user_device(None, None).await;
+ let mut auth_client = get_auth_client(
+ &service_addr::IDENTITY_GRPC.to_string(),
+ primary_device.user_id.clone(),
+ primary_device.device_id,
+ primary_device.access_token,
+ PLACEHOLDER_CODE_VERSION,
+ DEVICE_TYPE.to_string(),
+ )
+ .await
+ .expect("Couldn't connect to identity service");
+
+ // Initial device list check
+ let initial_device_list =
+ get_device_list_history(&mut auth_client, &primary_device.user_id)
+ .await
+ .into_iter()
+ .map(|device_list| device_list.devices)
+ .next()
+ .expect("Expected to get single device list update");
+
+ assert!(initial_device_list.len() == 1, "Expected single device");
+ let primary_device_id = initial_device_list[0].clone();
+
+ // perform update by adding a new device
+ let update_payload = json!({
+ "devices": [primary_device_id, "device2"],
+ });
+ let update_request = UpdateDeviceListRequest {
+ new_device_list: serde_json::to_string(&update_payload)
+ .expect("failed to serialize payload"),
+ };
+ auth_client
+ .update_device_list_for_user(update_request)
+ .await
+ .expect("Update device list RPC failed");
+
+ // get device list again
+ let last_device_list =
+ get_device_list_history(&mut auth_client, &primary_device.user_id).await;
+ let last_device_list = last_device_list
+ .last()
+ .expect("Failed to get last device list update");
+
+ // check that the device list is properly updated
+ assert_eq!(
+ last_device_list.devices,
+ vec![primary_device_id, "device2".into()]
+ );
+}
+
// See GetDeviceListResponse in identity_authenticated.proto
// for details on the response format.
#[derive(Deserialize)]
@@ -111,10 +151,26 @@
}
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
-struct DeviceListUpdate {
+struct SignedDeviceList {
raw_device_list: String,
}
+impl SignedDeviceList {
+ fn into_raw(self) -> RawDeviceList {
+ self
+ .raw_device_list
+ .parse()
+ .expect("Failed to parse raw device list")
+ }
+}
+
+impl FromStr for SignedDeviceList {
+ type Err = serde_json::Error;
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ serde_json::from_str(s)
+ }
+}
+
impl FromStr for RawDeviceList {
type Err = serde_json::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
@@ -123,3 +179,29 @@
serde_json::from_str(&s.replace(r#"\""#, r#"""#))
}
}
+
+async fn get_device_list_history(
+ client: &mut ChainedInterceptedAuthClient,
+ user_id: &str,
+) -> Vec<RawDeviceList> {
+ let request = GetDeviceListRequest {
+ user_id: user_id.to_string(),
+ since_timestamp: None,
+ };
+
+ let response = client
+ .get_device_list_for_user(request)
+ .await
+ .expect("Get device list request failed")
+ .into_inner();
+
+ response
+ .device_list_updates
+ .into_iter()
+ .map(|update| {
+ SignedDeviceList::from_str(&update)
+ .expect("Failed to parse device list update")
+ .into_raw()
+ })
+ .collect()
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Jan 2, 8:53 PM (17 h, 52 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5882851
Default Alt Text
D10800.1767387227.diff (5 KB)
Attached To
Mode
D10800: [commtest] Add test for UpdateDeviceList RPC
Attached
Detach File
Event Timeline
Log In to Comment