Page MenuHomePhabricator

D4667.id15211.diff
No OneTemporary

D4667.id15211.diff

diff --git a/services/commtest/Cargo.lock b/services/commtest/Cargo.lock
--- a/services/commtest/Cargo.lock
+++ b/services/commtest/Cargo.lock
@@ -67,6 +67,15 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+[[package]]
+name = "block-buffer"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
+dependencies = [
+ "generic-array",
+]
+
[[package]]
name = "bytes"
version = "1.1.0"
@@ -93,9 +102,11 @@
"bytesize",
"derive_more",
"futures",
+ "hex",
"lazy_static",
"num_cpus",
"prost",
+ "sha2",
"tokio",
"tonic",
"tonic-build",
@@ -107,6 +118,25 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+[[package]]
+name = "cpufeatures"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
[[package]]
name = "derive_more"
version = "0.99.16"
@@ -120,6 +150,16 @@
"syn",
]
+[[package]]
+name = "digest"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
[[package]]
name = "either"
version = "1.6.1"
@@ -184,6 +224,16 @@
"pin-utils",
]
+[[package]]
+name = "generic-array"
+version = "0.14.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
[[package]]
name = "getrandom"
version = "0.2.3"
@@ -238,6 +288,12 @@
"libc",
]
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
[[package]]
name = "http"
version = "0.2.5"
@@ -643,6 +699,17 @@
"pest",
]
+[[package]]
+name = "sha2"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
[[package]]
name = "slab"
version = "0.4.5"
@@ -872,6 +939,12 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+[[package]]
+name = "typenum"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+
[[package]]
name = "ucd-trie"
version = "0.1.3"
@@ -890,6 +963,12 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
[[package]]
name = "want"
version = "0.3.0"
diff --git a/services/commtest/Cargo.toml b/services/commtest/Cargo.toml
--- a/services/commtest/Cargo.toml
+++ b/services/commtest/Cargo.toml
@@ -14,6 +14,8 @@
bytesize = "1.1.0"
lazy_static = "1.4.0"
num_cpus = "1.13.1"
+sha2 = "0.10.2"
+hex = "0.4.3"
[build-dependencies]
tonic-build = "0.6"
diff --git a/services/commtest/tests/backup/create_new_backup.rs b/services/commtest/tests/backup/create_new_backup.rs
--- a/services/commtest/tests/backup/create_new_backup.rs
+++ b/services/commtest/tests/backup/create_new_backup.rs
@@ -10,8 +10,7 @@
use tonic::Request;
-use crate::tools::generate_nbytes;
-use crate::tools::Error;
+use crate::tools::{generate_stable_nbytes, DataHasher, Error};
pub async fn run(
client: &mut BackupServiceClient<tonic::transport::Channel>,
@@ -21,6 +20,7 @@
let cloned_user_id = backup_data.user_id.clone();
let cloned_device_id = backup_data.device_id.clone();
let cloned_backup_chunk_sizes = backup_data.backup_item.chunks_sizes.clone();
+ let predefined_byte_value = None;
let outbound = async_stream::stream! {
println!(" - sending user id");
let request = CreateNewBackupRequest {
@@ -38,15 +38,19 @@
};
yield request;
println!(" - sending data hash");
- // todo calculate the real hash, this is a mocked value
+ let mut hasher = DataHasher::new();
+ for chunk_size in &cloned_backup_chunk_sizes {
+ DataHasher::update(&mut hasher, generate_stable_nbytes(*chunk_size, predefined_byte_value));
+ }
+
let request = CreateNewBackupRequest {
- data: Some(NewCompactionHash(vec![68,67,66,65,66])),
+ data: Some(NewCompactionHash(hasher.get_hash().as_bytes().to_vec())),
};
yield request;
- for chunk_size in cloned_backup_chunk_sizes {
+ for chunk_size in &cloned_backup_chunk_sizes {
println!(" - sending data chunk {}", chunk_size);
let request = CreateNewBackupRequest {
- data: Some(NewCompactionChunk(generate_nbytes(chunk_size, None))),
+ data: Some(NewCompactionChunk(generate_stable_nbytes(*chunk_size, predefined_byte_value))),
};
yield request;
}
diff --git a/services/commtest/tests/backup/send_log.rs b/services/commtest/tests/backup/send_log.rs
--- a/services/commtest/tests/backup/send_log.rs
+++ b/services/commtest/tests/backup/send_log.rs
@@ -10,8 +10,7 @@
use tonic::Request;
use crate::backup_utils::BackupData;
-use crate::tools::generate_nbytes;
-use crate::tools::Error;
+use crate::tools::{generate_stable_nbytes, DataHasher, Error};
pub async fn run(
client: &mut BackupServiceClient<tonic::transport::Channel>,
@@ -22,6 +21,7 @@
let cloned_user_id = backup_data.user_id.clone();
let cloned_backup_id = backup_data.backup_item.id.clone();
let cloned_log_sizes = backup_data.log_items[log_index].chunks_sizes.clone();
+ let predefined_byte_value = None;
let outbound = async_stream::stream! {
println!(" - sending user id");
let request = SendLogRequest {
@@ -34,15 +34,20 @@
};
yield request;
println!(" - sending log hash");
+ let mut hasher = DataHasher::new();
+ for chunk_size in &cloned_log_sizes {
+ DataHasher::update(&mut hasher, generate_stable_nbytes(*chunk_size, predefined_byte_value));
+ }
+
let request = SendLogRequest {
- data: Some(LogHash(vec![65,66,67,66+(log_index as u8)])),
+ data: Some(LogHash(hasher.get_hash().as_bytes().to_vec())),
};
yield request;
println!(" - sending log data");
- for log_size in cloned_log_sizes {
- println!(" - sending log data {}", log_size);
+ for log_size in &cloned_log_sizes {
+ println!(" - sending log data {}", *log_size);
let request = SendLogRequest {
- data: Some(LogData(generate_nbytes(log_size, None))),
+ data: Some(LogData(generate_stable_nbytes(*log_size, predefined_byte_value))),
};
yield request;
}
diff --git a/services/commtest/tests/blob/put.rs b/services/commtest/tests/blob/put.rs
--- a/services/commtest/tests/blob/put.rs
+++ b/services/commtest/tests/blob/put.rs
@@ -9,7 +9,7 @@
use tonic::Request;
-use crate::tools::{generate_nbytes, Error};
+use crate::tools::{generate_stable_nbytes, Error};
pub async fn run(
client: &mut BlobServiceClient<tonic::transport::Channel>,
@@ -34,7 +34,7 @@
for chunk_size in cloned_chunks_sizes {
println!("[{}] - sending data chunk {}", cloned_holder, chunk_size);
let request = PutRequest {
- data: Some(DataChunk(generate_nbytes(chunk_size, None))),
+ data: Some(DataChunk(generate_stable_nbytes(chunk_size, None))),
};
yield request;
}
diff --git a/services/commtest/tests/lib/tools.rs b/services/commtest/tests/lib/tools.rs
--- a/services/commtest/tests/lib/tools.rs
+++ b/services/commtest/tests/lib/tools.rs
@@ -3,8 +3,11 @@
use num_cpus;
use std::env;
+use hex::ToHex;
+use sha2::{Digest, Sha512};
+
#[allow(dead_code)]
-pub fn generate_nbytes(
+pub fn generate_stable_nbytes(
number_of_bytes: usize,
predefined_byte_value: Option<u8>,
) -> Vec<u8> {
@@ -45,3 +48,25 @@
}
return number_of_threads_str.parse::<usize>().unwrap();
}
+
+#[allow(dead_code)]
+pub struct DataHasher {
+ hasher: Sha512,
+}
+
+#[allow(dead_code)]
+impl DataHasher {
+ pub fn new() -> DataHasher {
+ return DataHasher {
+ hasher: Sha512::new(),
+ };
+ }
+
+ pub fn update(data_hasher: &mut DataHasher, bytes: Vec<u8>) {
+ data_hasher.hasher.update(bytes);
+ }
+ pub fn get_hash(self) -> String {
+ let hash = self.hasher.finalize();
+ return hash.encode_hex::<String>();
+ }
+}

File Metadata

Mime Type
text/plain
Expires
Mon, Oct 7, 7:17 AM (21 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2252741
Default Alt Text
D4667.id15211.diff (9 KB)

Event Timeline