From 2e27cf525e76ec9aa884f354d7a750c226863539 Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jeremy@system76.com>
Date: Tue, 10 Mar 2020 20:57:07 -0600
Subject: [PATCH] Work on adding cargo test capability

---
 src/header/time/mod.rs     |  2 +-
 src/platform/mod.rs        |  3 ++
 src/platform/test/epoll.rs |  1 +
 src/platform/test/mod.rs   | 70 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 75 insertions(+), 1 deletion(-)
 create mode 100644 src/platform/test/epoll.rs
 create mode 100644 src/platform/test/mod.rs

diff --git a/src/header/time/mod.rs b/src/header/time/mod.rs
index 087aa090..7c17155a 100644
--- a/src/header/time/mod.rs
+++ b/src/header/time/mod.rs
@@ -5,7 +5,7 @@ use crate::{
     platform::{self, types::*, Pal, Sys},
 };
 
-use self::constants::*;
+pub use self::constants::*;
 
 pub mod constants;
 mod strftime;
diff --git a/src/platform/mod.rs b/src/platform/mod.rs
index 402ad76d..5b63f1a9 100644
--- a/src/platform/mod.rs
+++ b/src/platform/mod.rs
@@ -26,6 +26,9 @@ mod sys;
 #[path = "redox/mod.rs"]
 mod sys;
 
+#[cfg(test)]
+mod test;
+
 mod pte;
 
 pub use self::rlb::{Line, RawLineBuffer};
diff --git a/src/platform/test/epoll.rs b/src/platform/test/epoll.rs
new file mode 100644
index 00000000..58c750d1
--- /dev/null
+++ b/src/platform/test/epoll.rs
@@ -0,0 +1 @@
+use crate::platform::{PalEpoll, Sys};
diff --git a/src/platform/test/mod.rs b/src/platform/test/mod.rs
new file mode 100644
index 00000000..3ac5a171
--- /dev/null
+++ b/src/platform/test/mod.rs
@@ -0,0 +1,70 @@
+use crate::platform::{Pal, Sys};
+
+// Stub for call used in exit
+#[no_mangle]
+pub extern "C" fn pthread_terminate() {}
+
+mod epoll;
+
+#[test]
+fn access() {
+    use crate::header::{
+        errno,
+        unistd,
+    };
+
+    //TODO: create test files
+    assert_eq!(Sys::access(c_str!("not a file!"), unistd::F_OK), !0);
+    assert_eq!(Sys::access(c_str!("README.md"), unistd::R_OK), 0);
+    assert_eq!(Sys::access(c_str!("README.md"), unistd::W_OK), 0);
+    assert_eq!(Sys::access(c_str!("README.md"), unistd::X_OK), !0);
+}
+
+#[test]
+fn brk() {
+    use core::ptr;
+
+    let current = Sys::brk(ptr::null_mut());
+    assert_ne!(current, ptr::null_mut());
+
+    let request = unsafe { current.add(4096) };
+    let next = Sys::brk(request);
+    assert_eq!(next, request);
+}
+
+#[test]
+fn chdir() {
+    //TODO: create test files
+    assert_eq!(Sys::chdir(c_str!("src")), 0);
+}
+
+//TODO: chmod
+
+//TODO: chown
+
+#[test]
+fn clock_gettime() {
+    use crate::header::{
+        time
+    };
+
+    {
+        let mut timespec = time::timespec {
+            tv_sec: -1,
+            tv_nsec: -1,
+        };
+        assert_eq!(Sys::clock_gettime(time::CLOCK_REALTIME, &mut timespec), 0);
+        assert_ne!(timespec.tv_sec, -1);
+        assert_ne!(timespec.tv_nsec, -1);
+    }
+
+    {
+        let mut timespec = time::timespec {
+            tv_sec: -1,
+            tv_nsec: -1,
+        };
+        assert_eq!(Sys::clock_gettime(time::CLOCK_MONOTONIC, &mut timespec), 0);
+        assert_ne!(timespec.tv_sec, -1);
+        assert_ne!(timespec.tv_nsec, -1);
+    }
+}
-- 
GitLab