| // Copyright 2019 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 <gtest/gtest.h> |
| |
| #include "tools/fidlcat/interception_tests/interception_workflow_test.h" |
| |
| namespace fidlcat { |
| |
| // zx_vmo_create tests. |
| |
| std::unique_ptr<SystemCallTest> ZxVmoCreate(int64_t result, std::string_view result_name, |
| uint64_t size, uint32_t options, zx_handle_t* out) { |
| auto value = std::make_unique<SystemCallTest>("zx_vmo_create", result, result_name); |
| value->AddInput(size); |
| value->AddInput(options); |
| value->AddInput(reinterpret_cast<uint64_t>(out)); |
| return value; |
| } |
| |
| #define VMO_CREATE_DISPLAY_TEST_CONTENT(result, expected) \ |
| zx_handle_t out = kHandleOut; \ |
| PerformDisplayTest("$plt(zx_vmo_create)", \ |
| ZxVmoCreate(result, #result, 1024, ZX_VMO_RESIZABLE, &out), expected) |
| |
| #define VMO_CREATE_DISPLAY_TEST(name, errno, expected) \ |
| TEST_F(InterceptionWorkflowTestX64, name) { VMO_CREATE_DISPLAY_TEST_CONTENT(errno, expected); } \ |
| TEST_F(InterceptionWorkflowTestArm, name) { VMO_CREATE_DISPLAY_TEST_CONTENT(errno, expected); } |
| |
| VMO_CREATE_DISPLAY_TEST( |
| ZxVmoCreate, ZX_OK, |
| "\n" |
| "\x1B[32m0.000000\x1B[0m " |
| "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m " |
| "zx_vmo_create(" |
| "size: \x1B[32muint64\x1B[0m = \x1B[34m1024\x1B[0m, " |
| "options: \x1B[32mzx.vmo_creation_option\x1B[0m = \x1B[34mZX_VMO_RESIZABLE\x1B[0m)\n" |
| "\x1B[32m0.000000\x1B[0m " |
| " -> \x1B[32mZX_OK\x1B[0m (out: \x1B[32mhandle\x1B[0m = \x1B[31mbde90caf\x1B[0m)\n") |
| |
| // zx_vmo_read tests. |
| |
| std::unique_ptr<SystemCallTest> ZxVmoRead(int64_t result, std::string_view result_name, |
| zx_handle_t handle, void* buffer, uint64_t offset, |
| size_t buffer_size) { |
| auto value = std::make_unique<SystemCallTest>("zx_vmo_read", result, result_name); |
| value->AddInput(handle); |
| value->AddInput(reinterpret_cast<uint64_t>(buffer)); |
| value->AddInput(offset); |
| value->AddInput(buffer_size); |
| return value; |
| } |
| |
| #define VMO_READ_DISPLAY_TEST_CONTENT(result, expected) \ |
| std::vector<uint8_t> buffer; \ |
| for (int i = 0; i < 20; ++i) { \ |
| buffer.emplace_back(i); \ |
| } \ |
| PerformDisplayTest("$plt(zx_vmo_read)", \ |
| ZxVmoRead(result, #result, kHandle, buffer.data(), 10, buffer.size()), \ |
| expected) |
| |
| #define VMO_READ_DISPLAY_TEST(name, errno, expected) \ |
| TEST_F(InterceptionWorkflowTestX64, name) { VMO_READ_DISPLAY_TEST_CONTENT(errno, expected); } \ |
| TEST_F(InterceptionWorkflowTestArm, name) { VMO_READ_DISPLAY_TEST_CONTENT(errno, expected); } |
| |
| VMO_READ_DISPLAY_TEST( |
| ZxVmoRead, ZX_OK, |
| "\n" |
| "\x1B[32m0.000000\x1B[0m " |
| "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m " |
| "zx_vmo_read(" |
| "handle: \x1B[32mhandle\x1B[0m = \x1B[31mcefa1db0\x1B[0m, " |
| "offset: \x1B[32muint64\x1B[0m = \x1B[34m10\x1B[0m)\n" |
| "\x1B[32m0.000000\x1B[0m " |
| " -> \x1B[32mZX_OK\x1B[0m\n" |
| " buffer: \x1B[32mvector<uint8>\x1B[0m = [ " |
| "\x1B[34m00\x1B[0m, \x1B[34m01\x1B[0m, \x1B[34m02\x1B[0m, \x1B[34m03\x1B[0m, " |
| "\x1B[34m04\x1B[0m, \x1B[34m05\x1B[0m, \x1B[34m06\x1B[0m, \x1B[34m07\x1B[0m, " |
| "\x1B[34m08\x1B[0m, \x1B[34m09\x1B[0m, \x1B[34m0a\x1B[0m, \x1B[34m0b\x1B[0m, " |
| "\x1B[34m0c\x1B[0m, \x1B[34m0d\x1B[0m, \x1B[34m0e\x1B[0m, \x1B[34m0f\x1B[0m, " |
| "\x1B[34m10\x1B[0m, \x1B[34m11\x1B[0m, \x1B[34m12\x1B[0m, \x1B[34m13\x1B[0m ]\n") |
| |
| // zx_vmo_write tests. |
| |
| std::unique_ptr<SystemCallTest> ZxVmoWrite(int64_t result, std::string_view result_name, |
| zx_handle_t handle, const void* buffer, uint64_t offset, |
| size_t buffer_size) { |
| auto value = std::make_unique<SystemCallTest>("zx_vmo_write", result, result_name); |
| value->AddInput(handle); |
| value->AddInput(reinterpret_cast<uint64_t>(buffer)); |
| value->AddInput(offset); |
| value->AddInput(buffer_size); |
| return value; |
| } |
| |
| #define VMO_WRITE_DISPLAY_TEST_CONTENT(result, expected) \ |
| std::vector<uint8_t> buffer; \ |
| for (int i = 0; i < 20; ++i) { \ |
| buffer.emplace_back(i); \ |
| } \ |
| PerformDisplayTest("$plt(zx_vmo_write)", \ |
| ZxVmoWrite(result, #result, kHandle, buffer.data(), 10, buffer.size()), \ |
| expected) |
| |
| #define VMO_WRITE_DISPLAY_TEST(name, errno, expected) \ |
| TEST_F(InterceptionWorkflowTestX64, name) { VMO_WRITE_DISPLAY_TEST_CONTENT(errno, expected); } \ |
| TEST_F(InterceptionWorkflowTestArm, name) { VMO_WRITE_DISPLAY_TEST_CONTENT(errno, expected); } |
| |
| VMO_WRITE_DISPLAY_TEST( |
| ZxVmoWrite, ZX_OK, |
| "\n" |
| "\x1B[32m0.000000\x1B[0m " |
| "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m " |
| "zx_vmo_write(" |
| "handle: \x1B[32mhandle\x1B[0m = \x1B[31mcefa1db0\x1B[0m, " |
| "offset: \x1B[32muint64\x1B[0m = \x1B[34m10\x1B[0m)\n" |
| " buffer: \x1B[32mvector<uint8>\x1B[0m = [ " |
| "\x1B[34m00\x1B[0m, \x1B[34m01\x1B[0m, \x1B[34m02\x1B[0m, \x1B[34m03\x1B[0m, " |
| "\x1B[34m04\x1B[0m, \x1B[34m05\x1B[0m, \x1B[34m06\x1B[0m, \x1B[34m07\x1B[0m, " |
| "\x1B[34m08\x1B[0m, \x1B[34m09\x1B[0m, \x1B[34m0a\x1B[0m, \x1B[34m0b\x1B[0m, " |
| "\x1B[34m0c\x1B[0m, \x1B[34m0d\x1B[0m, \x1B[34m0e\x1B[0m, \x1B[34m0f\x1B[0m, " |
| "\x1B[34m10\x1B[0m, \x1B[34m11\x1B[0m, \x1B[34m12\x1B[0m, \x1B[34m13\x1B[0m ]\n" |
| "\x1B[32m0.000000\x1B[0m " |
| " -> \x1B[32mZX_OK\x1B[0m\n") |
| |
| // zx_vmo_get_size tests. |
| |
| std::unique_ptr<SystemCallTest> ZxVmoGetSize(int64_t result, std::string_view result_name, |
| zx_handle_t handle, uint64_t* size) { |
| auto value = std::make_unique<SystemCallTest>("zx_vmo_get_size", result, result_name); |
| value->AddInput(handle); |
| value->AddInput(reinterpret_cast<uint64_t>(size)); |
| return value; |
| } |
| |
| #define VMO_GET_SIZE_DISPLAY_TEST_CONTENT(result, expected) \ |
| uint64_t size = 1024; \ |
| PerformDisplayTest("$plt(zx_vmo_get_size)", ZxVmoGetSize(result, #result, kHandle, &size), \ |
| expected) |
| |
| #define VMO_GET_SIZE_DISPLAY_TEST(name, errno, expected) \ |
| TEST_F(InterceptionWorkflowTestX64, name) { \ |
| VMO_GET_SIZE_DISPLAY_TEST_CONTENT(errno, expected); \ |
| } \ |
| TEST_F(InterceptionWorkflowTestArm, name) { VMO_GET_SIZE_DISPLAY_TEST_CONTENT(errno, expected); } |
| |
| VMO_GET_SIZE_DISPLAY_TEST( |
| ZxVmoGetSize, ZX_OK, |
| "\n" |
| "\x1B[32m0.000000\x1B[0m " |
| "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m " |
| "zx_vmo_get_size(handle: \x1B[32mhandle\x1B[0m = \x1B[31mcefa1db0\x1B[0m)\n" |
| "\x1B[32m0.000000\x1B[0m " |
| " -> \x1B[32mZX_OK\x1B[0m (size: \x1B[32muint64\x1B[0m = \x1B[34m1024\x1B[0m)\n") |
| |
| // zx_vmo_set_size tests. |
| |
| std::unique_ptr<SystemCallTest> ZxVmoSetSize(int64_t result, std::string_view result_name, |
| zx_handle_t handle, uint64_t size) { |
| auto value = std::make_unique<SystemCallTest>("zx_vmo_set_size", result, result_name); |
| value->AddInput(handle); |
| value->AddInput(size); |
| return value; |
| } |
| |
| #define VMO_SET_SIZE_DISPLAY_TEST_CONTENT(result, expected) \ |
| PerformDisplayTest("$plt(zx_vmo_set_size)", ZxVmoSetSize(result, #result, kHandle, 1024), \ |
| expected) |
| |
| #define VMO_SET_SIZE_DISPLAY_TEST(name, errno, expected) \ |
| TEST_F(InterceptionWorkflowTestX64, name) { \ |
| VMO_SET_SIZE_DISPLAY_TEST_CONTENT(errno, expected); \ |
| } \ |
| TEST_F(InterceptionWorkflowTestArm, name) { VMO_SET_SIZE_DISPLAY_TEST_CONTENT(errno, expected); } |
| |
| VMO_SET_SIZE_DISPLAY_TEST(ZxVmoSetSize, ZX_OK, |
| "\n" |
| "\x1B[32m0.000000\x1B[0m " |
| "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m " |
| "zx_vmo_set_size(" |
| "handle: \x1B[32mhandle\x1B[0m = \x1B[31mcefa1db0\x1B[0m, " |
| "size: \x1B[32muint64\x1B[0m = \x1B[34m1024\x1B[0m)\n" |
| "\x1B[32m0.000000\x1B[0m " |
| " -> \x1B[32mZX_OK\x1B[0m\n") |
| |
| // zx_vmo_op_range tests. |
| |
| std::unique_ptr<SystemCallTest> ZxVmoOpRange(int64_t result, std::string_view result_name, |
| zx_handle_t handle, uint32_t op, uint64_t offset, |
| uint64_t size, void* buffer, size_t buffer_size) { |
| auto value = std::make_unique<SystemCallTest>("zx_vmo_op_range", result, result_name); |
| value->AddInput(handle); |
| value->AddInput(op); |
| value->AddInput(offset); |
| value->AddInput(size); |
| value->AddInput(reinterpret_cast<uint64_t>(buffer)); |
| value->AddInput(buffer_size); |
| return value; |
| } |
| |
| #define VMO_OP_RANGE_DISPLAY_TEST_CONTENT(result, expected) \ |
| PerformDisplayTest( \ |
| "$plt(zx_vmo_op_range)", \ |
| ZxVmoOpRange(result, #result, kHandle, ZX_VMO_OP_CACHE_SYNC, 10, 20, nullptr, 0), expected) |
| |
| #define VMO_OP_RANGE_DISPLAY_TEST(name, errno, expected) \ |
| TEST_F(InterceptionWorkflowTestX64, name) { \ |
| VMO_OP_RANGE_DISPLAY_TEST_CONTENT(errno, expected); \ |
| } \ |
| TEST_F(InterceptionWorkflowTestArm, name) { VMO_OP_RANGE_DISPLAY_TEST_CONTENT(errno, expected); } |
| |
| VMO_OP_RANGE_DISPLAY_TEST(ZxVmoOpRange, ZX_OK, |
| "\n" |
| "\x1B[32m0.000000\x1B[0m " |
| "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m " |
| "zx_vmo_op_range(" |
| "handle: \x1B[32mhandle\x1B[0m = \x1B[31mcefa1db0\x1B[0m, " |
| "op: \x1B[32mzx.vmo_op\x1B[0m = \x1B[34mZX_VMO_OP_CACHE_SYNC\x1B[0m, " |
| "offset: \x1B[32muint64\x1B[0m = \x1B[34m10\x1B[0m, " |
| "size: \x1B[32muint64\x1B[0m = \x1B[34m20\x1B[0m)\n" |
| "\x1B[32m0.000000\x1B[0m " |
| " -> \x1B[32mZX_OK\x1B[0m\n") |
| |
| // zx_vmo_create_child tests. |
| |
| std::unique_ptr<SystemCallTest> ZxVmoCreateChild(int64_t result, std::string_view result_name, |
| zx_handle_t handle, uint32_t options, |
| uint64_t offset, uint64_t size, zx_handle_t* out) { |
| auto value = std::make_unique<SystemCallTest>("zx_vmo_create_child", result, result_name); |
| value->AddInput(handle); |
| value->AddInput(options); |
| value->AddInput(offset); |
| value->AddInput(size); |
| value->AddInput(reinterpret_cast<uint64_t>(out)); |
| return value; |
| } |
| |
| #define VMO_CREATE_CHILD_DISPLAY_TEST_CONTENT(result, expected) \ |
| zx_handle_t out = kHandleOut; \ |
| PerformDisplayTest( \ |
| "$plt(zx_vmo_create_child)", \ |
| ZxVmoCreateChild(result, #result, kHandle, ZX_VMO_CHILD_SNAPSHOT, 10, 20, &out), expected) |
| |
| #define VMO_CREATE_CHILD_DISPLAY_TEST(name, errno, expected) \ |
| TEST_F(InterceptionWorkflowTestX64, name) { \ |
| VMO_CREATE_CHILD_DISPLAY_TEST_CONTENT(errno, expected); \ |
| } \ |
| TEST_F(InterceptionWorkflowTestArm, name) { \ |
| VMO_CREATE_CHILD_DISPLAY_TEST_CONTENT(errno, expected); \ |
| } |
| |
| VMO_CREATE_CHILD_DISPLAY_TEST( |
| ZxVmoCreateChild, ZX_OK, |
| "\n" |
| "\x1B[32m0.000000\x1B[0m " |
| "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m " |
| "zx_vmo_create_child(" |
| "handle: \x1B[32mhandle\x1B[0m = \x1B[31mcefa1db0\x1B[0m, " |
| "options: \x1B[32mzx.vmo_option\x1B[0m = \x1B[34mZX_VMO_CHILD_SNAPSHOT\x1B[0m, " |
| "offset: \x1B[32muint64\x1B[0m = \x1B[34m10\x1B[0m, " |
| "size: \x1B[32muint64\x1B[0m = \x1B[34m20\x1B[0m)\n" |
| "\x1B[32m0.000000\x1B[0m " |
| " -> \x1B[32mZX_OK\x1B[0m (out: \x1B[32mhandle\x1B[0m = \x1B[31mbde90caf\x1B[0m)\n") |
| |
| // zx_vmo_set_cache_policy tests. |
| |
| std::unique_ptr<SystemCallTest> ZxVmoSetCachePolicy(int64_t result, std::string_view result_name, |
| zx_handle_t handle, uint32_t cache_policy) { |
| auto value = std::make_unique<SystemCallTest>("zx_vmo_set_cache_policy", result, result_name); |
| value->AddInput(handle); |
| value->AddInput(cache_policy); |
| return value; |
| } |
| |
| #define VMO_SET_CACHE_POLICY_DISPLAY_TEST_CONTENT(result, expected) \ |
| PerformDisplayTest("$plt(zx_vmo_set_cache_policy)", \ |
| ZxVmoSetCachePolicy(result, #result, kHandle, ZX_CACHE_POLICY_CACHED), \ |
| expected) |
| |
| #define VMO_SET_CACHE_POLICY_DISPLAY_TEST(name, errno, expected) \ |
| TEST_F(InterceptionWorkflowTestX64, name) { \ |
| VMO_SET_CACHE_POLICY_DISPLAY_TEST_CONTENT(errno, expected); \ |
| } \ |
| TEST_F(InterceptionWorkflowTestArm, name) { \ |
| VMO_SET_CACHE_POLICY_DISPLAY_TEST_CONTENT(errno, expected); \ |
| } |
| |
| VMO_SET_CACHE_POLICY_DISPLAY_TEST( |
| ZxVmoSetCachePolicy, ZX_OK, |
| "\n" |
| "\x1B[32m0.000000\x1B[0m " |
| "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m " |
| "zx_vmo_set_cache_policy(" |
| "handle: \x1B[32mhandle\x1B[0m = \x1B[31mcefa1db0\x1B[0m, " |
| "cache_policy: \x1B[32mzx.cache_policy\x1B[0m = \x1B[34mZX_CACHE_POLICY_CACHED\x1B[0m)\n" |
| "\x1B[32m0.000000\x1B[0m " |
| " -> \x1B[32mZX_OK\x1B[0m\n") |
| |
| // zx_vmo_replace_as_executable tests. |
| |
| std::unique_ptr<SystemCallTest> ZxVmoReplaceAsExecutable(int64_t result, |
| std::string_view result_name, |
| zx_handle_t handle, zx_handle_t vmex, |
| zx_handle_t* out) { |
| auto value = |
| std::make_unique<SystemCallTest>("zx_vmo_replace_as_executable", result, result_name); |
| value->AddInput(handle); |
| value->AddInput(vmex); |
| value->AddInput(reinterpret_cast<uint64_t>(out)); |
| return value; |
| } |
| |
| #define VMO_REPLACE_AS_EXECUTABLE_DISPLAY_TEST_CONTENT(result, expected) \ |
| zx_handle_t out = kHandleOut; \ |
| PerformDisplayTest("$plt(zx_vmo_replace_as_executable)", \ |
| ZxVmoReplaceAsExecutable(result, #result, kHandle, kHandle2, &out), \ |
| expected) |
| |
| #define VMO_REPLACE_AS_EXECUTABLE_DISPLAY_TEST(name, errno, expected) \ |
| TEST_F(InterceptionWorkflowTestX64, name) { \ |
| VMO_REPLACE_AS_EXECUTABLE_DISPLAY_TEST_CONTENT(errno, expected); \ |
| } \ |
| TEST_F(InterceptionWorkflowTestArm, name) { \ |
| VMO_REPLACE_AS_EXECUTABLE_DISPLAY_TEST_CONTENT(errno, expected); \ |
| } |
| |
| VMO_REPLACE_AS_EXECUTABLE_DISPLAY_TEST( |
| ZxVmoReplaceAsExecutable, ZX_OK, |
| "\n" |
| "\x1B[32m0.000000\x1B[0m " |
| "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m " |
| "zx_vmo_replace_as_executable(" |
| "handle: \x1B[32mhandle\x1B[0m = \x1B[31mcefa1db0\x1B[0m, " |
| "vmex: \x1B[32mhandle\x1B[0m = \x1B[31mcefa1222\x1B[0m)\n" |
| "\x1B[32m0.000000\x1B[0m " |
| " -> \x1B[32mZX_OK\x1B[0m (out: \x1B[32mhandle\x1B[0m = \x1B[31mbde90caf\x1B[0m)\n") |
| |
| // zx_vmo_create_contiguous tests. |
| |
| std::unique_ptr<SystemCallTest> ZxVmoCreateContiguous(int64_t result, std::string_view result_name, |
| zx_handle_t bti, size_t size, |
| uint32_t alignment_log2, zx_handle_t* out) { |
| auto value = std::make_unique<SystemCallTest>("zx_vmo_create_contiguous", result, result_name); |
| value->AddInput(bti); |
| value->AddInput(size); |
| value->AddInput(alignment_log2); |
| value->AddInput(reinterpret_cast<uint64_t>(out)); |
| return value; |
| } |
| |
| #define VMO_CREATE_CONTIGUOUS_DISPLAY_TEST_CONTENT(result, expected) \ |
| zx_handle_t out = kHandleOut; \ |
| PerformDisplayTest("$plt(zx_vmo_create_contiguous)", \ |
| ZxVmoCreateContiguous(result, #result, kHandle, 20, 2, &out), expected) |
| |
| #define VMO_CREATE_CONTIGUOUS_DISPLAY_TEST(name, errno, expected) \ |
| TEST_F(InterceptionWorkflowTestX64, name) { \ |
| VMO_CREATE_CONTIGUOUS_DISPLAY_TEST_CONTENT(errno, expected); \ |
| } \ |
| TEST_F(InterceptionWorkflowTestArm, name) { \ |
| VMO_CREATE_CONTIGUOUS_DISPLAY_TEST_CONTENT(errno, expected); \ |
| } |
| |
| VMO_CREATE_CONTIGUOUS_DISPLAY_TEST( |
| ZxVmoCreateContiguous, ZX_OK, |
| "\n" |
| "\x1B[32m0.000000\x1B[0m " |
| "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m " |
| "zx_vmo_create_contiguous(" |
| "bti: \x1B[32mhandle\x1B[0m = \x1B[31mcefa1db0\x1B[0m, " |
| "size: \x1B[32msize\x1B[0m = \x1B[34m20\x1B[0m, " |
| "alignment_log2: \x1B[32muint32\x1B[0m = \x1B[34m2\x1B[0m)\n" |
| "\x1B[32m0.000000\x1B[0m " |
| " -> \x1B[32mZX_OK\x1B[0m (out: \x1B[32mhandle\x1B[0m = \x1B[31mbde90caf\x1B[0m)\n") |
| |
| // zx_vmo_create_physical tests. |
| |
| std::unique_ptr<SystemCallTest> ZxVmoCreatePhysical(int64_t result, std::string_view result_name, |
| zx_handle_t resource, zx_paddr_t paddr, |
| size_t size, zx_handle_t* out) { |
| auto value = std::make_unique<SystemCallTest>("zx_vmo_create_physical", result, result_name); |
| value->AddInput(resource); |
| value->AddInput(paddr); |
| value->AddInput(size); |
| value->AddInput(reinterpret_cast<uint64_t>(out)); |
| return value; |
| } |
| |
| #define VMO_CREATE_PHYSICAL_DISPLAY_TEST_CONTENT(result, expected) \ |
| zx_handle_t out = kHandleOut; \ |
| PerformDisplayTest("$plt(zx_vmo_create_physical)", \ |
| ZxVmoCreatePhysical(result, #result, kHandle, 0x12345, 20, &out), expected) |
| |
| #define VMO_CREATE_PHYSICAL_DISPLAY_TEST(name, errno, expected) \ |
| TEST_F(InterceptionWorkflowTestX64, name) { \ |
| VMO_CREATE_PHYSICAL_DISPLAY_TEST_CONTENT(errno, expected); \ |
| } \ |
| TEST_F(InterceptionWorkflowTestArm, name) { \ |
| VMO_CREATE_PHYSICAL_DISPLAY_TEST_CONTENT(errno, expected); \ |
| } |
| |
| VMO_CREATE_PHYSICAL_DISPLAY_TEST( |
| ZxVmoCreatePhysical, ZX_OK, |
| "\n" |
| "\x1B[32m0.000000\x1B[0m " |
| "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m " |
| "zx_vmo_create_physical(" |
| "resource: \x1B[32mhandle\x1B[0m = \x1B[31mcefa1db0\x1B[0m, " |
| "paddr: \x1B[32mzx.paddr\x1B[0m = \x1B[34m0000000000012345\x1B[0m, " |
| "size: \x1B[32msize\x1B[0m = \x1B[34m20\x1B[0m)\n" |
| "\x1B[32m0.000000\x1B[0m " |
| " -> \x1B[32mZX_OK\x1B[0m (out: \x1B[32mhandle\x1B[0m = \x1B[31mbde90caf\x1B[0m)\n") |
| |
| } // namespace fidlcat |