Browse Source

test(rtc): fix case move-blocks-concurrently

rcmerci 1 year ago
parent
commit
bc7a7d6c6d
3 changed files with 36 additions and 12 deletions
  1. 4 1
      scripts/src/logseq/tasks/dev.clj
  2. 12 8
      src/rtc_e2e_test/client_steps.cljs
  3. 20 3
      src/rtc_e2e_test/helper.cljs

+ 4 - 1
scripts/src/logseq/tasks/dev.clj

@@ -27,10 +27,13 @@
 
 (defn rtc-e2e-test
   "Run karma rtc-e2e-test"
-  []
+  [& [skip-compile?]]
   (let [seed (hash (rand))
+        r0 (when-not skip-compile? (shell (str "clj -M:rtc-e2e-test compile rtc-e2e-test")))
         c1 (async/go (shell (str "npx karma start --testvar=client1 --single-run --seed=" seed)))
         c2 (async/go (shell (str "npx karma start --testvar=client2 --single-run --seed=" seed)))]
+    (when (and r0 (not= 0 (:exit r0)))
+      (throw (ex-info "compile failed" {:r r0})))
     (prn :exit-code :client1 (:exit (async/<!! c1)) :client2 (:exit (async/<!! c2)))))
 
 (defn gen-malli-kondo-config

+ 12 - 8
src/rtc_e2e_test/client_steps.cljs

@@ -155,16 +155,18 @@
              #(= "move-blocks-concurrently-signal-from-client2" %)
              :retry-message "move-blocks-concurrently-signal-from-client2"))
        (m/? (helper/new-task--send-message-to-other-client "move-blocks-concurrently-signal-from-client1"))
-       (rtc-core/rtc-stop)
+       (m/? helper/new-task--stop-rtc)
        (helper/transact! conn tx-data2)
        (is (nil? (m/? (rtc-core/new-task--rtc-start const/downloaded-test-repo const/test-token))))
        (m/? (helper/new-task--wait-all-client-ops-sent))
        (let [message (m/? (helper/new-task--wait-message-from-other-client
-                           (fn [message] (= "move-blocks-concurrently-page-blocks" (:id message)))))
+                           (fn [message] (= "move-blocks-concurrently-page-blocks" (:id message)))
+                           :retry-message "move-blocks-concurrently-page-blocks"))
              client2-page-blocks (:page-blocks message)
-             client1-page-blocks (ldb/get-page-blocks @conn (d/entity @conn [:block/uuid const/page3-uuid]))]
-         (helper/log :client1-page-blocks client1-page-blocks)
-         (helper/log :client2-page-blocks client2-page-blocks))))
+             client1-page-blocks (ldb/get-page-blocks @conn (:db/id (d/entity @conn [:block/uuid const/page3-uuid]))
+                                                      :pull-keys '[:block/uuid :block/title :block/order
+                                                                   {:block/parent [:block/uuid]}])]
+         (is (= (set client1-page-blocks) (set client2-page-blocks))))))
    :client2
    (m/sp
      (let [conn (helper/get-downloaded-test-conn)]
@@ -183,14 +185,16 @@
        (m/? (helper/new-task--wait-message-from-other-client
              #(= "move-blocks-concurrently-signal-from-client1" %)
              :retry-message "move-blocks-concurrently-signal-from-client1"))
-       (rtc-core/rtc-stop)
+       (m/? helper/new-task--stop-rtc)
        (helper/transact! conn (const/tx-data-map :move-blocks-concurrently-client2))
        (is (nil? (m/? (rtc-core/new-task--rtc-start const/downloaded-test-repo const/test-token))))
        (m/? (helper/new-task--wait-all-client-ops-sent))
        (m/? (m/sleep 5000))
        (m/? (helper/new-task--send-message-to-other-client
              {:id "move-blocks-concurrently-page-blocks"
-              :page-blocks (ldb/get-page-blocks @conn (:db/id (d/entity @conn [:block/uuid const/page3-uuid])))}))))})
+              :page-blocks (ldb/get-page-blocks @conn (:db/id (d/entity @conn [:block/uuid const/page3-uuid]))
+                                                :pull-keys '[:block/uuid :block/title :block/order
+                                                             {:block/parent [:block/uuid]}])}))))})
 
 (defn- wrap-print-step-info
   [steps client]
@@ -202,7 +206,7 @@
        (helper/log "end step" idx)))
    steps))
 
-(def ^:private all-steps [step0 step1 step2 step3 step4])
+(def ^:private all-steps [step0 step1 step2 step3 step4 step5])
 
 (def client1-steps
   (wrap-print-step-info all-steps :client1))

+ 20 - 3
src/rtc_e2e_test/helper.cljs

@@ -1,6 +1,6 @@
 (ns helper
   (:require [cljs.test :as t :refer [is]]
-            [cognitect.transit :as transit]
+            [datascript.transit :as dt]
             [const]
             [datascript.core :as d]
             [frontend.common.missionary-util :as c.m]
@@ -129,7 +129,7 @@
                    {:block/uuid (random-uuid)
                     :block/parent "page"
                     :block/order min-order
-                    :block/title (transit/write (transit/writer :json) message)
+                    :block/title (dt/write-transit-str message)
                     :block/page "page"
                     :block/format :markdown
                     :block/updated-at 1724836490810
@@ -149,7 +149,7 @@
            message-page-id (:db/id (ldb/get-page @conn const/message-page-uuid))
            first-block (when message-page-id
                          (first (ldb/sort-by-order (ldb/get-page-blocks @conn message-page-id))))
-           first-block-title (some->> (:block/title first-block) (transit/read (transit/reader :json)))]
+           first-block-title (some->> (:block/title first-block) dt/read-transit-str)]
        (when-not (and (some? first-block-title)
                       (block-title-pred-fn first-block-title))
          (throw (ex-info (str "wait message from other client " retry-message) {:missionary/retry true})))
@@ -160,3 +160,20 @@
   {:pre [(seq tx-data)]}
   (batch-tx/with-batch-tx-mode conn {:e2e-test const/downloaded-test-repo :skip-store-conn true}
     (d/transact! conn tx-data)))
+
+(def new-task--stop-rtc
+  (m/sp
+    (rtc.core/rtc-stop)
+    (let [r (m/?
+             (m/timeout
+              (m/reduce
+               (fn [_ v]
+                 (when (= :rtc.log/cancelled (:type v))
+                   (log :debug-stop-rtc v)
+                   (reduced v)))
+               rtc-log-and-state/rtc-log-flow)
+              3000
+              :timeout))]
+      (is (not= :timeout r))
+      ;; sleep 0.1s to ensure *rtc-lock released
+      (m/? (m/sleep 100)))))