blob: 003b0ca2103f29142f5995fabc49e8b77819dedb [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.
#include <lib/trace-engine/fields.h>
#include <lib/trace-engine/types.h>
#include <stdint.h>
#include <stdio.h>
#include <iterator>
#include <memory>
#include <utility>
#include <fbl/algorithm.h>
#include <fbl/vector.h>
#include <trace-reader/file_reader.h>
#include <zxtest/zxtest.h>
#include "reader_tests.h"
namespace trace {
namespace {
const char kTestInputFile[] = "/tmp/trace-reader-test.fxt";
TEST(TraceFileReader, Records) {
FILE* f = fopen(kTestInputFile, "wb");
ASSERT_NOT_NULL(f);
constexpr zx_koid_t kProcessKoid = 42;
constexpr zx_koid_t kThreadKoid = 43;
constexpr trace_thread_index_t kThreadIndex = 99;
uint64_t thread_record[3]{};
ThreadRecordFields::Type::Set(thread_record[0], static_cast<uint64_t>(RecordType::kThread));
ThreadRecordFields::RecordSize::Set(thread_record[0], std::size(thread_record));
ThreadRecordFields::ThreadIndex::Set(thread_record[0], kThreadIndex);
thread_record[1] = kProcessKoid;
thread_record[2] = kThreadKoid;
ASSERT_EQ(fwrite(thread_record, sizeof(*thread_record), std::size(thread_record), f),
std::size(thread_record));
ASSERT_EQ(fclose(f), 0);
std::unique_ptr<trace::FileReader> reader;
fbl::Vector<trace::Record> records;
fbl::String error;
ASSERT_TRUE(trace::FileReader::Create(kTestInputFile, test::MakeRecordConsumer(&records),
test::MakeErrorHandler(&error), &reader));
reader->ReadFile();
EXPECT_TRUE(error.empty());
ASSERT_EQ(records.size(), 1u);
const trace::Record& rec = records[0];
EXPECT_EQ(rec.type(), RecordType::kThread);
const trace::Record::Thread& thread = rec.GetThread();
EXPECT_EQ(thread.index, kThreadIndex);
EXPECT_EQ(thread.process_thread.process_koid(), kProcessKoid);
EXPECT_EQ(thread.process_thread.thread_koid(), kThreadKoid);
}
// NOTE: Most of the reader is covered by the libtrace tests.
} // namespace
} // namespace trace