[banjo][test] Use zx handle wrappers.

Tested: runtests
Change-Id: I65e22fd69ae04f08c2ebdbfabbf9030cde1196d0
diff --git a/system/banjo/ddk-protocol-test/test.banjo b/system/banjo/ddk-protocol-test/test.banjo
index 38fe1c8..2568e3d 100644
--- a/system/banjo/ddk-protocol-test/test.banjo
+++ b/system/banjo/ddk-protocol-test/test.banjo
@@ -17,7 +17,7 @@
     Callback() -> (zx.status s, TestReport report);
 };
 
-[Layout = "ddk-protocol", DefaultProtocol]
+[Layout = "ddk-protocol", DefaultProtocol, HandleWrappers]
 interface Test {
     /// Sets test output socket.
     SetOutputSocket(handle<socket> @handle) -> ();
diff --git a/system/dev/misc/test/test.cpp b/system/dev/misc/test/test.cpp
index 47f6795..283c982 100644
--- a/system/dev/misc/test/test.cpp
+++ b/system/dev/misc/test/test.cpp
@@ -34,8 +34,8 @@
     void DdkRelease();
 
     // Methods required by the TestProtocol mixin
-    void TestSetOutputSocket(zx_handle_t handle);
-    void TestGetOutputSocket(zx_handle_t* output_handle);
+    void TestSetOutputSocket(zx::socket socket);
+    void TestGetOutputSocket(zx::socket* out_socket);
     void TestSetTestFunc(const test_func_t* func);
     zx_status_t TestRunTests(test_report_t* out_report);
     void TestDestroy();
@@ -69,12 +69,12 @@
                              char* path_out, size_t path_size, size_t* path_actual);
 };
 
-void TestDevice::TestSetOutputSocket(zx_handle_t handle) {
-    output_.reset(handle);
+void TestDevice::TestSetOutputSocket(zx::socket socket) {
+    output_ = std::move(socket);
 }
 
-void TestDevice::TestGetOutputSocket(zx_handle_t* output_handle) {
-    *output_handle = output_.get();
+void TestDevice::TestGetOutputSocket(zx::socket* out_socket) {
+    output_.duplicate(ZX_RIGHT_SAME_RIGHTS, out_socket);
 }
 
 void TestDevice::TestSetTestFunc(const test_func_t* func) {
@@ -95,7 +95,7 @@
 static zx_status_t fidl_SetOutputSocket(void* ctx, zx_handle_t raw_socket) {
     zx::socket socket(raw_socket);
     auto dev = static_cast<TestDevice*>(ctx);
-    dev->TestSetOutputSocket(socket.release());
+    dev->TestSetOutputSocket(std::move(socket));
     return ZX_OK;
 }
 
@@ -135,7 +135,7 @@
         if (inlen != sizeof(zx_handle_t)) {
             return ZX_ERR_INVALID_ARGS;
         }
-        TestSetOutputSocket(*(zx_handle_t*)in);
+        TestSetOutputSocket(zx::socket(*static_cast<const zx_handle_t*>(in)));
         return ZX_OK;
 
     case IOCTL_TEST_RUN_TESTS: {
diff --git a/system/dev/test/ddk-test/ddk-test.c b/system/dev/test/ddk-test/ddk-test.c
index 0bc76a1..b1e0927 100644
--- a/system/dev/test/ddk-test/ddk-test.c
+++ b/system/dev/test/ddk-test/ddk-test.c
@@ -52,6 +52,8 @@
     memset(report, 0, sizeof(*report));
     update_test_report(unittest_run_one_test(test_case_ddk_metadata, TEST_ALL), report);
     update_test_report(unittest_run_one_test(test_case_ddk_usb_request, TEST_ALL), report);
+    unittest_restore_output_function();
+    zx_handle_close(output);
     return report->n_failed == 0 ? ZX_OK : ZX_ERR_INTERNAL;
 }
 
diff --git a/system/ulib/ddktl/test/ddktl-test.cpp b/system/ulib/ddktl/test/ddktl-test.cpp
index fd334b2..a91fc55 100644
--- a/system/ulib/ddktl/test/ddktl-test.cpp
+++ b/system/ulib/ddktl/test/ddktl-test.cpp
@@ -57,6 +57,8 @@
     memset(report, 0, sizeof(*report));
     update_test_report(unittest_run_one_test(test_case_ddktl_device, TEST_ALL), report);
     update_test_report(unittest_run_one_test(test_case_ddktl_ethernet_device, TEST_ALL), report);
+    unittest_restore_output_function();
+    zx_handle_close(output);
     return report->n_failed == 0 ? ZX_OK : ZX_ERR_INTERNAL;
 }