blob: b6f08a1fdba93b3faa5945b2f0b322c3de92b26d [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.
#ifndef SRC_STORAGE_FSHOST_FSHOST_INTEGRATION_TEST_FIXTURE_H_
#define SRC_STORAGE_FSHOST_FSHOST_INTEGRATION_TEST_FIXTURE_H_
#include <fuchsia/fshost/llcpp/fidl.h>
#include <fuchsia/sys2/cpp/fidl.h>
#include <lib/fdio/directory.h>
namespace devmgr {
class FshostIntegrationTest : public testing::Test {
public:
void SetUp() override {
fidl::SynchronousInterfacePtr<fuchsia::sys2::Realm> realm;
std::string service_name = std::string("/svc/") + fuchsia::sys2::Realm::Name_;
auto status = zx::make_status(
fdio_service_connect(service_name.c_str(), realm.NewRequest().TakeChannel().get()));
ASSERT_TRUE(status.is_ok());
fuchsia::sys2::Realm_BindChild_Result result;
status = zx::make_status(realm->BindChild(fuchsia::sys2::ChildRef{.name = "test-fshost"},
exposed_dir_.NewRequest(), &result));
ASSERT_TRUE(status.is_ok() && !result.is_err());
// Describe so that we discover errors early.
fuchsia::io::NodeInfo info;
ASSERT_EQ(exposed_dir_->Describe(&info), ZX_OK);
zx::channel request;
status = zx::make_status(zx::channel::create(0, &watcher_channel_, &request));
ASSERT_EQ(status.status_value(), ZX_OK);
status = zx::make_status(
exposed_dir_->Open(fuchsia::io::OPEN_RIGHT_READABLE | fuchsia::io::OPEN_RIGHT_WRITABLE, 0,
llcpp::fuchsia::fshost::BlockWatcher::Name,
fidl::InterfaceRequest<fuchsia::io::Node>(std::move(request))));
ASSERT_EQ(status.status_value(), ZX_OK);
}
const fidl::SynchronousInterfacePtr<fuchsia::io::Directory>& exposed_dir() const {
return exposed_dir_;
}
const zx::channel& watcher_channel() const { return watcher_channel_; }
void PauseWatcher() const {
auto result = llcpp::fuchsia::fshost::BlockWatcher::Call::Pause(watcher_channel_.borrow());
ASSERT_EQ(result.status(), ZX_OK);
ASSERT_EQ(result->status, ZX_OK);
}
void ResumeWatcher() const {
auto result = llcpp::fuchsia::fshost::BlockWatcher::Call::Resume(watcher_channel_.borrow());
ASSERT_EQ(result.status(), ZX_OK);
ASSERT_EQ(result->status, ZX_OK);
}
private:
fidl::SynchronousInterfacePtr<fuchsia::io::Directory> exposed_dir_;
zx::channel watcher_channel_;
};
} // namespace devmgr
#endif // SRC_STORAGE_FSHOST_FSHOST_INTEGRATION_TEST_FIXTURE_H_