Add some tests for foreign library interface
parent
7dd54d42f7
commit
16e5942a44
@ -1,67 +1,19 @@
|
||||
use libc::{c_int, c_void};
|
||||
|
||||
#[link(name = "poll_override_code")]
|
||||
#[link(name = "elevatormagic")]
|
||||
extern {
|
||||
pub fn issue_override_code(code: c_int);
|
||||
pub fn poll_override_code() -> c_int;
|
||||
}
|
||||
|
||||
#[link(name = "poll_override_input_floor")]
|
||||
extern {
|
||||
pub fn poll_override_input_floor() -> c_int;
|
||||
}
|
||||
|
||||
#[link(name = "poll_override_errors")]
|
||||
extern {
|
||||
pub fn poll_override_errors() -> c_int;
|
||||
}
|
||||
|
||||
#[link(name = "poll_override_session")]
|
||||
extern {
|
||||
pub fn poll_override_error() -> c_int;
|
||||
pub fn poll_override_session() -> *const c_void;
|
||||
}
|
||||
|
||||
#[link(name = "free_override_session")]
|
||||
extern {
|
||||
pub fn free_override_session(session: *const c_void);
|
||||
}
|
||||
|
||||
#[link(name = "poll_physical_override_privileged")]
|
||||
extern {
|
||||
pub fn poll_physical_override_privileged() -> *const c_void;
|
||||
}
|
||||
|
||||
#[link(name = "poll_physical_override_admin")]
|
||||
extern {
|
||||
pub fn poll_physical_override_admin() -> *const c_void;
|
||||
}
|
||||
|
||||
|
||||
#[link(name = "override_manual_mode")]
|
||||
extern {
|
||||
pub fn poll_physical_override_privileged_session() -> *const c_void;
|
||||
pub fn poll_physical_override_admin_session() -> *const c_void;
|
||||
pub fn override_manual_mode();
|
||||
}
|
||||
|
||||
#[link(name = "override_normal_mode")]
|
||||
extern {
|
||||
pub fn override_normal_mode();
|
||||
}
|
||||
|
||||
#[link(name = "override_reset_state")]
|
||||
extern {
|
||||
pub fn override_reset_state();
|
||||
}
|
||||
|
||||
#[link(name = "elevator_display_flash")]
|
||||
extern {
|
||||
pub fn elevator_display_flash(pattern: c_int);
|
||||
}
|
||||
|
||||
#[link(name = "elevator_display_toggle_light")]
|
||||
extern {
|
||||
pub fn elevator_display_toggle_light(light_id: c_int);
|
||||
}
|
||||
|
||||
#[link(name = "elevator_display_set_light_color")]
|
||||
extern {
|
||||
pub fn elevator_display_set_light_color(light_id: c_int, color: c_int);
|
||||
}
|
||||
|
@ -0,0 +1,95 @@
|
||||
use magic;
|
||||
use libc::{c_void};
|
||||
|
||||
#[test]
|
||||
fn issue_override_code() {
|
||||
unsafe {
|
||||
magic::override_reset_state();
|
||||
magic::issue_override_code(1);
|
||||
assert!(magic::poll_override_code() == 1);
|
||||
assert!(magic::poll_override_error() == 0);
|
||||
}
|
||||
}
|
||||
#[test]
|
||||
fn issue_privileged_code() {
|
||||
unsafe {
|
||||
magic::override_reset_state();
|
||||
magic::issue_override_code(2);
|
||||
assert!(magic::poll_override_code() == 2);
|
||||
assert!(magic::poll_override_error() == 0);
|
||||
}
|
||||
}
|
||||
#[test]
|
||||
fn issue_admin_code() {
|
||||
unsafe {
|
||||
magic::override_reset_state();
|
||||
magic::issue_override_code(3);
|
||||
assert!(magic::poll_override_code() == 3);
|
||||
assert!(magic::poll_override_error() == 0);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn authorize_override_success() {
|
||||
unsafe {
|
||||
magic::override_reset_state();
|
||||
magic::issue_override_code(1);
|
||||
let session = magic::poll_override_session();
|
||||
assert!(session != (0 as *const c_void));
|
||||
magic::free_override_session(session);
|
||||
assert!(magic::poll_override_error() == 0);
|
||||
}
|
||||
}
|
||||
#[test]
|
||||
fn authorize_privileged_success() {
|
||||
unsafe {
|
||||
magic::override_reset_state();
|
||||
magic::issue_override_code(2);
|
||||
let session = magic::poll_physical_override_privileged_session();
|
||||
assert!(session != (0 as *const c_void));
|
||||
magic::free_override_session(session);
|
||||
assert!(magic::poll_override_error() == 0);
|
||||
}
|
||||
}
|
||||
#[test]
|
||||
fn authorize_admin_success() {
|
||||
unsafe {
|
||||
magic::override_reset_state();
|
||||
magic::issue_override_code(3);
|
||||
let session = magic::poll_physical_override_admin_session();
|
||||
assert!(session != (0 as *const c_void));
|
||||
magic::free_override_session(session);
|
||||
assert!(magic::poll_override_error() == 0);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn double_override_failure() {
|
||||
unsafe {
|
||||
magic::override_reset_state();
|
||||
magic::issue_override_code(1);
|
||||
magic::issue_override_code(1);
|
||||
assert!(magic::poll_override_session() == (0 as *const c_void));
|
||||
assert!(magic::poll_override_error() == 1);
|
||||
}
|
||||
}
|
||||
#[test]
|
||||
fn double_privileged_failure() {
|
||||
unsafe {
|
||||
magic::override_reset_state();
|
||||
magic::issue_override_code(1);
|
||||
magic::issue_override_code(1);
|
||||
assert!(magic::poll_physical_override_privileged_session() == (0 as *const c_void));
|
||||
assert!(magic::poll_override_error() == 1);
|
||||
}
|
||||
}
|
||||
#[test]
|
||||
fn double_admin_failure() {
|
||||
unsafe {
|
||||
magic::override_reset_state();
|
||||
magic::issue_override_code(1);
|
||||
magic::issue_override_code(1);
|
||||
assert!(magic::poll_physical_override_admin_session() == (0 as *const c_void));
|
||||
assert!(magic::poll_override_error() == 1);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue