summaryrefslogtreecommitdiff
path: root/nix-test
diff options
context:
space:
mode:
authorCarl Lerche <me@carllerche.com>2015-02-19 13:35:45 -0800
committerCarl Lerche <me@carllerche.com>2015-02-19 19:30:19 -0800
commitfd45c22f40cc6a0073f791acdd92779a80f33d9b (patch)
tree336530c67cadc946d198cd609fa1d115f11bb6fe /nix-test
parent62040df28f8b677f0202bc95af61286adf833776 (diff)
downloadnix-fd45c22f40cc6a0073f791acdd92779a80f33d9b.zip
Test errno defines
Diffstat (limited to 'nix-test')
-rw-r--r--nix-test/Cargo.toml8
-rw-r--r--nix-test/Makefile10
-rw-r--r--nix-test/build.rs32
-rw-r--r--nix-test/src/errno.c190
-rw-r--r--nix-test/src/lib.rs29
5 files changed, 269 insertions, 0 deletions
diff --git a/nix-test/Cargo.toml b/nix-test/Cargo.toml
new file mode 100644
index 00000000..2d581b40
--- /dev/null
+++ b/nix-test/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+
+name = "nix-test"
+description = "Testing helpers for Nix"
+version = "0.0.1"
+authors = ["Carl Lerche <me@carllerche.com>"]
+homepage = "https://github.com/carllerche/nix-rust"
+build = "build.rs"
diff --git a/nix-test/Makefile b/nix-test/Makefile
new file mode 100644
index 00000000..96bee792
--- /dev/null
+++ b/nix-test/Makefile
@@ -0,0 +1,10 @@
+OUT = libnixtest.a
+CFLAGS = -fPIC -D$(OS)
+OBJS = errno.o
+
+$(OUT): $(OBJS)
+ ar -rcs $@ $^
+
+clean:
+ rm -f $(OBJS)
+ rm -f $(OUT)
diff --git a/nix-test/build.rs b/nix-test/build.rs
new file mode 100644
index 00000000..cb9cae9b
--- /dev/null
+++ b/nix-test/build.rs
@@ -0,0 +1,32 @@
+#![feature(env, process)]
+
+use std::env;
+use std::process::Command;
+
+pub fn main() {
+ let root = env::var("CARGO_MANIFEST_DIR").unwrap();
+ let make = root.clone() + "/Makefile";
+ let src = root.clone() + "/src";
+ let out = env::var("OUT_DIR").unwrap();
+ let target = env::var("TARGET").unwrap();
+
+ let os = if target.contains("linux") {
+ "LINUX"
+ } else if target.contains("darwin") {
+ "DARWIN"
+ } else {
+ "UNKNOWN"
+ };
+
+ let res = Command::new("make")
+ .arg("-f").arg(&make)
+ .current_dir(&out)
+ .env("VPATH", &src)
+ .env("OS", os)
+ .spawn().unwrap()
+ .wait().unwrap();
+
+ assert!(res.success());
+
+ println!("cargo:rustc-flags=-L {}/", out);
+}
diff --git a/nix-test/src/errno.c b/nix-test/src/errno.c
new file mode 100644
index 00000000..9e4817dc
--- /dev/null
+++ b/nix-test/src/errno.c
@@ -0,0 +1,190 @@
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#define ERRNO_EQ(ERR) \
+ do { \
+ if (0 == strcmp(err, #ERR)) { \
+ return ERR; \
+ } \
+ } while (0)
+
+int
+assert_errno_eq(const char* err) {
+ ERRNO_EQ(EPERM);
+ ERRNO_EQ(ENOENT);
+ ERRNO_EQ(ESRCH);
+ ERRNO_EQ(EINTR);
+ ERRNO_EQ(EIO);
+ ERRNO_EQ(ENXIO);
+ ERRNO_EQ(E2BIG);
+ ERRNO_EQ(ENOEXEC);
+ ERRNO_EQ(EBADF);
+ ERRNO_EQ(ECHILD);
+ ERRNO_EQ(EAGAIN);
+ ERRNO_EQ(ENOMEM);
+ ERRNO_EQ(EACCES);
+ ERRNO_EQ(EFAULT);
+ ERRNO_EQ(ENOTBLK);
+ ERRNO_EQ(EBUSY);
+ ERRNO_EQ(EEXIST);
+ ERRNO_EQ(EXDEV);
+ ERRNO_EQ(ENODEV);
+ ERRNO_EQ(ENOTDIR);
+ ERRNO_EQ(EISDIR);
+ ERRNO_EQ(EINVAL);
+ ERRNO_EQ(ENFILE);
+ ERRNO_EQ(EMFILE);
+ ERRNO_EQ(ENOTTY);
+ ERRNO_EQ(ETXTBSY);
+ ERRNO_EQ(EFBIG);
+ ERRNO_EQ(ENOSPC);
+ ERRNO_EQ(ESPIPE);
+ ERRNO_EQ(EROFS);
+ ERRNO_EQ(EMLINK);
+ ERRNO_EQ(EPIPE);
+ ERRNO_EQ(EDOM);
+ ERRNO_EQ(ERANGE);
+ ERRNO_EQ(EDEADLK);
+ ERRNO_EQ(ENAMETOOLONG);
+ ERRNO_EQ(ENOLCK);
+ ERRNO_EQ(ENOSYS);
+ ERRNO_EQ(ENOTEMPTY);
+ ERRNO_EQ(ELOOP);
+ ERRNO_EQ(ENOMSG);
+ ERRNO_EQ(EIDRM);
+ ERRNO_EQ(EINPROGRESS);
+ ERRNO_EQ(EALREADY);
+ ERRNO_EQ(ENOTSOCK);
+ ERRNO_EQ(EDESTADDRREQ);
+ ERRNO_EQ(EMSGSIZE);
+ ERRNO_EQ(EPROTOTYPE);
+ ERRNO_EQ(ENOPROTOOPT);
+ ERRNO_EQ(EPROTONOSUPPORT);
+ ERRNO_EQ(ESOCKTNOSUPPORT);
+ ERRNO_EQ(EPFNOSUPPORT);
+ ERRNO_EQ(EAFNOSUPPORT);
+ ERRNO_EQ(EADDRINUSE);
+ ERRNO_EQ(EADDRNOTAVAIL);
+ ERRNO_EQ(ENETDOWN);
+ ERRNO_EQ(ENETUNREACH);
+ ERRNO_EQ(ENETRESET);
+ ERRNO_EQ(ECONNABORTED);
+ ERRNO_EQ(ECONNRESET);
+ ERRNO_EQ(ENOBUFS);
+ ERRNO_EQ(EISCONN);
+ ERRNO_EQ(ENOTCONN);
+ ERRNO_EQ(ESHUTDOWN);
+ ERRNO_EQ(ETOOMANYREFS);
+ ERRNO_EQ(ETIMEDOUT);
+ ERRNO_EQ(ECONNREFUSED);
+ ERRNO_EQ(EHOSTDOWN);
+ ERRNO_EQ(EHOSTUNREACH);
+
+#ifdef LINUX
+ ERRNO_EQ(ECHRNG);
+ ERRNO_EQ(EL2NSYNC);
+ ERRNO_EQ(EL3HLT);
+ ERRNO_EQ(EL3RST);
+ ERRNO_EQ(ELNRNG);
+ ERRNO_EQ(EUNATCH);
+ ERRNO_EQ(ENOCSI);
+ ERRNO_EQ(EL2HLT);
+ ERRNO_EQ(EBADE);
+ ERRNO_EQ(EBADR);
+ ERRNO_EQ(EXFULL);
+ ERRNO_EQ(ENOANO);
+ ERRNO_EQ(EBADRQC);
+ ERRNO_EQ(EBADSLT);
+ ERRNO_EQ(EBFONT);
+ ERRNO_EQ(ENOSTR);
+ ERRNO_EQ(ENODATA);
+ ERRNO_EQ(ETIME);
+ ERRNO_EQ(ENOSR);
+ ERRNO_EQ(ENONET);
+ ERRNO_EQ(ENOPKG);
+ ERRNO_EQ(EREMOTE);
+ ERRNO_EQ(ENOLINK);
+ ERRNO_EQ(EADV);
+ ERRNO_EQ(ESRMNT);
+ ERRNO_EQ(ECOMM);
+ ERRNO_EQ(EPROTO);
+ ERRNO_EQ(EMULTIHOP);
+ ERRNO_EQ(EDOTDOT);
+ ERRNO_EQ(EBADMSG);
+ ERRNO_EQ(EOVERFLOW);
+ ERRNO_EQ(ENOTUNIQ);
+ ERRNO_EQ(EBADFD);
+ ERRNO_EQ(EREMCHG);
+ ERRNO_EQ(ELIBACC);
+ ERRNO_EQ(ELIBBAD);
+ ERRNO_EQ(ELIBSCN);
+ ERRNO_EQ(ELIBMAX);
+ ERRNO_EQ(ELIBEXEC);
+ ERRNO_EQ(EILSEQ);
+ ERRNO_EQ(ERESTART);
+ ERRNO_EQ(ESTRPIPE);
+ ERRNO_EQ(EUSERS);
+ ERRNO_EQ(EOPNOTSUPP);
+ ERRNO_EQ(ESTALE);
+ ERRNO_EQ(EUCLEAN);
+ ERRNO_EQ(ENOTNAM);
+ ERRNO_EQ(ENAVAIL);
+ ERRNO_EQ(EISNAM);
+ ERRNO_EQ(EREMOTEIO);
+ ERRNO_EQ(EDQUOT);
+ ERRNO_EQ(ENOMEDIUM);
+ ERRNO_EQ(EMEDIUMTYPE);
+ ERRNO_EQ(ECANCELED);
+ ERRNO_EQ(ENOKEY);
+ ERRNO_EQ(EKEYEXPIRED);
+ ERRNO_EQ(EKEYREVOKED);
+ ERRNO_EQ(EKEYREJECTED);
+ ERRNO_EQ(EOWNERDEAD);
+ ERRNO_EQ(ENOTRECOVERABLE);
+ ERRNO_EQ(ERFKILL);
+ ERRNO_EQ(EHWPOISON);
+#endif
+
+#ifdef DARWIN
+ ERRNO_EQ(ENOTSUP);
+ ERRNO_EQ(EPROCLIM);
+ ERRNO_EQ(EUSERS);
+ ERRNO_EQ(EDQUOT);
+ ERRNO_EQ(ESTALE);
+ ERRNO_EQ(EREMOTE);
+ ERRNO_EQ(EBADRPC);
+ ERRNO_EQ(ERPCMISMATCH);
+ ERRNO_EQ(EPROGUNAVAIL);
+ ERRNO_EQ(EPROGMISMATCH);
+ ERRNO_EQ(EPROCUNAVAIL);
+ ERRNO_EQ(EFTYPE);
+ ERRNO_EQ(EAUTH);
+ ERRNO_EQ(ENEEDAUTH);
+ ERRNO_EQ(EPWROFF);
+ ERRNO_EQ(EDEVERR);
+ ERRNO_EQ(EOVERFLOW);
+ ERRNO_EQ(EBADEXEC);
+ ERRNO_EQ(EBADARCH);
+ ERRNO_EQ(ESHLIBVERS);
+ ERRNO_EQ(EBADMACHO);
+ ERRNO_EQ(ECANCELED);
+ ERRNO_EQ(EILSEQ);
+ ERRNO_EQ(ENOATTR);
+ ERRNO_EQ(EBADMSG);
+ ERRNO_EQ(EMULTIHOP);
+ ERRNO_EQ(ENODATA);
+ ERRNO_EQ(ENOLINK);
+ ERRNO_EQ(ENOSR);
+ ERRNO_EQ(ENOSTR);
+ ERRNO_EQ(EPROTO);
+ ERRNO_EQ(ETIME);
+ ERRNO_EQ(EOPNOTSUPP);
+ ERRNO_EQ(ENOPOLICY);
+ ERRNO_EQ(ENOTRECOVERABLE);
+ ERRNO_EQ(EOWNERDEAD);
+ ERRNO_EQ(EQFULL);
+#endif
+
+ return 0;
+}
diff --git a/nix-test/src/lib.rs b/nix-test/src/lib.rs
new file mode 100644
index 00000000..a8be2feb
--- /dev/null
+++ b/nix-test/src/lib.rs
@@ -0,0 +1,29 @@
+#![feature(libc, std_misc)]
+
+extern crate libc;
+
+use std::ffi::CString;
+use libc::{c_int};
+
+mod ffi {
+ use libc::{c_int, c_char};
+
+ #[link(name = "nixtest", kind = "static")]
+ extern {
+ pub fn assert_errno_eq(errno: *const c_char) -> c_int;
+ }
+}
+
+pub fn assert_errno_eq(err: &str, val: c_int) {
+ unsafe {
+ let name = CString::from_slice(err.as_bytes());
+ let actual = ffi::assert_errno_eq(name.as_ptr());
+
+ assert!(actual > 0);
+
+ if val != actual {
+ panic!("incorrect value for errno {}; got={}; expected={}",
+ err, val, actual);
+ }
+ }
+}