Skip to content

Commit 1cadde3

Browse files
committed
[commtest] Move backup client to shared
Summary: [ENG-5555](https://linear.app/comm/issue/ENG-5555) and [ENG-5554](https://linear.app/comm/issue/ENG-5554) Move the backup client to shared so that it can be used on native. There are a few changes that I will annotate in inline comments. The total amount of moved logic is pretty small but if it's hard to review, let me know and I will split this into more diffs. Test Plan: - `cargo run` in backup and blob - `yarn run-integration-tests backup` - `yarn run-performance-tests blob` Reviewers: bartek, varun, kamil Reviewed By: bartek, varun Subscribers: ashoat, tomek Differential Revision: https://phab.comm.dev/D10260
1 parent a05bedf commit 1cadde3

14 files changed

Lines changed: 2325 additions & 236 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ shared/protos/build
3939

4040
# Shared libraries
4141
shared/tunnelbroker-client/target
42+
shared/backup_client/target
4243

4344
# Nix
4445
result*

services/commtest/Cargo.lock

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

services/commtest/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ license = "BSD-3-Clause"
77
[dependencies]
88
comm-opaque2 = { path = "../../shared/comm-opaque2" }
99
grpc_clients = { path = "../../shared/grpc_clients" }
10+
backup_client = { path = "../../shared/backup_client" }
1011
tonic = "0.8"
1112
tokio = { version = "1.24", features = ["macros", "rt-multi-thread"] }
1213
prost = "0.11"

services/commtest/src/backup/backup_utils.rs

Lines changed: 0 additions & 9 deletions
This file was deleted.

services/commtest/src/backup/create_new_backup.rs

Lines changed: 0 additions & 60 deletions
This file was deleted.

services/commtest/src/backup/mod.rs

Lines changed: 0 additions & 3 deletions
This file was deleted.

services/commtest/src/backup/pull_backup.rs

Lines changed: 0 additions & 80 deletions
This file was deleted.

services/commtest/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
pub mod backup;
21
pub mod blob;
32
pub mod constants;
43
pub mod identity;

services/commtest/src/tools.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ pub enum Error {
3232
JsonError(serde_json::error::Error),
3333
#[display(...)]
3434
FromUtf8Error(std::string::FromUtf8Error),
35+
#[display(...)]
36+
BackupClientError(backup_client::Error),
3537
}
3638

3739
pub fn obtain_number_of_threads() -> usize {

services/commtest/tests/backup_integration_test.rs

Lines changed: 35 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,26 @@
1+
use backup_client::{
2+
BackupClient, BackupData, BackupDescriptor, Error as BackupClientError,
3+
RequestedData,
4+
};
15
use bytesize::ByteSize;
26
use comm_lib::{auth::UserIdentity, backup::LatestBackupIDResponse};
37
use commtest::{
4-
backup::{
5-
backup_utils::BackupData,
6-
create_new_backup,
7-
pull_backup::{self, BackupDescriptor, RequestedData},
8-
},
98
service_addr,
109
tools::{generate_stable_nbytes, Error},
1110
};
1211
use reqwest::StatusCode;
1312

1413
#[tokio::test]
1514
async fn backup_integration_test() -> Result<(), Error> {
16-
let url = reqwest::Url::try_from(service_addr::BACKUP_SERVICE_HTTP)
17-
.expect("failed to parse backup service url");
15+
let backup_client = BackupClient::new(service_addr::BACKUP_SERVICE_HTTP)?;
1816

1917
let backup_datas = [
2018
BackupData {
2119
backup_id: "b1".to_string(),
22-
user_keys_hash: "kh1".to_string(),
2320
user_keys: generate_stable_nbytes(
2421
ByteSize::kib(4).as_u64() as usize,
2522
Some(b'a'),
2623
),
27-
user_data_hash: "dh1".to_string(),
2824
user_data: generate_stable_nbytes(
2925
ByteSize::mib(4).as_u64() as usize,
3026
Some(b'A'),
@@ -33,12 +29,10 @@ async fn backup_integration_test() -> Result<(), Error> {
3329
},
3430
BackupData {
3531
backup_id: "b2".to_string(),
36-
user_keys_hash: "kh2".to_string(),
3732
user_keys: generate_stable_nbytes(
3833
ByteSize::kib(4).as_u64() as usize,
3934
Some(b'b'),
4035
),
41-
user_data_hash: "dh2".to_string(),
4236
user_data: generate_stable_nbytes(
4337
ByteSize::mib(4).as_u64() as usize,
4438
Some(b'B'),
@@ -53,29 +47,27 @@ async fn backup_integration_test() -> Result<(), Error> {
5347
device_id: "dummy device_id".to_string(),
5448
};
5549

56-
create_new_backup::run(url.clone(), &user_identity, &backup_datas[0]).await?;
57-
create_new_backup::run(url.clone(), &user_identity, &backup_datas[1]).await?;
50+
backup_client
51+
.upload_backup(&user_identity, backup_datas[0].clone())
52+
.await?;
53+
backup_client
54+
.upload_backup(&user_identity, backup_datas[1].clone())
55+
.await?;
5856

5957
// Test direct lookup
6058
let second_backup_descriptor = BackupDescriptor::BackupID {
6159
backup_id: backup_datas[1].backup_id.clone(),
6260
user_identity: user_identity.clone(),
6361
};
6462

65-
let user_keys = pull_backup::run(
66-
url.clone(),
67-
second_backup_descriptor.clone(),
68-
RequestedData::UserKeys,
69-
)
70-
.await?;
63+
let user_keys = backup_client
64+
.download_backup_data(&second_backup_descriptor, RequestedData::UserKeys)
65+
.await?;
7166
assert_eq!(user_keys, backup_datas[1].user_keys);
7267

73-
let user_data = pull_backup::run(
74-
url.clone(),
75-
second_backup_descriptor.clone(),
76-
RequestedData::UserData,
77-
)
78-
.await?;
68+
let user_data = backup_client
69+
.download_backup_data(&second_backup_descriptor, RequestedData::UserData)
70+
.await?;
7971
assert_eq!(user_data, backup_datas[1].user_data);
8072

8173
// Test latest backup lookup
@@ -84,22 +76,16 @@ async fn backup_integration_test() -> Result<(), Error> {
8476
username: "1".to_string(),
8577
};
8678

87-
let backup_id_response = pull_backup::run(
88-
url.clone(),
89-
latest_backup_descriptor.clone(),
90-
RequestedData::BackupID,
91-
)
92-
.await?;
79+
let backup_id_response = backup_client
80+
.download_backup_data(&latest_backup_descriptor, RequestedData::BackupID)
81+
.await?;
9382
let response: LatestBackupIDResponse =
9483
serde_json::from_slice(&backup_id_response)?;
9584
assert_eq!(response.backup_id, backup_datas[1].backup_id);
9685

97-
let user_keys = pull_backup::run(
98-
url.clone(),
99-
latest_backup_descriptor.clone(),
100-
RequestedData::UserKeys,
101-
)
102-
.await?;
86+
let user_keys = backup_client
87+
.download_backup_data(&latest_backup_descriptor, RequestedData::UserKeys)
88+
.await?;
10389
assert_eq!(user_keys, backup_datas[1].user_keys);
10490

10591
// Test cleanup
@@ -108,15 +94,18 @@ async fn backup_integration_test() -> Result<(), Error> {
10894
user_identity: user_identity.clone(),
10995
};
11096

111-
let response = pull_backup::run(
112-
url.clone(),
113-
first_backup_descriptor.clone(),
114-
RequestedData::UserKeys,
115-
)
116-
.await;
117-
assert!(
118-
matches!(response, Err(Error::HttpStatus(StatusCode::NOT_FOUND))),
119-
"First backup should have been removed, instead got response: {response:?}"
97+
let response = backup_client
98+
.download_backup_data(&first_backup_descriptor, RequestedData::UserKeys)
99+
.await;
100+
101+
let Err(BackupClientError::ReqwestError(error)) = response else {
102+
panic!("First backup should have been removed, instead got response: {response:?}");
103+
};
104+
105+
assert_eq!(
106+
error.status(),
107+
Some(StatusCode::NOT_FOUND),
108+
"Expected status 'not found'"
120109
);
121110

122111
Ok(())

0 commit comments

Comments
 (0)