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
16 namespace {
17
TestDeviceClone()18 bool TestDeviceClone() {
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
TestDeviceTransfer()34 bool TestDeviceTransfer() {
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
52 BEGIN_TEST_CASE(fdio_tests)
53 RUN_TEST(TestDeviceClone)
54 RUN_TEST(TestDeviceTransfer)
55 END_TEST_CASE(fdio_tests)
56