blob: 85f4c26c578995fc6a763009283eb17a96ba92fc [file] [log] [blame]
// Copyright 2020 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 "types_test_utils.h"
#include <lib/fidl/cpp/wire/traits.h>
#include <zircon/assert.h>
namespace llcpp_types_test_utils {
void HandleChecker::AddEvent(const zx_handle_t event) {
zx_handle_t dupe;
ASSERT_EQ(zx_handle_duplicate(event, ZX_RIGHT_SAME_RIGHTS, &dupe), ZX_OK);
events_.emplace_back(zx::event(dupe));
}
void HandleChecker::AddEvent(const zx::event& event) {
ASSERT_TRUE(event.is_valid());
zx::event new_event;
ASSERT_EQ(event.duplicate(ZX_RIGHT_SAME_RIGHTS, &new_event), ZX_OK);
events_.emplace_back(std::move(new_event));
}
void HandleChecker::CheckEvents() {
for (size_t i = 0; i < events_.size(); ++i) {
zx_info_handle_count_t info = {};
auto status = events_[i].get_info(ZX_INFO_HANDLE_COUNT, &info, sizeof(info), nullptr, nullptr);
ZX_ASSERT(status == ZX_OK);
EXPECT_EQ(info.handle_count, 1U) << "Handle not freed " << (i + 1) << '/' << events_.size();
}
}
} // namespace llcpp_types_test_utils