Explorar el Código

test: test mkdir open

liujingx hace 11 meses
padre
commit
1ac4b8f56f
Se han modificado 4 ficheros con 368 adiciones y 1 borrados
  1. 4 1
      .gitignore
  2. 263 0
      ext4_test/Cargo.lock
  3. 9 0
      ext4_test/Cargo.toml
  4. 92 0
      ext4_test/src/main.rs

+ 4 - 1
.gitignore

@@ -1 +1,4 @@
-/target
+/target
+
+/ext4_test/target
+/ext4_test/ext4.img

+ 263 - 0
ext4_test/Cargo.lock

@@ -0,0 +1,263 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "bitflags"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "colored"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8"
+dependencies = [
+ "lazy_static",
+ "windows-sys",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+dependencies = [
+ "powerfmt",
+]
+
+[[package]]
+name = "ext4_rs"
+version = "0.1.0"
+dependencies = [
+ "bitflags",
+ "byteorder",
+ "log",
+]
+
+[[package]]
+name = "ext4_test"
+version = "0.1.0"
+dependencies = [
+ "ext4_rs",
+ "log",
+ "simple_logger",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.154"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346"
+
+[[package]]
+name = "log"
+version = "0.4.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
+
+[[package]]
+name = "num-conv"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+
+[[package]]
+name = "num_threads"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.201"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.201"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "simple_logger"
+version = "4.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e7e46c8c90251d47d08b28b8a419ffb4aede0f87c2eea95e17d1d5bacbf3ef1"
+dependencies = [
+ "colored",
+ "log",
+ "time",
+ "windows-sys",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f660c3bfcefb88c538776b6685a0c472e3128b51e74d48793dc2a488196e8eb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "time"
+version = "0.3.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
+dependencies = [
+ "deranged",
+ "itoa",
+ "libc",
+ "num-conv",
+ "num_threads",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
+dependencies = [
+ "num-conv",
+ "time-core",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"

+ 9 - 0
ext4_test/Cargo.toml

@@ -0,0 +1,9 @@
+[package]
+name = "ext4_test"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+ext4_rs = { path = ".." }
+simple_logger = "4.3"
+log = "0.4"

+ 92 - 0
ext4_test/src/main.rs

@@ -0,0 +1,92 @@
+use ext4_rs::{BlockDevice, Ext4, BLOCK_SIZE};
+use log::info;
+use simple_logger::SimpleLogger;
+use std::fs::{File, OpenOptions};
+use std::io::{Read, Seek, SeekFrom, Write};
+use std::sync::Arc;
+
+#[derive(Debug)]
+pub struct BlockFile(File);
+
+impl BlockFile {
+    pub fn new(path: &str) -> Self {
+        let file = OpenOptions::new()
+            .read(true)
+            .write(true)
+            .open(path)
+            .unwrap();
+        Self(file)
+    }
+}
+
+impl BlockDevice for BlockFile {
+    fn read_offset(&self, offset: usize) -> Vec<u8> {
+        info!("Reading block at offset {}", offset);
+        let mut file = &self.0;
+        let mut buffer = vec![0u8; BLOCK_SIZE];
+        let _r = file.seek(SeekFrom::Start(offset as u64));
+        let _r = file.read_exact(&mut buffer);
+        buffer
+    }
+
+    fn write_offset(&self, offset: usize, data: &[u8]) {
+        info!("Writing block at offset {}", offset);
+        let mut file = &self.0;
+        let _r = file.seek(SeekFrom::Start(offset as u64));
+        let _r = file.write_all(data);
+    }
+}
+
+fn logger_init() {
+    SimpleLogger::new().init().unwrap();
+    log::set_max_level(log::LevelFilter::Debug);
+}
+
+fn make_ext4() {
+    let _ = std::process::Command::new("rm")
+        .args(["-rf", "ext4.img"])
+        .status();
+    let _ = std::process::Command::new("dd")
+        .args(["if=/dev/zero", "of=ext4.img", "bs=1M", "count=512"])
+        .status();
+    let _ = std::process::Command::new("mkfs.ext4")
+        .args(["ext4.img"])
+        .output();
+}
+
+fn open_ext4() -> Ext4 {
+    let file = BlockFile::new("ext4.img");
+    println!("creating ext4");
+    Ext4::load(Arc::new(file))
+}
+
+fn mkdir_test(ext4: &mut Ext4) {
+    ext4.ext4_dir_mk("1").expect("mkdir failed");
+    ext4.ext4_dir_mk("1/2").expect("mkdir failed");
+    ext4.ext4_dir_mk("1/2/3").expect("mkdir failed");
+    ext4.ext4_dir_mk("1/2/3/4").expect("mkdir failed");
+    ext4.ext4_dir_mk("2").expect("mkdir failed");
+    ext4.ext4_dir_mk("2/3").expect("mkdir failed");
+    ext4.ext4_dir_mk("2/3/4").expect("mkdir failed");
+    ext4.ext4_dir_mk("3").expect("mkdir failed");
+}
+
+fn open_test(ext4: &mut Ext4) {
+    ext4.ext4_open("1/2/3/4/5", "w+", true)
+        .expect("open failed");
+    ext4.ext4_open("1/2/3/4/5", "r", true).expect("open failed");
+    ext4.ext4_open("1/2/3/4/5", "a", true).expect("open failed");
+    ext4.ext4_open("4", "w+", true).expect("open failed");
+}
+
+fn main() {
+    logger_init();
+    make_ext4();
+    println!("ext4.img created");
+    let mut ext4 = open_ext4();
+    println!("ext4 opened");
+    mkdir_test(&mut ext4);
+    println!("mkdir test done");
+    open_test(&mut ext4);
+    println!("open test done");
+}