blob: 67a8a4c45155c03d1f6ecc04f602a618aef4a6de [file] [log] [blame]
// Copyright 2022 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/elfldltl/testing/test-pipe-reader.h>
#include <lib/fit/defer.h>
#include <lib/zxdump/fd-writer.h>
#include <stdio.h>
#include <unistd.h>
#include <string_view>
#include <fbl/unique_fd.h>
#include "writer-tests.h"
namespace {
TEST(ZxdumpTests, FdWriterToFile) {
FILE* tmpf = tmpfile();
ASSERT_TRUE(tmpf);
auto close_tmpf = fit::defer([tmpf]() { fclose(tmpf); });
fbl::unique_fd tmpfd(dup(fileno(tmpf)));
ASSERT_TRUE(tmpfd);
zxdump::FdWriter writer(std::move(tmpfd));
// Pump some stock test data through the writer API.
zxdump::testing::WriterTest::WriteTestData(writer);
// Now verify the data written to the file.
rewind(tmpf);
EXPECT_FALSE(ferror(tmpf));
char buf[zxdump::testing::WriterTest::kTestData.size()];
size_t n = fread(buf, 1, sizeof(buf), tmpf);
EXPECT_FALSE(ferror(tmpf));
ASSERT_LE(n, sizeof(buf));
EXPECT_EQ(n, zxdump::testing::WriterTest::kTestData.size());
std::string_view tmpf_contents{buf, n};
EXPECT_EQ(tmpf_contents, zxdump::testing::WriterTest::kTestData);
}
TEST(ZxdumpTests, FdWriterToPipe) {
elfldltl::testing::TestPipeReader reader;
fbl::unique_fd write_pipe;
ASSERT_NO_FATAL_FAILURE(reader.Init(write_pipe));
{
zxdump::FdWriter writer(std::move(write_pipe));
// Pump some stock test data through the writer API.
zxdump::testing::WriterTest::WriteTestData(writer);
// The write side of the pipe is closed when the writer goes out of scope,
// so the reader can finish.
}
std::string contents = std::move(reader).Finish();
EXPECT_EQ(contents, zxdump::testing::WriterTest::kTestData);
}
} // namespace