| // Copyright 2021 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 <fidl/fuchsia.driver.test/cpp/wire.h> |
| #include <lib/component/incoming/cpp/protocol.h> |
| #include <lib/device-watcher/cpp/device-watcher.h> |
| #include <lib/syslog/cpp/log_settings.h> |
| #include <lib/syslog/cpp/macros.h> |
| |
| int main() { |
| fuchsia_logging::SetTags({"platform_driver_test_realm"}); |
| |
| auto client_end = component::Connect<fuchsia_driver_test::Realm>(); |
| if (!client_end.is_ok()) { |
| FX_SLOG(ERROR, "Failed to connect to Realm FIDL", FX_KV("error", client_end.error_value())); |
| return 1; |
| } |
| fidl::WireSyncClient client{std::move(*client_end)}; |
| |
| fidl::Arena arena; |
| fuchsia_driver_test::wire::RealmArgs args(arena); |
| args.set_root_driver(arena, |
| fidl::StringView("fuchsia-boot:///platform-bus#meta/platform-bus.cm")); |
| auto wire_result = client->Start(std::move(args)); |
| if (wire_result.status() != ZX_OK) { |
| FX_SLOG(ERROR, "Failed to call to Realm:Start", FX_KV("status", wire_result.status())); |
| return 1; |
| } |
| if (wire_result->is_error()) { |
| FX_SLOG(ERROR, "Realm:Start failed", FX_KV("error", wire_result->error_value())); |
| return 1; |
| } |
| |
| // Wait for ramctl and nand-ctl to be bound. Errors may be logged if the drivers are in the |
| // process of binding while the DriverTestRealm is shutting down which can trip the high-severity |
| // log checker in tests. |
| zx::result ramctl = device_watcher::RecursiveWaitForFile("/dev/sys/platform/ram-disk/ramctl"); |
| if (ramctl.is_error()) { |
| FX_SLOG(ERROR, "Failed to wait for ramctl", FX_KV("status", ramctl.status_value())); |
| } |
| zx::result nand_ctl = device_watcher::RecursiveWaitForFile("/dev/sys/platform/00:00:2e/nand-ctl"); |
| if (nand_ctl.is_error()) { |
| FX_SLOG(ERROR, "Failed to wait for nand-ctl", FX_KV("status", nand_ctl.status_value())); |
| } |
| return 0; |
| } |