feat: enable dispatch event using single thread (#3828)

* refactor: lib dispatch

* chore: type def

* chore: type def

* fix: local set spawn

* chore: replace tokio spawn

* chore: update log

* chore: boxed event

* chore: tauri lock
This commit is contained in:
Nathan.fooo
2023-10-30 12:35:06 +08:00
committed by GitHub
parent 7f4e7e6aa0
commit e08a1a6974
67 changed files with 822 additions and 554 deletions

View File

@ -75,7 +75,7 @@ pub struct FolderTest {
impl FolderTest {
pub async fn new() -> Self {
let sdk = EventIntegrationTest::new();
let sdk = EventIntegrationTest::new().await;
let _ = sdk.init_anon_user().await;
let workspace = create_workspace(&sdk, "FolderWorkspace", "Folder test workspace").await;
let parent_view = create_app(&sdk, &workspace.id, "Folder App", "Folder test app").await;

View File

@ -18,19 +18,19 @@ use crate::util::receive_with_timeout;
async fn create_child_view_in_workspace_subscription_test() {
let test = EventIntegrationTest::new_with_guest_user().await;
let workspace = test.get_current_workspace().await.workspace;
let mut rx = test
let rx = test
.notification_sender
.subscribe::<RepeatedViewPB>(&workspace.id, FolderNotification::DidUpdateWorkspaceViews);
let cloned_test = test.clone();
let cloned_workspace_id = workspace.id.clone();
tokio::spawn(async move {
test.inner.dispatcher().spawn(async move {
cloned_test
.create_view(&cloned_workspace_id, "workspace child view".to_string())
.await;
});
let views = receive_with_timeout(&mut rx, Duration::from_secs(30))
let views = receive_with_timeout(rx, Duration::from_secs(30))
.await
.unwrap()
.items;
@ -43,14 +43,14 @@ async fn create_child_view_in_view_subscription_test() {
let test = EventIntegrationTest::new_with_guest_user().await;
let mut workspace = test.get_current_workspace().await.workspace;
let workspace_child_view = workspace.views.pop().unwrap();
let mut rx = test.notification_sender.subscribe::<ChildViewUpdatePB>(
let rx = test.notification_sender.subscribe::<ChildViewUpdatePB>(
&workspace_child_view.id,
FolderNotification::DidUpdateChildViews,
);
let cloned_test = test.clone();
let child_view_id = workspace_child_view.id.clone();
tokio::spawn(async move {
test.inner.dispatcher().spawn(async move {
cloned_test
.create_view(
&child_view_id,
@ -59,7 +59,7 @@ async fn create_child_view_in_view_subscription_test() {
.await;
});
let update = receive_with_timeout(&mut rx, Duration::from_secs(30))
let update = receive_with_timeout(rx, Duration::from_secs(30))
.await
.unwrap();
@ -74,20 +74,29 @@ async fn create_child_view_in_view_subscription_test() {
async fn delete_view_subscription_test() {
let test = EventIntegrationTest::new_with_guest_user().await;
let workspace = test.get_current_workspace().await.workspace;
let mut rx = test
let rx = test
.notification_sender
.subscribe::<ChildViewUpdatePB>(&workspace.id, FolderNotification::DidUpdateChildViews);
let cloned_test = test.clone();
let delete_view_id = workspace.views.first().unwrap().id.clone();
let cloned_delete_view_id = delete_view_id.clone();
tokio::spawn(async move {
cloned_test.delete_view(&cloned_delete_view_id).await;
});
let update = receive_with_timeout(&mut rx, Duration::from_secs(30))
test
.inner
.dispatcher()
.spawn(async move {
cloned_test.delete_view(&cloned_delete_view_id).await;
})
.await
.unwrap();
let update = test
.inner
.dispatcher()
.run_until(receive_with_timeout(rx, Duration::from_secs(30)))
.await
.unwrap();
assert_eq!(update.delete_child_views.len(), 1);
assert_eq!(update.delete_child_views[0], delete_view_id);
}
@ -96,7 +105,7 @@ async fn delete_view_subscription_test() {
async fn update_view_subscription_test() {
let test = EventIntegrationTest::new_with_guest_user().await;
let mut workspace = test.get_current_workspace().await.workspace;
let mut rx = test
let rx = test
.notification_sender
.subscribe::<ChildViewUpdatePB>(&workspace.id, FolderNotification::DidUpdateChildViews);
@ -105,7 +114,7 @@ async fn update_view_subscription_test() {
assert!(!view.is_favorite);
let update_view_id = view.id.clone();
tokio::spawn(async move {
test.inner.dispatcher().spawn(async move {
cloned_test
.update_view(UpdateViewPayloadPB {
view_id: update_view_id,
@ -116,7 +125,7 @@ async fn update_view_subscription_test() {
.await;
});
let update = receive_with_timeout(&mut rx, Duration::from_secs(30))
let update = receive_with_timeout(rx, Duration::from_secs(30))
.await
.unwrap();
assert_eq!(update.update_child_views.len(), 1);

View File

@ -466,7 +466,7 @@ async fn move_view_event_after_delete_view_test2() {
#[tokio::test]
async fn create_parent_view_with_invalid_name() {
for (name, code) in invalid_workspace_name_test_case() {
let sdk = EventIntegrationTest::new();
let sdk = EventIntegrationTest::new().await;
let request = CreateWorkspacePayloadPB {
name,
desc: "".to_owned(),

View File

@ -19,7 +19,7 @@ pub struct FlowySupabaseFolderTest {
impl FlowySupabaseFolderTest {
pub async fn new() -> Option<Self> {
let inner = FlowySupabaseTest::new()?;
let inner = FlowySupabaseTest::new().await?;
let uuid = uuid::Uuid::new_v4().to_string();
let _ = inner.supabase_sign_up_with_uuid(&uuid, None).await;
Some(Self { inner })

View File

@ -34,11 +34,11 @@ async fn supabase_decrypt_folder_data_test() {
.create_view(&workspace_id, "encrypt view".to_string())
.await;
let mut rx = test
let rx = test
.notification_sender
.subscribe_with_condition::<FolderSyncStatePB, _>(&workspace_id, |pb| pb.is_finish);
receive_with_timeout(&mut rx, Duration::from_secs(10))
receive_with_timeout(rx, Duration::from_secs(10))
.await
.unwrap();
let folder_data = get_folder_data_from_server(&workspace_id, secret)
@ -59,10 +59,10 @@ async fn supabase_decrypt_with_invalid_secret_folder_data_test() {
test
.create_view(&workspace_id, "encrypt view".to_string())
.await;
let mut rx = test
let rx = test
.notification_sender
.subscribe_with_condition::<FolderSyncStatePB, _>(&workspace_id, |pb| pb.is_finish);
receive_with_timeout(&mut rx, Duration::from_secs(10))
receive_with_timeout(rx, Duration::from_secs(10))
.await
.unwrap();
@ -75,10 +75,10 @@ async fn supabase_decrypt_with_invalid_secret_folder_data_test() {
async fn supabase_folder_snapshot_test() {
if let Some(test) = FlowySupabaseFolderTest::new().await {
let workspace_id = test.get_current_workspace().await.workspace.id;
let mut rx = test
let rx = test
.notification_sender
.subscribe::<FolderSnapshotStatePB>(&workspace_id, DidUpdateFolderSnapshotState);
receive_with_timeout(&mut rx, Duration::from_secs(10))
receive_with_timeout(rx, Duration::from_secs(10))
.await
.unwrap();
@ -104,11 +104,11 @@ async fn supabase_initial_folder_snapshot_test2() {
.create_view(&workspace_id, "supabase test view3".to_string())
.await;
let mut rx = test
let rx = test
.notification_sender
.subscribe_with_condition::<FolderSyncStatePB, _>(&workspace_id, |pb| pb.is_finish);
receive_with_timeout(&mut rx, Duration::from_secs(10))
receive_with_timeout(rx, Duration::from_secs(10))
.await
.unwrap();