You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@teaclave.apache.org by ms...@apache.org on 2020/03/10 01:03:51 UTC

[incubator-teaclave] branch develop updated: [proto] Add new/constructor for small request/response structure of frontend/management services

This is an automated email from the ASF dual-hosted git repository.

mssun pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-teaclave.git


The following commit(s) were added to refs/heads/develop by this push:
     new e812790  [proto] Add new/constructor for small request/response structure of frontend/management services
e812790 is described below

commit e812790325f106c357fcbdfde56bb06cee4b4982
Author: Mingshen Sun <bo...@mssun.me>
AuthorDate: Mon Mar 9 17:12:19 2020 -0700

    [proto] Add new/constructor for small request/response structure of frontend/management services
---
 services/proto/src/teaclave_frontend_service.rs    | 158 +++++++++++++++++++++
 .../enclave/src/teaclave_management_service.rs     | 135 ++++++------------
 2 files changed, 200 insertions(+), 93 deletions(-)

diff --git a/services/proto/src/teaclave_frontend_service.rs b/services/proto/src/teaclave_frontend_service.rs
index e76b1ef..123371d 100644
--- a/services/proto/src/teaclave_frontend_service.rs
+++ b/services/proto/src/teaclave_frontend_service.rs
@@ -28,6 +28,16 @@ pub struct RegisterInputFileRequest {
     pub crypto_info: TeaclaveFileCryptoInfo,
 }
 
+impl RegisterInputFileRequest {
+    pub fn new(url: Url, hash: impl Into<String>, crypto_info: TeaclaveFileCryptoInfo) -> Self {
+        Self {
+            url,
+            hash: hash.into(),
+            crypto_info,
+        }
+    }
+}
+
 #[into_request(TeaclaveFrontendResponse::RegisterInputFile)]
 #[into_request(TeaclaveManagementResponse::RegisterInputFile)]
 #[derive(Debug, PartialEq)]
@@ -35,6 +45,14 @@ pub struct RegisterInputFileResponse {
     pub data_id: String,
 }
 
+impl RegisterInputFileResponse {
+    pub fn new(data_id: impl Into<String>) -> Self {
+        Self {
+            data_id: data_id.into(),
+        }
+    }
+}
+
 #[into_request(TeaclaveFrontendRequest::RegisterOutputFile)]
 #[into_request(TeaclaveManagementRequest::RegisterOutputFile)]
 #[derive(Debug)]
@@ -43,6 +61,12 @@ pub struct RegisterOutputFileRequest {
     pub crypto_info: TeaclaveFileCryptoInfo,
 }
 
+impl RegisterOutputFileRequest {
+    pub fn new(url: Url, crypto_info: TeaclaveFileCryptoInfo) -> Self {
+        Self { url, crypto_info }
+    }
+}
+
 #[into_request(TeaclaveFrontendResponse::RegisterOutputFile)]
 #[into_request(TeaclaveManagementResponse::RegisterOutputFile)]
 #[derive(Debug)]
@@ -50,6 +74,14 @@ pub struct RegisterOutputFileResponse {
     pub data_id: String,
 }
 
+impl RegisterOutputFileResponse {
+    pub fn new(data_id: impl Into<String>) -> Self {
+        Self {
+            data_id: data_id.into(),
+        }
+    }
+}
+
 #[into_request(TeaclaveFrontendRequest::RegisterFusionOutput)]
 #[into_request(TeaclaveManagementRequest::RegisterFusionOutput)]
 #[derive(Debug)]
@@ -57,6 +89,12 @@ pub struct RegisterFusionOutputRequest {
     pub owner_list: HashSet<String>,
 }
 
+impl RegisterFusionOutputRequest {
+    pub fn new(owner_list: HashSet<String>) -> Self {
+        Self { owner_list }
+    }
+}
+
 #[into_request(TeaclaveFrontendResponse::RegisterFusionOutput)]
 #[into_request(TeaclaveManagementResponse::RegisterFusionOutput)]
 #[derive(Debug)]
@@ -64,6 +102,14 @@ pub struct RegisterFusionOutputResponse {
     pub data_id: String,
 }
 
+impl RegisterFusionOutputResponse {
+    pub fn new(data_id: impl Into<String>) -> Self {
+        Self {
+            data_id: data_id.into(),
+        }
+    }
+}
+
 #[into_request(TeaclaveFrontendRequest::RegisterInputFromOutput)]
 #[into_request(TeaclaveManagementRequest::RegisterInputFromOutput)]
 #[derive(Debug)]
@@ -71,6 +117,14 @@ pub struct RegisterInputFromOutputRequest {
     pub data_id: String,
 }
 
+impl RegisterInputFromOutputRequest {
+    pub fn new(data_id: impl Into<String>) -> Self {
+        Self {
+            data_id: data_id.into(),
+        }
+    }
+}
+
 #[into_request(TeaclaveFrontendResponse::RegisterInputFromOutput)]
 #[into_request(TeaclaveManagementResponse::RegisterInputFromOutput)]
 #[derive(Debug)]
@@ -78,6 +132,14 @@ pub struct RegisterInputFromOutputResponse {
     pub data_id: String,
 }
 
+impl RegisterInputFromOutputResponse {
+    pub fn new(data_id: impl Into<String>) -> Self {
+        Self {
+            data_id: data_id.into(),
+        }
+    }
+}
+
 #[into_request(TeaclaveFrontendRequest::GetInputFile)]
 #[into_request(TeaclaveManagementRequest::GetInputFile)]
 #[derive(Debug)]
@@ -85,6 +147,14 @@ pub struct GetInputFileRequest {
     pub data_id: String,
 }
 
+impl GetInputFileRequest {
+    pub fn new(data_id: impl Into<String>) -> Self {
+        Self {
+            data_id: data_id.into(),
+        }
+    }
+}
+
 #[into_request(TeaclaveFrontendResponse::GetInputFile)]
 #[into_request(TeaclaveManagementResponse::GetInputFile)]
 #[derive(Debug)]
@@ -93,6 +163,15 @@ pub struct GetInputFileResponse {
     pub hash: String,
 }
 
+impl GetInputFileResponse {
+    pub fn new(owner: HashSet<String>, hash: impl Into<String>) -> Self {
+        Self {
+            owner,
+            hash: hash.into(),
+        }
+    }
+}
+
 #[into_request(TeaclaveFrontendRequest::GetOutputFile)]
 #[into_request(TeaclaveManagementRequest::GetOutputFile)]
 #[derive(Debug)]
@@ -100,6 +179,14 @@ pub struct GetOutputFileRequest {
     pub data_id: String,
 }
 
+impl GetOutputFileRequest {
+    pub fn new(data_id: impl Into<String>) -> Self {
+        Self {
+            data_id: data_id.into(),
+        }
+    }
+}
+
 #[into_request(TeaclaveFrontendResponse::GetOutputFile)]
 #[into_request(TeaclaveManagementResponse::GetOutputFile)]
 #[derive(Debug)]
@@ -108,6 +195,15 @@ pub struct GetOutputFileResponse {
     pub hash: String,
 }
 
+impl GetOutputFileResponse {
+    pub fn new(owner: HashSet<String>, hash: impl Into<String>) -> Self {
+        Self {
+            owner,
+            hash: hash.into(),
+        }
+    }
+}
+
 #[into_request(TeaclaveManagementRequest::RegisterFunction)]
 #[into_request(TeaclaveFrontendRequest::RegisterFunction)]
 #[derive(Debug)]
@@ -127,6 +223,14 @@ pub struct RegisterFunctionResponse {
     pub function_id: String,
 }
 
+impl RegisterFunctionResponse {
+    pub fn new(function_id: impl Into<String>) -> Self {
+        Self {
+            function_id: function_id.into(),
+        }
+    }
+}
+
 #[into_request(TeaclaveManagementRequest::GetFunction)]
 #[into_request(TeaclaveFrontendRequest::GetFunction)]
 #[derive(Debug)]
@@ -134,6 +238,14 @@ pub struct GetFunctionRequest {
     pub function_id: String,
 }
 
+impl GetFunctionRequest {
+    pub fn new(function_id: impl Into<String>) -> Self {
+        Self {
+            function_id: function_id.into(),
+        }
+    }
+}
+
 #[into_request(TeaclaveManagementResponse::GetFunction)]
 #[derive(Debug)]
 pub struct GetFunctionResponse {
@@ -163,6 +275,14 @@ pub struct CreateTaskResponse {
     pub task_id: String,
 }
 
+impl CreateTaskResponse {
+    pub fn new(task_id: impl Into<String>) -> Self {
+        Self {
+            task_id: task_id.into(),
+        }
+    }
+}
+
 #[into_request(TeaclaveManagementRequest::GetTask)]
 #[into_request(TeaclaveFrontendRequest::GetTask)]
 #[derive(Debug)]
@@ -170,6 +290,14 @@ pub struct GetTaskRequest {
     pub task_id: String,
 }
 
+impl GetTaskRequest {
+    pub fn new(task_id: impl Into<String>) -> Self {
+        Self {
+            task_id: task_id.into(),
+        }
+    }
+}
+
 #[into_request(TeaclaveManagementResponse::GetTask)]
 #[derive(Debug)]
 pub struct GetTaskResponse {
@@ -196,6 +324,20 @@ pub struct AssignDataRequest {
     pub output_map: HashMap<String, String>,
 }
 
+impl AssignDataRequest {
+    pub fn new(
+        task_id: impl Into<String>,
+        input_map: HashMap<String, String>,
+        output_map: HashMap<String, String>,
+    ) -> Self {
+        Self {
+            task_id: task_id.into(),
+            input_map,
+            output_map,
+        }
+    }
+}
+
 #[derive(Debug)]
 pub struct AssignDataResponse;
 
@@ -206,6 +348,14 @@ pub struct ApproveTaskRequest {
     pub task_id: String,
 }
 
+impl ApproveTaskRequest {
+    pub fn new(task_id: impl Into<String>) -> Self {
+        Self {
+            task_id: task_id.into(),
+        }
+    }
+}
+
 #[derive(Debug)]
 pub struct ApproveTaskResponse;
 
@@ -216,6 +366,14 @@ pub struct InvokeTaskRequest {
     pub task_id: String,
 }
 
+impl InvokeTaskRequest {
+    pub fn new(task_id: impl Into<String>) -> Self {
+        Self {
+            task_id: task_id.into(),
+        }
+    }
+}
+
 #[derive(Debug)]
 pub struct InvokeTaskResponse;
 
diff --git a/tests/functional/enclave/src/teaclave_management_service.rs b/tests/functional/enclave/src/teaclave_management_service.rs
index 54cdfc6..d802df1 100644
--- a/tests/functional/enclave/src/teaclave_management_service.rs
+++ b/tests/functional/enclave/src/teaclave_management_service.rs
@@ -60,14 +60,10 @@ fn get_client(user_id: &str) -> TeaclaveManagementClient {
 }
 
 fn test_register_input_file() {
-    let request = RegisterInputFileRequest {
-        url: Url::parse("s3://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg.enc?key-id=deadbeefdeadbeef&key=deadbeefdeadbeef").unwrap(),
-        hash: "deadbeefdeadbeef".to_string(),
-        crypto_info: TeaclaveFileCryptoInfo::AesGcm128(AesGcm128CryptoInfo {
-            key: [0x90u8; 16],
-            iv: [0x89u8; 12],
-        }),
-    };
+    let url = Url::parse("s3://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg.enc?key-id=deadbeefdeadbeef&key=deadbeefdeadbeef").unwrap();
+    let crypto_info =
+        TeaclaveFileCryptoInfo::new("aes_gcm_128", &[0x90u8; 16], &[0x89u8; 12]).unwrap();
+    let request = RegisterInputFileRequest::new(url, "deadbeefdeadbeef", crypto_info);
 
     let mut client = get_client("mock_user");
     let response = client.register_input_file(request);
@@ -76,13 +72,10 @@ fn test_register_input_file() {
 }
 
 fn test_register_output_file() {
-    let request = RegisterOutputFileRequest {
-        url: Url::parse("s3://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg.enc?key-id=deadbeefdeadbeef&key=deadbeefdeadbeef").unwrap(),
-        crypto_info: TeaclaveFileCryptoInfo::AesGcm128(AesGcm128CryptoInfo {
-            key: [0x90u8; 16],
-            iv: [0x89u8; 12],
-        }),
-    };
+    let crypto_info =
+        TeaclaveFileCryptoInfo::new("aes_gcm_128", &[0x90u8; 16], &[0x89u8; 12]).unwrap();
+    let url = Url::parse("s3://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg.enc?key-id=deadbeefdeadbeef&key=deadbeefdeadbeef").unwrap();
+    let request = RegisterOutputFileRequest::new(url, crypto_info);
 
     let mut client = get_client("mock_user");
     let response = client.register_output_file(request);
@@ -119,71 +112,57 @@ fn test_register_input_from_output() {
     // not a owner
     let mut client = get_client("mock_user_c");
     let data_id = "output-file-00000000-0000-0000-0000-000000000001";
-    let request = RegisterInputFromOutputRequest {
-        data_id: data_id.to_string(),
-    };
+    let request = RegisterInputFromOutputRequest::new(data_id);
     let response = client.register_input_from_output(request);
     assert!(response.is_err());
 
     // output not ready
+    let url = Url::parse("s3://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg.enc?key-id=deadbeefdeadbeef&key=deadbeefdeadbeef").unwrap();
+    let crypto_info = TeaclaveFileCryptoInfo::default();
     let mut client = get_client("mock_user1");
-    let request = RegisterOutputFileRequest {
-        url: Url::parse("s3://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg.enc?key-id=deadbeefdeadbeef&key=deadbeefdeadbeef").unwrap(),
-        crypto_info: TeaclaveFileCryptoInfo::default(),
-    };
+    let request = RegisterOutputFileRequest::new(url, crypto_info);
     let response = client.register_output_file(request);
     assert!(response.is_ok());
-    let request = RegisterInputFromOutputRequest {
-        data_id: response.unwrap().data_id,
-    };
+    let request = RegisterInputFromOutputRequest::new(response.unwrap().data_id);
     let response = client.register_input_from_output(request);
     assert!(response.is_err());
 
-    let request = RegisterInputFromOutputRequest {
-        data_id: data_id.to_string(),
-    };
+    let request = RegisterInputFromOutputRequest::new(data_id);
     let response = client.register_input_from_output(request);
     assert!(response.is_ok());
     info!("{:?}", response);
 }
 
 fn test_get_output_file() {
-    let request = RegisterOutputFileRequest {
-        url: Url::parse("s3://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg.enc?key-id=deadbeefdeadbeef&key=deadbeefdeadbeef").unwrap(),
-        crypto_info: TeaclaveFileCryptoInfo::default(),
-    };
+    let url = Url::parse("s3://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg.enc?key-id=deadbeefdeadbeef&key=deadbeefdeadbeef").unwrap();
+    let crypto_info = TeaclaveFileCryptoInfo::default();
+    let request = RegisterOutputFileRequest::new(url, crypto_info);
 
     let mut client = get_client("mock_user");
     let response = client.register_output_file(request).unwrap();
     let data_id = response.data_id;
-    let request = GetOutputFileRequest {
-        data_id: data_id.clone(),
-    };
+    let request = GetOutputFileRequest::new(&data_id);
     let response = client.get_output_file(request);
     assert!(response.is_ok());
     let mut client = get_client("mock_another_user");
-    let request = GetOutputFileRequest { data_id };
+    let request = GetOutputFileRequest::new(&data_id);
     let response = client.get_output_file(request);
     assert!(response.is_err());
 }
 
 fn test_get_input_file() {
-    let request = RegisterInputFileRequest {
-        url: Url::parse("s3://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg.enc?key-id=deadbeefdeadbeef&key=deadbeefdeadbeef").unwrap(),
-        hash: "deadbeef".to_string(),
-        crypto_info: TeaclaveFileCryptoInfo::default(),
-    };
+    let url = Url::parse("s3://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg.enc?key-id=deadbeefdeadbeef&key=deadbeefdeadbeef").unwrap();
+    let crypto_info = TeaclaveFileCryptoInfo::default();
+    let request = RegisterInputFileRequest::new(url, "deadbeef", crypto_info);
 
     let mut client = get_client("mock_user");
     let response = client.register_input_file(request).unwrap();
     let data_id = response.data_id;
-    let request = GetInputFileRequest {
-        data_id: data_id.clone(),
-    };
+    let request = GetInputFileRequest::new(&data_id);
     let response = client.get_input_file(request);
     assert!(response.is_ok());
     let mut client = get_client("mock_another_user");
-    let request = GetInputFileRequest { data_id };
+    let request = GetInputFileRequest::new(&data_id);
     let response = client.get_input_file(request);
     assert!(response.is_err());
 }
@@ -231,12 +210,10 @@ fn test_get_function() {
     assert!(response.is_ok());
     info!("{:?}", response.unwrap());
     let mut client = get_client("mock_unauthorized_user");
-    let request = GetFunctionRequest { function_id };
+    let request = GetFunctionRequest::new(function_id);
     let response = client.get_function(request);
     assert!(response.is_err());
-    let request = GetFunctionRequest {
-        function_id: "function-00000000-0000-0000-0000-000000000001".to_string(),
-    };
+    let request = GetFunctionRequest::new("function-00000000-0000-0000-0000-000000000001");
     let response = client.get_function(request);
     assert!(response.is_ok());
     info!("{:?}", response.unwrap());
@@ -639,42 +616,30 @@ fn test_approve_task() {
     let response = client3.assign_data(request);
     assert!(response.is_ok());
 
-    let request = GetTaskRequest {
-        task_id: task_id.clone(),
-    };
+    let request = GetTaskRequest::new(&task_id);
     let response = client2.get_task(request);
     assert_eq!(response.unwrap().status, TaskStatus::Ready);
 
     // user_id not in task.participants
     let mut unknown_client = get_client("non-participant");
-    let request = ApproveTaskRequest {
-        task_id: task_id.clone(),
-    };
+    let request = ApproveTaskRequest::new(&task_id);
     let response = unknown_client.approve_task(request);
     assert!(response.is_err());
 
     //all participants approve the task
-    let request = ApproveTaskRequest {
-        task_id: task_id.clone(),
-    };
+    let request = ApproveTaskRequest::new(&task_id);
     let response = client.approve_task(request);
     assert!(response.is_ok());
-    let request = ApproveTaskRequest {
-        task_id: task_id.clone(),
-    };
+    let request = ApproveTaskRequest::new(&task_id);
     let response = client1.approve_task(request);
     assert!(response.is_ok());
-    let request = ApproveTaskRequest {
-        task_id: task_id.clone(),
-    };
+    let request = ApproveTaskRequest::new(&task_id);
     let response = client2.approve_task(request);
     assert!(response.is_ok());
-    let request = ApproveTaskRequest {
-        task_id: task_id.clone(),
-    };
+    let request = ApproveTaskRequest::new(&task_id);
     let response = client3.approve_task(request);
     assert!(response.is_ok());
-    let request = GetTaskRequest { task_id };
+    let request = GetTaskRequest::new(&task_id);
     let response = client2.get_task(request);
     assert_eq!(response.unwrap().status, TaskStatus::Approved);
 }
@@ -747,49 +712,33 @@ fn test_invoke_task() {
     assert!(response.is_ok());
 
     // task status != Approved
-    let request = InvokeTaskRequest {
-        task_id: task_id.clone(),
-    };
+    let request = InvokeTaskRequest::new(&task_id);
     let response = client.invoke_task(request);
     assert!(response.is_err());
 
     //all participants approve the task
-    let request = ApproveTaskRequest {
-        task_id: task_id.clone(),
-    };
+    let request = ApproveTaskRequest::new(&task_id);
     client.approve_task(request).unwrap();
-    let request = ApproveTaskRequest {
-        task_id: task_id.clone(),
-    };
+    let request = ApproveTaskRequest::new(&task_id);
     client1.approve_task(request).unwrap();
-    let request = ApproveTaskRequest {
-        task_id: task_id.clone(),
-    };
+    let request = ApproveTaskRequest::new(&task_id);
     client2.approve_task(request).unwrap();
-    let request = ApproveTaskRequest {
-        task_id: task_id.clone(),
-    };
+    let request = ApproveTaskRequest::new(&task_id);
     client3.approve_task(request).unwrap();
-    let request = GetTaskRequest {
-        task_id: task_id.clone(),
-    };
+    let request = GetTaskRequest::new(&task_id);
     let response = client2.get_task(request).unwrap();
     assert_eq!(response.status, TaskStatus::Approved);
 
     // user_id != task.creator
-    let request = InvokeTaskRequest {
-        task_id: task_id.clone(),
-    };
+    let request = InvokeTaskRequest::new(&task_id);
     let response = client2.invoke_task(request);
     assert!(response.is_err());
 
     // invoke task
-    let request = InvokeTaskRequest {
-        task_id: task_id.clone(),
-    };
+    let request = InvokeTaskRequest::new(&task_id);
     client.invoke_task(request).unwrap();
 
-    let request = GetTaskRequest { task_id };
+    let request = GetTaskRequest::new(&task_id);
     let response = client2.get_task(request).unwrap();
     assert_eq!(response.status, TaskStatus::Running);
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@teaclave.apache.org
For additional commands, e-mail: commits-help@teaclave.apache.org