blob: c6b687764c76a77c7a44ae18e2eeabd44df72b69 [file] [log] [blame]
// 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 <memory>
#include <sdk/lib/inspect/testing/cpp/zxtest/inspect.h>
#include <zxtest/zxtest.h>
#include "src/devices/testing/mock-ddk/mock-device.h"
#include "tools/create/goldens/my-driver-cpp/my_driver_cpp.h"
namespace my_driver_cpp {
using inspect::InspectTestHelper;
class MyDriverCppTest : public InspectTestHelper, public zxtest::Test {
void SetUp() override { fake_root_ = MockDevice::FakeRootParent(); }
void TearDown() override {}
protected:
std::shared_ptr<zx_device> fake_root_;
};
TEST_F(MyDriverCppTest, LifetimeTest) {
auto device = new MyDriverCpp(fake_root_.get());
ASSERT_OK(device->Bind());
device->zxdev()->InitOp();
ASSERT_OK(device->zxdev()->WaitUntilInitReplyCalled(zx::time::infinite()));
device->DdkAsyncRemove();
ASSERT_OK(mock_ddk::ReleaseFlaggedDevices(fake_root_.get()));
}
// TODO: `is_bound` is an example inspect property. Replace this test with inspect properties
// if any are added to the driver. Remove this test if no new inspect nodes/properties were added.
TEST_F(MyDriverCppTest, InspectTest) {
auto device = new MyDriverCpp(fake_root_.get());
// Verify is_bound = false.
ASSERT_NO_FATAL_FAILURE(ReadInspect(device->inspect_vmo()));
ASSERT_NO_FATAL_FAILURE(
CheckProperty(hierarchy().node(), "is_bound", inspect::BoolPropertyValue(false)));
ASSERT_OK(device->Bind());
// Verify is_bound = true.
ASSERT_NO_FATAL_FAILURE(ReadInspect(device->inspect_vmo()));
ASSERT_NO_FATAL_FAILURE(
CheckProperty(hierarchy().node(), "is_bound", inspect::BoolPropertyValue(true)));
device->zxdev()->InitOp();
ASSERT_OK(device->zxdev()->WaitUntilInitReplyCalled(zx::time::infinite()));
device->DdkAsyncRemove();
ASSERT_OK(mock_ddk::ReleaseFlaggedDevices(fake_root_.get()));
}
} // namespace my_driver_cpp