local_revision_test.rs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. use crate::revision_test::script::{RevisionScript::*, RevisionTest};
  2. use flowy_revision::REVISION_WRITE_INTERVAL_IN_MILLIS;
  3. #[tokio::test]
  4. async fn revision_sync_test() {
  5. let test = RevisionTest::new().await;
  6. let (base_rev_id, rev_id) = test.next_rev_id_pair();
  7. test.run_script(AddLocalRevision {
  8. content: "123".to_string(),
  9. base_rev_id,
  10. rev_id,
  11. })
  12. .await;
  13. test.run_script(AssertNextSyncRevisionId { rev_id: Some(rev_id) }).await;
  14. test.run_script(AckRevision { rev_id }).await;
  15. test.run_script(AssertNextSyncRevisionId { rev_id: None }).await;
  16. }
  17. #[tokio::test]
  18. async fn revision_sync_multiple_revisions() {
  19. let test = RevisionTest::new_with_configuration(2).await;
  20. let (base_rev_id, rev_id_1) = test.next_rev_id_pair();
  21. test.run_script(AddLocalRevision {
  22. content: "123".to_string(),
  23. base_rev_id,
  24. rev_id: rev_id_1,
  25. })
  26. .await;
  27. let (base_rev_id, rev_id_2) = test.next_rev_id_pair();
  28. test.run_script(AddLocalRevision {
  29. content: "456".to_string(),
  30. base_rev_id,
  31. rev_id: rev_id_2,
  32. })
  33. .await;
  34. test.run_scripts(vec![
  35. AssertNextSyncRevisionId { rev_id: Some(rev_id_1) },
  36. AckRevision { rev_id: rev_id_1 },
  37. AssertNextSyncRevisionId { rev_id: Some(rev_id_2) },
  38. AckRevision { rev_id: rev_id_2 },
  39. AssertNextSyncRevisionId { rev_id: None },
  40. ])
  41. .await;
  42. }
  43. #[tokio::test]
  44. async fn revision_compress_three_revisions_test() {
  45. let test = RevisionTest::new_with_configuration(2).await;
  46. let (base_rev_id, rev_id_1) = test.next_rev_id_pair();
  47. test.run_script(AddLocalRevision {
  48. content: "1".to_string(),
  49. base_rev_id,
  50. rev_id: rev_id_1,
  51. })
  52. .await;
  53. let (base_rev_id, rev_id_2) = test.next_rev_id_pair();
  54. test.run_script(AddLocalRevision {
  55. content: "2".to_string(),
  56. base_rev_id,
  57. rev_id: rev_id_2,
  58. })
  59. .await;
  60. let (base_rev_id, rev_id_3) = test.next_rev_id_pair();
  61. test.run_script(AddLocalRevision {
  62. content: "3".to_string(),
  63. base_rev_id,
  64. rev_id: rev_id_3,
  65. })
  66. .await;
  67. let (base_rev_id, rev_id_4) = test.next_rev_id_pair();
  68. test.run_script(AddLocalRevision {
  69. content: "4".to_string(),
  70. base_rev_id,
  71. rev_id: rev_id_4,
  72. })
  73. .await;
  74. // rev_id_2,rev_id_3,rev_id4 will be merged into rev_id_1
  75. test.run_scripts(vec![
  76. Wait {
  77. milliseconds: REVISION_WRITE_INTERVAL_IN_MILLIS,
  78. },
  79. AssertNumberOfSyncRevisions { num: 1 },
  80. AssertNextSyncRevisionId { rev_id: Some(rev_id_1) },
  81. AssertNextSyncRevisionContent {
  82. expected: "1234".to_string(),
  83. },
  84. AckRevision { rev_id: rev_id_1 },
  85. AssertNextSyncRevisionId { rev_id: None },
  86. ])
  87. .await;
  88. }
  89. #[tokio::test]
  90. async fn revision_compress_three_revisions_test2() {
  91. let test = RevisionTest::new_with_configuration(2).await;
  92. let (base_rev_id, rev_id_1) = test.next_rev_id_pair();
  93. test.run_script(AddLocalRevision {
  94. content: "1".to_string(),
  95. base_rev_id,
  96. rev_id: rev_id_1,
  97. })
  98. .await;
  99. let (base_rev_id, rev_id_2) = test.next_rev_id_pair();
  100. test.run_script(AddLocalRevision {
  101. content: "2".to_string(),
  102. base_rev_id,
  103. rev_id: rev_id_2,
  104. })
  105. .await;
  106. let (base_rev_id, rev_id_3) = test.next_rev_id_pair();
  107. test.run_script(AddLocalRevision {
  108. content: "3".to_string(),
  109. base_rev_id,
  110. rev_id: rev_id_3,
  111. })
  112. .await;
  113. let (base_rev_id, rev_id_4) = test.next_rev_id_pair();
  114. test.run_script(AddLocalRevision {
  115. content: "4".to_string(),
  116. base_rev_id,
  117. rev_id: rev_id_4,
  118. })
  119. .await;
  120. let (base_rev_id, rev_id_a) = test.next_rev_id_pair();
  121. test.run_script(AddLocalRevision {
  122. content: "a".to_string(),
  123. base_rev_id,
  124. rev_id: rev_id_a,
  125. })
  126. .await;
  127. let (base_rev_id, rev_id_b) = test.next_rev_id_pair();
  128. test.run_script(AddLocalRevision {
  129. content: "b".to_string(),
  130. base_rev_id,
  131. rev_id: rev_id_b,
  132. })
  133. .await;
  134. let (base_rev_id, rev_id_c) = test.next_rev_id_pair();
  135. test.run_script(AddLocalRevision {
  136. content: "c".to_string(),
  137. base_rev_id,
  138. rev_id: rev_id_c,
  139. })
  140. .await;
  141. let (base_rev_id, rev_id_d) = test.next_rev_id_pair();
  142. test.run_script(AddLocalRevision {
  143. content: "d".to_string(),
  144. base_rev_id,
  145. rev_id: rev_id_d,
  146. })
  147. .await;
  148. test.run_scripts(vec![
  149. // Wait {
  150. // milliseconds: REVISION_WRITE_INTERVAL_IN_MILLIS,
  151. // },
  152. AssertNumberOfSyncRevisions { num: 2 },
  153. AssertNextSyncRevisionId { rev_id: Some(rev_id_1) },
  154. AssertNextSyncRevisionContent {
  155. expected: "1234".to_string(),
  156. },
  157. AckRevision { rev_id: rev_id_1 },
  158. AssertNextSyncRevisionId { rev_id: Some(rev_id_a) },
  159. AssertNextSyncRevisionContent {
  160. expected: "abcd".to_string(),
  161. },
  162. AckRevision { rev_id: rev_id_a },
  163. AssertNextSyncRevisionId { rev_id: None },
  164. ])
  165. .await;
  166. }
  167. #[tokio::test]
  168. async fn revision_merge_per_5_revision_test() {
  169. let test = RevisionTest::new_with_configuration(4).await;
  170. for i in 0..20 {
  171. let content = format!("{}", i);
  172. let (base_rev_id, rev_id) = test.next_rev_id_pair();
  173. test.run_script(AddLocalRevision {
  174. content,
  175. base_rev_id,
  176. rev_id,
  177. })
  178. .await;
  179. }
  180. test.run_scripts(vec![AssertNumberOfSyncRevisions { num: 5 }]).await;
  181. }