blob: 2ed5a2be63f7bae2c415d22c25c2327f5547ba66 [file] [log] [blame]
// Copyright 2018 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 <lib/zxio/ops.h>
#include <lib/zxio/types.h>
#include <string.h>
#include <zxtest/zxtest.h>
TEST(OpsTest, Close) {
zxio_ops_t ops = {
.destroy = [](zxio_t*) {},
.close = [](zxio_t*) { return ZX_OK; },
};
zxio_t io = {};
ASSERT_EQ(nullptr, zxio_get_ops(&io));
zxio_init(&io, &ops);
ASSERT_EQ(&ops, zxio_get_ops(&io));
ASSERT_OK(zxio_close(&io));
zxio_destroy(&io);
}
TEST(OpsTest, DestroyWillInvalidateTheObject) {
zxio_ops_t ops = {
.destroy = [](zxio_t*) {},
.close = [](zxio_t*) { return ZX_OK; },
};
zxio_t io = {};
zxio_init(&io, &ops);
ASSERT_OK(zxio_close(&io));
zxio_destroy(&io);
ASSERT_STATUS(zxio_close(&io), ZX_ERR_BAD_HANDLE);
ASSERT_STATUS(zxio_release(&io, nullptr), ZX_ERR_BAD_HANDLE);
}
TEST(OpsTest, CallingDestroyTwicePanics) {
zxio_ops_t ops = {
.destroy = [](zxio_t*) {},
};
zxio_t io = {};
zxio_init(&io, &ops);
zxio_destroy(&io);
ASSERT_DEATH([&io] { zxio_destroy(&io); }, "Calling zxio_destroy twice should panic");
}