[Libguestfs] [PATCH 3/9] Rust bindings: Add 4 bindings tests

Hiroyuki Katsura hiroyuki.katsura.0513 at gmail.com
Thu Jun 27 08:06:04 UTC 2019


From: Hiroyuki_Katsura <hiroyuki.katsura.0513 at gmail.com>

---
 generator/rust.ml                 | 13 ++++++++---
 run.in                            |  9 ++++++++
 rust/Cargo.lock                   |  6 +++++
 rust/Cargo.toml                   |  4 +---
 rust/tests/010_load.rs            | 24 +++++++++++++++++++
 rust/tests/020_create.rs          | 24 +++++++++++++++++++
 rust/tests/030_create_flags.rs    | 30 ++++++++++++++++++++++++
 rust/tests/040_create_multiple.rs | 38 +++++++++++++++++++++++++++++++
 8 files changed, 142 insertions(+), 6 deletions(-)
 create mode 100644 rust/Cargo.lock
 create mode 100644 rust/tests/010_load.rs
 create mode 100644 rust/tests/020_create.rs
 create mode 100644 rust/tests/030_create_flags.rs
 create mode 100644 rust/tests/040_create_multiple.rs

diff --git a/generator/rust.ml b/generator/rust.ml
index dbe9db010..251eb1594 100644
--- a/generator/rust.ml
+++ b/generator/rust.ml
@@ -37,14 +37,16 @@ let generate_rust () =
 #[allow(non_camel_case_types)]
 enum guestfs_h {}
 
+#[link(name = \"guestfs\")]
 extern \"C\" {
     fn guestfs_create() -> *mut guestfs_h;
     fn guestfs_create_flags(flags: i64) -> *mut guestfs_h;
     fn guestfs_close(g: *mut guestfs_h);
-    static GUESTFS_CREATE_NO_ENVIRONMENT: i64;
-    static GUESTFS_CREATE_NO_CLOSE_ON_EXIT: i64;
 }
 
+const GUESTFS_CREATE_NO_ENVIRONMENT: i64 = 1;
+const GUESTFS_CREATE_NO_CLOSE_ON_EXIT: i64 = 2;
+
 pub struct Handle {
     g: *mut guestfs_h,
 }
@@ -61,13 +63,17 @@ pub struct CreateFlags {
 }
 
 impl CreateFlags {
-    pub fn new() -> CreateFlags {
+    pub fn none() -> CreateFlags {
         CreateFlags {
             create_no_environment_flag: false,
             create_no_close_on_exit_flag: false,
         }
     }
 
+    pub fn new() -> CreateFlags {
+        CreateFlags::none()
+    }
+
     pub fn create_no_environment(mut self, flag: bool) -> CreateFlags {
         self.create_no_environment_flag = flag;
         self
@@ -97,6 +103,7 @@ impl CreateFlags {
 impl Handle {
     pub fn create() -> Result<Handle, &'static str> {
         let g = unsafe { guestfs_create() };
+        println!(\"hoge\");
         if g.is_null() {
             Err(\"failed to create guestfs handle\")
         } else {
diff --git a/run.in b/run.in
index 488e1b937..301b02664 100755
--- a/run.in
+++ b/run.in
@@ -201,6 +201,15 @@ else
 fi
 export CGO_LDFLAGS
 
+# For rust
+export RUST="@RUST@"
+if [ -z "$RUSTFLAGS" ]; then
+    RUSTFLAGS="-C link-args=-L$b/lib/.libs"
+else
+    RUSTFLAGS="$RUSTFLAGS -C link-args=-L$b/lib/.libs"
+fi
+export RUSTFLAGS
+
 # For GObject, Javascript and friends.
 export GJS="@GJS@"
 prepend GI_TYPELIB_PATH "$b/gobject"
diff --git a/rust/Cargo.lock b/rust/Cargo.lock
new file mode 100644
index 000000000..c03586e3f
--- /dev/null
+++ b/rust/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "guestfs"
+version = "0.1.0"
+
diff --git a/rust/Cargo.toml b/rust/Cargo.toml
index 6cd94ce6a..4ea7c299b 100644
--- a/rust/Cargo.toml
+++ b/rust/Cargo.toml
@@ -1,8 +1,6 @@
 [package]
-name = "rust"
+name = "guestfs"
 version = "0.1.0"
 edition = "2018"
 
 [dependencies]
-libc = "0.2"
-
diff --git a/rust/tests/010_load.rs b/rust/tests/010_load.rs
new file mode 100644
index 000000000..eadd78896
--- /dev/null
+++ b/rust/tests/010_load.rs
@@ -0,0 +1,24 @@
+/* libguestfs Python bindings
+ Copyright (C) 2009-2019 Red Hat Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+extern crate guestfs;
+
+#[test]
+fn load() {
+    // nop
+}
diff --git a/rust/tests/020_create.rs b/rust/tests/020_create.rs
new file mode 100644
index 000000000..0b57b19d7
--- /dev/null
+++ b/rust/tests/020_create.rs
@@ -0,0 +1,24 @@
+/* libguestfs Python bindings
+ Copyright (C) 2009-2019 Red Hat Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+extern crate guestfs;
+
+#[test]
+fn create() {
+    assert!(!guestfs::Handle::create().is_err(), "create fail");
+}
diff --git a/rust/tests/030_create_flags.rs b/rust/tests/030_create_flags.rs
new file mode 100644
index 000000000..5de0589c1
--- /dev/null
+++ b/rust/tests/030_create_flags.rs
@@ -0,0 +1,30 @@
+/* libguestfs Python bindings
+ Copyright (C) 2009-2019 Red Hat Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+extern crate guestfs;
+
+use guestfs::*;
+
+#[test]
+fn create_flags() {
+    let _h = Handle::create_flags(CreateFlags::none()).expect("create_flags fail");
+    // TODO: Add parse_environment to check the flag is created correctly
+    let flags = CreateFlags::new()
+        .create_no_environment(true);
+    let _h = Handle::create_flags(flags).expect("create_flags fail");
+    // TODO: Add parse_environment to check the flag is created correctly
+}
diff --git a/rust/tests/040_create_multiple.rs b/rust/tests/040_create_multiple.rs
new file mode 100644
index 000000000..ee481c278
--- /dev/null
+++ b/rust/tests/040_create_multiple.rs
@@ -0,0 +1,38 @@
+/* libguestfs Python bindings
+ Copyright (C) 2009-2019 Red Hat Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+extern crate guestfs;
+
+fn create() -> guestfs::Handle {
+    match guestfs::Handle::create() {
+        Ok(g) => g,
+        Err(e) => panic!("fail: {}", e),
+    }
+}
+
+fn ignore(_x: guestfs::Handle, _y: guestfs::Handle, _z: guestfs::Handle) {
+    // drop
+}
+
+#[test]
+fn create_multiple() {
+    let x = create();
+    let y = create();
+    let z = create();
+    ignore(x, y, z)
+}
-- 
2.20.1 (Apple Git-117)




More information about the Libguestfs mailing list