| // Copyright 2017 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 "peridot/bin/ledger/tests/cloud_provider/launcher/validation_tests_launcher.h" |
| |
| #include <lib/fidl/cpp/optional.h> |
| #include <lib/fxl/logging.h> |
| |
| namespace cloud_provider { |
| |
| namespace { |
| constexpr char kValidationTestsUrl[] = |
| "fuchsia-pkg://fuchsia.com/ledger_tests" |
| "#meta/cloud_provider_validation_tests.cmx"; |
| } // namespace |
| |
| ValidationTestsLauncher::ValidationTestsLauncher( |
| component::StartupContext* startup_context, |
| std::function< |
| void(fidl::InterfaceRequest<fuchsia::ledger::cloud::CloudProvider>)> |
| factory) |
| : startup_context_(startup_context), factory_(std::move(factory)) { |
| service_provider_impl_.AddService<fuchsia::ledger::cloud::CloudProvider>( |
| [this](fidl::InterfaceRequest<fuchsia::ledger::cloud::CloudProvider> |
| request) { factory_(std::move(request)); }); |
| } |
| |
| void ValidationTestsLauncher::Run(const std::vector<std::string>& arguments, |
| std::function<void(int32_t)> callback) { |
| callback_ = std::move(callback); |
| fuchsia::sys::LaunchInfo launch_info; |
| launch_info.url = kValidationTestsUrl; |
| fuchsia::sys::ServiceList service_list; |
| service_list.names.push_back(fuchsia::ledger::cloud::CloudProvider::Name_); |
| service_provider_impl_.AddBinding(service_list.provider.NewRequest()); |
| launch_info.additional_services = fidl::MakeOptional(std::move(service_list)); |
| for (const auto& argument : arguments) { |
| launch_info.arguments.push_back(argument); |
| } |
| |
| startup_context_->launcher()->CreateComponent( |
| std::move(launch_info), validation_tests_controller_.NewRequest()); |
| |
| validation_tests_controller_.events().OnTerminated = |
| [this](int32_t return_code, fuchsia::sys::TerminationReason reason) { |
| callback_(return_code); |
| }; |
| validation_tests_controller_.set_error_handler([this](zx_status_t status) { |
| FXL_LOG(ERROR) << "Lost connection to validation tests binary."; |
| callback_(-1); |
| }); |
| } |
| |
| } // namespace cloud_provider |