blob: 3de8f8a8821f60e21f6f41717da538b541c2782d [file] [log] [blame]
// Copyright 2019 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 <ddk/platform-defs.h>
#include <fuchsia/hardware/camera/c/fidl.h>
#include <lib/driver-integration-test/fixture.h>
#include <lib/fdio/fd.h>
#include <lib/fdio/fdio.h>
#include <zxtest/zxtest.h>
using driver_integration_test::IsolatedDevmgr;
namespace {
// Integration test for the driver defined in zircon/system/dev/virtual_camera.
// This test code loads the driver into an isolated devmgr and tests behavior.
class VirtualCameraTest : public zxtest::Test {
void SetUp() override;
protected:
IsolatedDevmgr devmgr_;
fbl::unique_fd fd_;
zx_handle_t handle_;
};
const board_test::DeviceEntry kDeviceEntry = []() {
board_test::DeviceEntry entry = {};
entry.vid = PDEV_VID_TEST;
entry.pid = PDEV_PID_VCAMERA_TEST;
entry.did = PDEV_DID_TEST_VCAMERA;
return entry;
}();
void VirtualCameraTest::SetUp() {
IsolatedDevmgr::Args args;
args.driver_search_paths.push_back("/boot/driver");
args.driver_search_paths.push_back("/boot/driver/test");
args.device_list.push_back(kDeviceEntry);
zx_status_t status = IsolatedDevmgr::Create(&args, &devmgr_);
ASSERT_EQ(status, ZX_OK);
status = devmgr_integration_test::RecursiveWaitForFile(
devmgr_.devfs_root(), "sys/platform/11:05:b/virtual_camera",
zx::time::infinite(), &fd_);
ASSERT_EQ(ZX_OK, status);
status = fdio_get_service_handle(fd_.get(), &handle_);
ASSERT_EQ(ZX_OK, status);
}
TEST_F(VirtualCameraTest, GetDeviceInfoGetFormatsTest) {
fuchsia_hardware_camera_DeviceInfo device_info;
zx_status_t status =
fuchsia_hardware_camera_ControlGetDeviceInfo(handle_, &device_info);
ASSERT_EQ(ZX_OK, status);
EXPECT_EQ(1, device_info.max_stream_count);
EXPECT_EQ(fuchsia_hardware_camera_CAMERA_OUTPUT_STREAM,
device_info.output_capabilities);
fuchsia_hardware_camera_VideoFormat formats[16];
uint32_t total_count;
uint32_t actual_count;
int32_t out_status;
status = fuchsia_hardware_camera_ControlGetFormats(
handle_, 1, formats, &total_count, &actual_count, &out_status);
ASSERT_EQ(ZX_OK, status);
auto format = formats[0];
EXPECT_EQ(640, format.format.width);
EXPECT_EQ(480, format.format.height);
EXPECT_EQ(1, format.format.layers);
EXPECT_EQ(30, format.rate.frames_per_sec_numerator);
EXPECT_EQ(1, format.rate.frames_per_sec_denominator);
}
} // namespace