blob: c2110fb05e3388fd8b789fa8d2f3f5b1d33c96a6 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//! Tests some higher-level functionality of Mojom interfaces.
//!
//! Test failure is defined as the function returning via panicking
//! and the result being caught in the test! macro. If a test function
//! returns without panicking, it is assumed to pass.
#[macro_use]
extern crate mojo;
#[macro_use]
mod util;
use mojo::system::{Handle, MOJO_INDEFINITE};
use mojo::system::message_pipe;
use mojo::bindings::mojom::{MojomInterface, MojomInterfaceSend, MojomInterfaceRecv};
use std::thread;
use util::mojom_validation::*;
tests! {
// Tests basic client and server interaction over a thread
fn send_and_recv() {
let (endpt0, endpt1) = message_pipe::create(mpflags!(Create::None)).unwrap();
// Client and server handles
let client = IntegrationTestInterfaceClient::new(endpt0);
let server = IntegrationTestInterfaceServer::with_version(endpt1, 0);
// Client thread
let handle = thread::spawn(move || {
// Send request
client.send_request(5, IntegrationTestInterfaceMethod0Request {
param0: BasicStruct {
a: -1,
},
}).unwrap();
// Wait for response
client.pipe().wait(signals!(Signals::Readable), MOJO_INDEFINITE);
// Decode response
let (req_id, options) = client.recv_response().unwrap();
assert_eq!(req_id, 5);
match options {
IntegrationTestInterfaceResponseOption::IntegrationTestInterfaceMethod0(msg) => {
assert_eq!(msg.param0, vec![1, 2, 3]);
},
}
});
// Wait for request
server.pipe().wait(signals!(Signals::Readable), MOJO_INDEFINITE);
// Decode request
let (req_id, options) = server.recv_response().unwrap();
assert_eq!(req_id, 5);
match options {
IntegrationTestInterfaceRequestOption::IntegrationTestInterfaceMethod0(msg) => {
assert_eq!(msg.param0.a, -1);
},
}
// Send response
server.send_request(5, IntegrationTestInterfaceMethod0Response {
param0: vec![1, 2, 3],
}).unwrap();
let _ = handle.join();
}
}