DTPM: upload files as stream and directory support #2
							
								
								
									
										33
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										33
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -145,6 +145,26 @@ version = "0.22.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "bincode" | ||||
| version = "2.0.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" | ||||
| dependencies = [ | ||||
|  "bincode_derive", | ||||
|  "serde", | ||||
|  "unty", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "bincode_derive" | ||||
| version = "2.0.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "bf95709a440f45e986983918d0e8a1f30a9b1df04918fc828670606804ac3c09" | ||||
| dependencies = [ | ||||
|  "virtue", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "bitflags" | ||||
| version = "2.6.0" | ||||
| @ -185,6 +205,7 @@ name = "detee-shared" | ||||
| version = "0.1.0" | ||||
| dependencies = [ | ||||
|  "base64", | ||||
|  "bincode", | ||||
|  "prost", | ||||
|  "serde", | ||||
|  "serde_yaml", | ||||
| @ -1147,6 +1168,18 @@ version = "0.2.11" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "unty" | ||||
| version = "0.0.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "virtue" | ||||
| version = "0.0.18" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "want" | ||||
| version = "0.3.1" | ||||
|  | ||||
| @ -12,6 +12,7 @@ thiserror = "2.0.11" | ||||
| tonic = "0.12.3" | ||||
| tar = "0.4.44" | ||||
| zstd = "0.13.3" | ||||
| bincode = "2.0.1" | ||||
| 
 | ||||
| [build-dependencies] | ||||
| tonic-build = "0.12.3" | ||||
|  | ||||
							
								
								
									
										4
									
								
								build.rs
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										4
									
								
								build.rs
									
									
									
									
									
								
							| @ -34,6 +34,10 @@ fn main() -> Result<(), Box<dyn std::error::Error>> { | ||||
|             ".vm_proto.VmNodeListResp", | ||||
|             "#[derive(serde::Serialize, serde::Deserialize)]", | ||||
|         ) | ||||
|         .type_attribute( | ||||
|             ".dtpm_proto.FileEntry", | ||||
|             "#[derive(serde::Serialize, serde::Deserialize, bincode::Encode, bincode::Decode)]", | ||||
|         ) | ||||
|         .compile_protos( | ||||
|             &[ | ||||
|                 "proto/sgx/app.proto", | ||||
|  | ||||
| @ -53,7 +53,7 @@ message DtpmGetConfigRes { | ||||
| } | ||||
| 
 | ||||
| service DtpmConfigManager { | ||||
|   rpc SetConfig(DtpmSetConfigReq) returns (DtpmSetConfigRes) {} | ||||
|   rpc UploadFiles(stream FileEntry) returns (common_proto.Empty) {} | ||||
|   rpc SetConfig(DtpmSetConfigReq) returns (DtpmSetConfigRes) {} | ||||
|   rpc GetConfig(common_proto.Empty) returns (DtpmGetConfigRes) {} | ||||
| } | ||||
| @ -2,8 +2,8 @@ use crate::sgx::pb::dtpm_proto; | ||||
| use base64::{engine::general_purpose::STANDARD as BASE64, Engine}; | ||||
| use serde::{Deserialize, Serialize}; | ||||
| use std::path::Path; | ||||
| use tar::Builder; | ||||
| use zstd::Encoder; | ||||
| use tar::{Archive, Builder}; | ||||
| use zstd::{Decoder, Encoder}; | ||||
| 
 | ||||
| #[derive(Debug, Clone, Serialize, Deserialize, Default)] | ||||
| pub struct DtpmConfig { | ||||
| @ -234,3 +234,10 @@ pub fn compress_directory(input_dir: &str) -> Result<Vec<u8>> { | ||||
| 
 | ||||
|     Ok(compressed_data) | ||||
| } | ||||
| 
 | ||||
| pub fn decompress_directory(save_path: &str, archive_buff: Vec<u8>) -> Result<()> { | ||||
|     let mut archive = Archive::new(Decoder::new(archive_buff.as_slice())?); | ||||
| 
 | ||||
|     archive.unpack(save_path)?; | ||||
|     Ok(()) | ||||
| } | ||||
|  | ||||
| @ -1,4 +1,14 @@ | ||||
| use detee_shared::sgx::types::dtpm::{compress_directory, DtpmConfig}; | ||||
| use detee_shared::sgx::types::dtpm::{compress_directory, decompress_directory, DtpmConfig}; | ||||
| 
 | ||||
| use std::sync::LazyLock; | ||||
| 
 | ||||
| static TEMP_DIR: LazyLock<String> = LazyLock::new(|| { | ||||
|     tempfile::tempdir() | ||||
|         .unwrap() | ||||
|         .into_path() | ||||
|         .to_string_lossy() | ||||
|         .to_string() | ||||
| }); | ||||
| 
 | ||||
| #[test] | ||||
| fn dtpm_config_dir_support_test() { | ||||
| @ -12,21 +22,26 @@ fn dtpm_config_dir_support_test() { | ||||
| 
 | ||||
| #[test] | ||||
| fn test_compression() { | ||||
|     // let file_path = "/Users/user/.cache/hunter/toolchain";
 | ||||
|     let file_path = "./tests"; | ||||
|     let compressed_buff = compress_directory(file_path).unwrap(); | ||||
| 
 | ||||
|     let tmp_dir = tempfile::tempdir() | ||||
|         .unwrap() | ||||
|         .into_path() | ||||
|         .to_string_lossy() | ||||
|         .to_string(); | ||||
| 
 | ||||
|     dbg!(&tmp_dir); | ||||
|     dbg!(&TEMP_DIR); | ||||
| 
 | ||||
|     std::fs::write( | ||||
|         format!("{}/{}", tmp_dir, "archive.tar.zst"), | ||||
|         format!("{}/{}", *TEMP_DIR, "archive.tar.zst"), | ||||
|         &compressed_buff, | ||||
|     ) | ||||
|     .unwrap(); | ||||
| } | ||||
| 
 | ||||
| #[test] | ||||
| fn test_decompression_02() { | ||||
|     let file_path = "./tests"; | ||||
|     let archive_buff = compress_directory(file_path).unwrap(); | ||||
| 
 | ||||
|     decompress_directory(&TEMP_DIR, archive_buff).unwrap(); | ||||
| 
 | ||||
|     let path = format!("{}/{}", *TEMP_DIR, "fixtures/dtpm_config.yaml"); | ||||
|     dbg!(&path); | ||||
|     assert!(std::path::Path::new(&path).exists()); | ||||
| } | ||||
|  | ||||
							
								
								
									
										2
									
								
								tests/fixtures/dtpm_config.yaml
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								tests/fixtures/dtpm_config.yaml
									
									
									
									
										vendored
									
									
								
							| @ -12,4 +12,4 @@ child_processes: | ||||
|       policy: !OnNonZeroExit true | ||||
| filesystems: | ||||
|   - path: /bin/actix-app-info | ||||
|     content: !path "/Users/user/tmp/actix-app-info/target/x86_64-unknown-linux-musl/release/actix-app-info" | ||||
|     content: !path "./tests" | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user