| // Copyright 2016 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <assert.h> |
| #include <stdbool.h> |
| |
| #include <magenta/syscalls.h> |
| #include <magenta/syscalls/object.h> |
| |
| #include <unittest/unittest.h> |
| |
| // Test that VMO handles support user signals |
| bool vmo_signal_test(void) { |
| BEGIN_TEST; |
| |
| mx_handle_t vmo = MX_HANDLE_INVALID; |
| ASSERT_EQ(mx_vmo_create(4096, 0, &vmo), MX_OK, ""); |
| ASSERT_NE(vmo, MX_HANDLE_INVALID, "mx_vmo_create() failed"); |
| |
| mx_signals_t out_signals = 0; |
| ASSERT_EQ(mx_object_wait_one(vmo, MX_USER_SIGNAL_0, mx_deadline_after(1), &out_signals), |
| MX_ERR_TIMED_OUT, ""); |
| ASSERT_EQ(out_signals, MX_SIGNAL_LAST_HANDLE, "out_signals not zero after wait timed out"); |
| ASSERT_EQ(mx_object_signal(vmo, 0, MX_USER_SIGNAL_0), MX_OK, ""); |
| ASSERT_EQ( |
| mx_object_wait_one(vmo, MX_USER_SIGNAL_0, MX_TIME_INFINITE, &out_signals), MX_OK, ""); |
| ASSERT_EQ( |
| out_signals, MX_USER_SIGNAL_0 | MX_SIGNAL_LAST_HANDLE, |
| "MX_USER_SIGNAL_0 not set after successful wait"); |
| |
| EXPECT_EQ(mx_handle_close(vmo), MX_OK, ""); |
| |
| END_TEST; |
| } |
| |
| BEGIN_TEST_CASE(vmo_signal_tests) |
| RUN_TEST(vmo_signal_test) |
| END_TEST_CASE(vmo_signal_tests) |
| |
| #ifndef BUILD_COMBINED_TESTS |
| int main(int argc, char** argv) { |
| return unittest_run_all_tests(argc, argv) ? 0 : -1; |
| } |
| #endif |