chiark / gitweb /
apitest: Move much bundle processing into main.rs
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 18 May 2021 00:39:05 +0000 (01:39 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 18 May 2021 00:53:30 +0000 (01:53 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
apitest/at-bundles.rs
apitest/main.rs

index 61dd3a4fb4b9261b06d084876ceb31532512546c..217fe094a5af25da94dad0d990d53df674af57f0 100644 (file)
@@ -7,57 +7,9 @@ use crate::*;
 type Ctx = UsualCtx;
 
 impl Ctx {
-  #[throws(Explode)]
-  fn check_library_item(&mut self, itemlib: &str, item: &str,
-                        desc: &str) {
-    let ds = self.su().ds.also(&[
-      ("itemlib", itemlib),
-      ("item",    item   ),
-    ]);
-    let command = ds.ss("library-add --lib @itemlib@ @table@ @item@")?;
-    let added = self.some_library_add(&command)?;
-    assert_eq!( added.len(), 1 );
-
-    let output: String = self.otter(&ds.ss("list-pieces @table@")?)?.into();
-    assert_eq!( Regex::new(
-      &format!(
-        r#"(?m)(?:[^\w-]|^){}[^\w-].*\W{}(?:\W|$)"#,
-        item, desc,
-      )
-    )?
-                .find_iter(&output).count(),
-                1,
-                "got: {}", &output);
-  }
-
   #[throws(Explode)]
   fn bundles(&mut self) {
-    let bundle_file = self.su().ds.example_bundle();
-    let ds = self.su().ds.also(&[("bundle", &bundle_file)]);
-    self.otter(&ds.ss("upload-bundle @table@ @bundle@")?)?;
-    let mut bundles = self.otter(&ds.ss("list-bundles @table@")?)?;
-    let bundles = String::from(&mut bundles);
-    assert!(bundles.starts_with("00000.zip Loaded"));
-    self.otter(&ds.ss("download-bundle @table@ 0")?)?;
-    let st = Command::new("cmp").args(&[&bundle_file, "00000.zip"]).status()?;
-    if ! st.success() { panic!("cmp failed {}", st) }
-
-    self.check_library_item("lemon","example-lemon","a lemon")?;
-
-    self.stop_and_restart_server()?;
-
-    let id =
-      self.su().mgmt_conn().list_pieces()?
-      .0.iter()
-      .find(|pi| pi.itemname.as_str() == "example-lemon")
-      .unwrap()
-      .piece;
-    self.su().mgmt_conn().alter_game(vec![MGI::DeletePiece(id)], None)?;
-
-    self.check_library_item("lemon","example-lemon","a lemon")?;
-
-    self.otter(&ds.ss("clear-game @table@")?)?;
-    self.reset_game(&ds.ss("reset @table@ demo")?)?;
+    self.upload_and_check_bundle("lemon","example-lemon","a lemon")?;
   }
 }
 
index 7b726996c115a0202d7bab414bc28d50db19e5ed..7ef77d2cffb468ad7a7969df43d26ae6eddcece5 100644 (file)
@@ -562,6 +562,62 @@ impl UsualCtx {
     assert_eq!(st.signal(), Some(nix::sys::signal::SIGTERM as i32));
     su.restart_gameserver()?;
   }
+
+  #[throws(Explode)]
+  pub fn check_library_item(&mut self, itemlib: &str, item: &str,
+                        desc: &str) {
+    let ds = self.su().ds.also(&[
+      ("itemlib", itemlib),
+      ("item",    item   ),
+    ]);
+    let command = ds.ss("library-add --lib @itemlib@ @table@ @item@")?;
+    let added = self.some_library_add(&command)?;
+    assert_eq!( added.len(), 1 );
+
+    let output: String = self.otter(&ds.ss("list-pieces @table@")?)?.into();
+    assert_eq!( Regex::new(
+      &format!(
+        r#"(?m)(?:[^\w-]|^){}[^\w-].*\W{}(?:\W|$)"#,
+        item, desc,
+      )
+    )?
+                .find_iter(&output).count(),
+                1,
+                "got: {}", &output);
+  }
+
+  #[throws(Explode)]
+  pub fn upload_and_check_bundle(&mut self,
+                                 libname: &str, item: &str,
+                                 desc: &str)
+  {
+    let bundle_file = self.su().ds.example_bundle();
+    let ds = self.su().ds.also(&[("bundle", &bundle_file)]);
+    self.otter(&ds.ss("upload-bundle @table@ @bundle@")?)?;
+    let mut bundles = self.otter(&ds.ss("list-bundles @table@")?)?;
+    let bundles = String::from(&mut bundles);
+    assert!(bundles.starts_with("00000.zip Loaded"));
+    self.otter(&ds.ss("download-bundle @table@ 0")?)?;
+    let st = Command::new("cmp").args(&[&bundle_file, "00000.zip"]).status()?;
+    if ! st.success() { panic!("cmp failed {}", st) }
+
+    self.check_library_item(libname,item,desc)?;
+
+    self.stop_and_restart_server()?;
+
+    let id =
+      self.su().mgmt_conn().list_pieces()?
+      .0.iter()
+      .find(|pi| pi.itemname.as_str() == item)
+      .unwrap()
+      .piece;
+    self.su().mgmt_conn().alter_game(vec![MGI::DeletePiece(id)], None)?;
+
+    self.check_library_item(libname,item,desc)?;
+
+    self.otter(&ds.ss("clear-game @table@")?)?;
+    self.reset_game(&ds.ss("reset @table@ demo")?)?;
+  }
 }
 
 impl UsualCtx {