blob: 2ae3864b1160f1f2b655932f957e88ecdeeb0f57 [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 "test_support.h"
#include <lib/zx/vmar.h>
#include <ddk/driver.h>
#include <gtest/gtest.h>
static zx_device_t* g_parent_device;
TestSupport::FirmwareFile::~FirmwareFile() {
if (ptr)
zx::vmar::root_self()->unmap((uintptr_t)ptr, size);
}
zx_device_t* TestSupport::parent_device() { return g_parent_device; }
void TestSupport::set_parent_device(zx_device_t* handle) { g_parent_device = handle; }
bool TestSupport::RunAllTests() {
const int kArgc = 1;
const char* argv[kArgc] = {"test_support"};
testing::InitGoogleTest(const_cast<int*>(&kArgc), const_cast<char**>(argv));
return RUN_ALL_TESTS() == 0;
}
std::unique_ptr<TestSupport::FirmwareFile> TestSupport::LoadFirmwareFile(const char* name) {
auto firmware_file = std::make_unique<FirmwareFile>();
zx::vmo test_file;
size_t test_file_size;
zx_status_t status = load_firmware(TestSupport::parent_device(), name,
test_file.reset_and_get_address(), &test_file_size);
if (status != ZX_OK)
return nullptr;
uint64_t ptr;
status = zx::vmar::root_self()->map(0, test_file, 0, test_file_size, ZX_VM_PERM_READ, &ptr);
if (status != ZX_OK)
return nullptr;
firmware_file->vmo = std::move(test_file);
firmware_file->size = test_file_size;
firmware_file->ptr = (uint8_t*)ptr;
return firmware_file;
}