summaryrefslogtreecommitdiff
path: root/crates/env/env_test
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2025-09-22 18:40:54 +0800
committer魏曹先生 <1992414357@qq.com>2025-09-22 18:40:54 +0800
commita759bf0c040cdfd0fa207133cbd8629d8be51334 (patch)
tree7225408df9d38ac8bc1ce744f6f80d1ffb0ce020 /crates/env/env_test
parentff38c0740de468be86468119033b2fb9e3d84d5b (diff)
Editing `test_virtual_file_creation_and_update`
Diffstat (limited to 'crates/env/env_test')
-rw-r--r--crates/env/env_test/src/test_virtual_file_creation_and_update.rs128
1 files changed, 128 insertions, 0 deletions
diff --git a/crates/env/env_test/src/test_virtual_file_creation_and_update.rs b/crates/env/env_test/src/test_virtual_file_creation_and_update.rs
new file mode 100644
index 0000000..4d22a23
--- /dev/null
+++ b/crates/env/env_test/src/test_virtual_file_creation_and_update.rs
@@ -0,0 +1,128 @@
+use std::time::Duration;
+
+use cfg_file::config::ConfigFile;
+use env::workspace::{
+ member::Member,
+ vault::{Vault, config::VaultConfig, vitrual_file::VirtualFileVersionDesciption},
+};
+use tcp_connection::{
+ handle::{ClientHandle, ServerHandle},
+ target::TcpServerTarget,
+ target_configure::ServerTargetConfig,
+};
+use tokio::{
+ join,
+ time::{sleep, timeout},
+};
+
+use crate::get_and_correct_test_dir;
+
+struct VirtualFileCreateClientHandle;
+struct VirtualFileCreateServerHandle;
+
+impl ClientHandle<VirtualFileCreateServerHandle> for VirtualFileCreateClientHandle {
+ fn process(
+ instance: tcp_connection::instance::ConnectionInstance,
+ ) -> impl Future<Output = ()> + Send + Sync {
+ async move {}
+ }
+}
+
+impl ServerHandle<VirtualFileCreateClientHandle> for VirtualFileCreateServerHandle {
+ fn process(
+ mut instance: tcp_connection::instance::ConnectionInstance,
+ ) -> impl Future<Output = ()> + Send + Sync {
+ async move {
+ let dir = get_and_correct_test_dir("virtual_file_creation_and_update")
+ .await
+ .unwrap();
+
+ // Setup vault
+ Vault::setup_vault(dir.clone()).await.unwrap();
+
+ // Read vault
+ let Some(vault) = Vault::init_current_dir(VaultConfig::read().await.unwrap()) else {
+ panic!("No vault found!");
+ };
+
+ // Register member
+ let member_id = "test_member";
+ vault.register_member_to_vault(Member::new(member_id)).await;
+
+ // Create visual file
+ let virtual_file_id = vault
+ .create_virtual_file_from_connection(&mut instance, member_id.to_string())
+ .await
+ .unwrap();
+
+ // Update visual file
+ vault
+ .update_virtual_file_from_connection(
+ &mut instance,
+ member_id.to_string(),
+ virtual_file_id,
+ "2".to_string(),
+ VirtualFileVersionDesciption {
+ creator: member_id.to_string(),
+ description: "Update".to_string(),
+ },
+ )
+ .await
+ .unwrap();
+ }
+ }
+}
+
+#[tokio::test]
+async fn test_virtual_file_creation_and_update() -> Result<(), std::io::Error> {
+ let host = "localhost:5009";
+
+ // Server setup
+ let Ok(server_target) = TcpServerTarget::<
+ VirtualFileCreateClientHandle,
+ VirtualFileCreateServerHandle,
+ >::from_domain(host)
+ .await
+ else {
+ panic!("Test target built failed from a domain named `{}`", host);
+ };
+
+ // Client setup
+ let Ok(client_target) = TcpServerTarget::<
+ VirtualFileCreateClientHandle,
+ VirtualFileCreateServerHandle,
+ >::from_domain(host)
+ .await
+ else {
+ panic!("Test target built failed from a domain named `{}`", host);
+ };
+
+ let future_server = async move {
+ // Only process once
+ let configured_server = server_target.server_cfg(ServerTargetConfig::default().once());
+
+ // Listen here
+ let _ = configured_server.listen().await;
+ };
+
+ let future_client = async move {
+ // Wait for server start
+ let _ = sleep(Duration::from_secs_f32(1.5)).await;
+
+ // Connect here
+ let _ = client_target.connect().await;
+ };
+
+ let test_timeout = Duration::from_secs(15);
+
+ timeout(test_timeout, async { join!(future_client, future_server) })
+ .await
+ .map_err(|_| {
+ std::io::Error::new(
+ std::io::ErrorKind::TimedOut,
+ format!("Test timed out after {:?}", test_timeout),
+ )
+ })?;
+
+ Ok(())
+}