| // Copyright 2020 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 <fuchsia/device/environment/test/llcpp/fidl.h> |
| #include <lib/driver-integration-test/fixture.h> |
| #include <lib/fdio/directory.h> |
| #include <zircon/syscalls.h> |
| |
| #include <unordered_set> |
| |
| #include <ddk/platform-defs.h> |
| #include <zxtest/zxtest.h> |
| |
| using driver_integration_test::IsolatedDevmgr; |
| using llcpp::fuchsia::device::environment::test::TestDevice; |
| |
| class EnvironmentTest : public zxtest::Test { |
| public: |
| ~EnvironmentTest() override = default; |
| void SetUp() override { |
| IsolatedDevmgr::Args args; |
| args.load_drivers.push_back("/boot/driver/ddk-environment-test.so"); |
| |
| board_test::DeviceEntry dev = {}; |
| dev.vid = PDEV_VID_TEST; |
| dev.pid = PDEV_PID_ENVIRONMENT_TEST; |
| dev.did = 0; |
| args.device_list.push_back(dev); |
| |
| zx_status_t status = IsolatedDevmgr::Create(&args, &devmgr_); |
| ASSERT_OK(status); |
| fbl::unique_fd fd; |
| ASSERT_OK(devmgr_integration_test::RecursiveWaitForFile( |
| devmgr_.devfs_root(), "sys/platform/11:14:0/ddk-environment-test", &fd)); |
| ASSERT_GT(fd.get(), 0); |
| ASSERT_OK(fdio_get_service_handle(fd.release(), chan_.reset_and_get_address())); |
| ASSERT_NE(chan_.get(), ZX_HANDLE_INVALID); |
| } |
| |
| protected: |
| zx::channel chan_; |
| IsolatedDevmgr devmgr_; |
| }; |
| |
| TEST_F(EnvironmentTest, GetServiceList) { |
| auto result = TestDevice::Call::GetServiceList(zx::unowned(chan_)); |
| ASSERT_OK(result.status()); |
| ASSERT_EQ(result->services.count(), 3); |
| |
| std::unordered_set<std::string> actual; |
| for (const auto& service : result->services) { |
| actual.emplace(service.data(), service.size()); |
| } |
| std::unordered_set<std::string> kExpectedServices = { |
| "/svc/fuchsia.logger.LogSink", |
| "/svc/fuchsia.scheduler.ProfileProvider", |
| "/svc/fuchsia.tracing.provider.Registry", |
| }; |
| ASSERT_EQ(actual, kExpectedServices); |
| } |