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 <lib/zxio/null.h>
6 #include <lib/zxio/zxio.h>
7 
8 #include <unittest/unittest.h>
9 
null_basic_test(void)10 bool null_basic_test(void) {
11     BEGIN_TEST;
12 
13     zxio_t io;
14     zxio_null_init(&io);
15 
16     zxio_signals_t observed = ZXIO_SIGNAL_NONE;
17     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED, zxio_wait_one(&io, ZXIO_READABLE,
18                                                   ZX_TIME_INFINITE, &observed));
19 
20     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED, zxio_clone_async(&io, 0u, ZX_HANDLE_INVALID));
21     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED, zxio_sync(&io));
22 
23     zxio_node_attr_t attr = {};
24     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED, zxio_attr_get(&io, &attr));
25     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED, zxio_attr_set(&io, 0u, &attr));
26     char buffer[1024];
27     memset(buffer, 0, sizeof(buffer));
28     size_t actual = 5u;
29     ASSERT_EQ(ZX_OK, zxio_read(&io, buffer, sizeof(buffer), &actual));
30     EXPECT_EQ(0u, actual);
31     ASSERT_EQ(ZX_ERR_WRONG_TYPE, zxio_read_at(&io, 0u, buffer, sizeof(buffer), &actual));
32     ASSERT_EQ(ZX_OK, zxio_write(&io, buffer, sizeof(buffer), &actual));
33     EXPECT_EQ(sizeof(buffer), actual);
34     ASSERT_EQ(ZX_ERR_WRONG_TYPE, zxio_write_at(&io, 0u, buffer, sizeof(buffer), &actual));
35     size_t offset = 0u;
36     ASSERT_EQ(ZX_ERR_WRONG_TYPE, zxio_seek(&io, 0u, fuchsia_io_SeekOrigin_START,
37                                               &offset));
38     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED, zxio_truncate(&io, 0u));
39     uint32_t flags = 0u;
40     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED, zxio_flags_get(&io, &flags));
41     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED, zxio_flags_set(&io, flags));
42     zx_handle_t vmo = ZX_HANDLE_INVALID;
43     size_t size = 0u;
44     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED, zxio_vmo_get_copy(&io, &vmo, &size));
45     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED, zxio_vmo_get_clone(&io, &vmo, &size));
46     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED, zxio_vmo_get_exact(&io, &vmo, &size));
47 
48     zxio_t* result = nullptr;
49     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED, zxio_open(&io, 0u, 0u, "hello", &result));
50     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED,
51               zxio_open_async(&io, 0u, 0u, "hello", ZX_HANDLE_INVALID));
52     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED, zxio_unlink(&io, "hello"));
53 
54     zxio_t io2;
55     zxio_null_init(&io2);
56     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED, zxio_rename(&io, "one", &io2, "two"));
57     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED, zxio_link(&io, "one", &io2, "two"));
58     zxio_dirent_iterator_t iter = {};
59     char buffer2[ZXIO_DIRENT_ITERATOR_DEFAULT_BUFFER_SIZE];
60     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED,
61               zxio_dirent_iterator_init(&iter, &io, buffer2, sizeof(buffer2)));
62     zxio_dirent_t* entry = nullptr;
63     ASSERT_EQ(ZX_ERR_NOT_SUPPORTED, zxio_dirent_iterator_next(&iter, &entry));
64 
65     ASSERT_EQ(ZX_OK, zxio_close(&io));
66 
67     END_TEST;
68 }
69 
70 BEGIN_TEST_CASE(null_test)
71 RUN_TEST(null_basic_test);
72 END_TEST_CASE(null_test)
73