chiark / gitweb /
apitest: resynch_pieces
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 27 Feb 2021 00:14:21 +0000 (00:14 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 27 Feb 2021 00:14:21 +0000 (00:14 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
apitest/at-otter.rs

index a2d795659895acf733d169862324c7df20c316af..724a637cbb6c0bbd326bce24b814f7075ca0d231 100644 (file)
@@ -221,6 +221,24 @@ impl Session {
       .send()?;
     ensure_eq!(resp.status(), 200);
   }
+
+  #[throws(AE)]
+  fn resynch_pieces(&mut self) {
+    'overall: loop {
+      let update = self.updates.recv()?;
+      let update = update.as_array().unwrap();
+      let new_gen = &update[0];
+      for ue in update[1].as_array().unwrap() {
+        let (k,v) = ue.as_object().unwrap().iter().next().unwrap();
+        let got_cseq: RawClientSequence = match k.as_str() {
+          "Recorded" => v["cseq"].as_i64().unwrap().try_into().unwrap(),
+          "Log" => continue,
+          _ => throw!(anyhow!("unknown update: {}", ue)),
+        };
+        if got_cseq == self.cseq { break 'overall }
+      }
+    }
+  }
 }
 
 impl Ctx {
@@ -258,6 +276,8 @@ impl Ctx {
       session.api_piece_op(&self.su, &llm.id, "m", json![pos.0])?;
     }
 
+    session.resynch_pieces()?;
+
     // xxx send api requests to move markers
     // run library-add again
   }