blob: eb769f6ff7c3d0caaaf5f17734126eacd53b4694 [file] [log] [blame]
// 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.
// Tests for the debuglog.
#include <zircon/syscalls/log.h>
#include <zxtest/zxtest.h>
// This is provided by utest/core/main.c
extern "C" __WEAK zx_handle_t get_root_resource();
namespace {
TEST(DebugLogTest, WriteRead) {
zx_handle_t log_handle = 0;
ASSERT_OK(zx_debuglog_create(get_root_resource(), ZX_LOG_FLAG_READABLE, &log_handle));
// Ensure something is written.
static const char kTestMsg[] = "Debuglog test message.\n";
ASSERT_OK(zx_debuglog_write(log_handle, 0, kTestMsg, sizeof(kTestMsg)));
// In-case the read bound isn't respected create a buffer large enough to hopefully
// prevent corruption.
char buf[10240]{0};
// But only report a smaller size for the buffer.
const size_t read_len = 3;
const auto status_or_size = zx_debuglog_read(log_handle, 0, buf, read_len);
ASSERT_EQ(read_len, status_or_size);
// Ensure that only read_len bytes were written to our buffer.
const char empty[10]{0};
ASSERT_EQ(0, memcmp(buf + read_len, empty, sizeof(empty)));
ASSERT_OK(zx_handle_close(log_handle));
}
TEST(DebugLogTest, InvalidOptions) {
zx_handle_t log_handle = 0;
// Ensure giving invalid options returns an error.
EXPECT_EQ(zx_debuglog_create(get_root_resource(), 1, &log_handle), ZX_ERR_INVALID_ARGS);
EXPECT_EQ(log_handle, 0);
EXPECT_EQ(zx_debuglog_create(get_root_resource(), 1 | ZX_LOG_FLAG_READABLE, &log_handle),
ZX_ERR_INVALID_ARGS);
EXPECT_EQ(log_handle, 0);
}
} // namespace