1// Copyright 2018 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include <fcntl.h> 6#include <unistd.h> 7 8#include <fbl/unique_fd.h> 9#include <fuchsia/io/c/fidl.h> 10#include <lib/fdio/limits.h> 11#include <lib/fdio/util.h> 12#include <unittest/unittest.h> 13#include <zircon/processargs.h> 14#include <zircon/syscalls.h> 15 16namespace { 17 18bool test_device_clone() { 19 BEGIN_TEST; 20 21 fbl::unique_fd fd(open("/dev/zero", O_RDONLY)); 22 23 zx_handle_t handles[FDIO_MAX_HANDLES] = {}; 24 uint32_t types[FDIO_MAX_HANDLES] = {}; 25 zx_status_t r = fdio_clone_fd(fd.get(), 0, handles, types); 26 ASSERT_EQ(r, 1); 27 ASSERT_NE(handles[0], ZX_HANDLE_INVALID); 28 ASSERT_EQ(types[0], PA_FDIO_REMOTE); 29 zx_handle_close(handles[0]); 30 31 END_TEST; 32} 33 34bool test_device_transfer() { 35 BEGIN_TEST; 36 37 fbl::unique_fd fd(open("/dev/zero", O_RDONLY)); 38 39 zx_handle_t handles[FDIO_MAX_HANDLES] = {}; 40 uint32_t types[FDIO_MAX_HANDLES] = {}; 41 zx_status_t r = fdio_transfer_fd(fd.release(), 0, handles, types); 42 ASSERT_EQ(r, 1); 43 ASSERT_NE(handles[0], ZX_HANDLE_INVALID); 44 ASSERT_EQ(types[0], PA_FDIO_REMOTE); 45 zx_handle_close(handles[0]); 46 47 END_TEST; 48} 49 50} // namespace 51 52BEGIN_TEST_CASE(fdio_tests) 53RUN_TEST(test_device_clone) 54RUN_TEST(test_device_transfer) 55END_TEST_CASE(fdio_tests) 56