blob: e68b83b2c22632f8979cabbe451f0bf1dfb13c53 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT
#include <lib/boot-shim/test-helper.h>
#include <lib/zbitl/image.h>
#include <stdio.h>
#include <zxtest/zxtest.h>
namespace boot_shim::testing {
BufferOwner BufferOwner::New(size_t size) {
BufferOwner result;
result.owner.reset(new std::byte[size]);
result.buffer = {result.owner.get(), size};
return result;
}
TestHelper::TestHelper()
:
#if defined(__Fuchsia__) || defined(__GLIBC__)
log_(open_memstream(&log_buffer_, &log_buffer_size_))
#else
log_(tmpfile())
#endif
{
}
TestHelper::~TestHelper() {
if (log_) {
fclose(log_);
}
free(log_buffer_);
}
BufferOwner TestHelper::GetZbiBuffer(size_t size) {
BufferOwner result = BufferOwner::New(size);
zbitl::Image zbi(result.buffer);
EXPECT_TRUE(zbi.clear().is_ok());
return result;
}
std::vector<std::string> TestHelper::LogLines() {
rewind(log_);
char* buffer = nullptr;
size_t buffer_size = 0;
std::vector<std::string> lines;
while (!feof(log_) && !ferror(log_)) {
ssize_t n = getline(&buffer, &buffer_size, log_);
if (n < 0) {
break;
}
lines.emplace_back(buffer, static_cast<size_t>(n) - 1);
}
free(buffer);
return lines;
}
void TestHelper::ExpectLogLines(std::initializer_list<std::string_view> expected) {
auto log = LogLines();
EXPECT_EQ(log.size(), expected.size());
for (size_t i = 0; i < std::min(log.size(), expected.size()); ++i) {
std::string_view line = log[i];
std::string_view expected_line = std::data(expected)[i];
if (expected_line.front() == ':') {
line = line.substr(line.find_last_of(':'));
}
EXPECT_STREQ(expected_line, line);
}
}
} // namespace boot_shim::testing