blob: 9c97a81d1c60373b61e74deb3b7683d747540255 [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.
#ifndef SRC_DEVICES_TESTS_LIBDRIVER_INTEGRATION_TEST_ACTION_LIST_H_
#define SRC_DEVICES_TESTS_LIBDRIVER_INTEGRATION_TEST_ACTION_LIST_H_
#include <fuchsia/device/mock/cpp/fidl.h>
#include <lib/fit/bridge.h>
#include <lib/fit/promise.h>
#include <string>
#include <vector>
#include <ddk/binding.h>
namespace libdriver_integration_test {
// Forward-declarations
class MockDevice;
class MockDeviceThread;
// Represents an ordered list of actions to perform.
class ActionList {
public:
using Action = fuchsia::device::mock::Action;
using CompleterMap = std::map<uint64_t, fit::completer<void, std::string>>;
ActionList();
~ActionList();
ActionList(ActionList&&) = default;
ActionList& operator=(ActionList&&) = default;
ActionList(const ActionList&) = delete;
ActionList& operator=(const ActionList&) = delete;
const std::vector<Action>& actions() const { return actions_; }
// Methods for adding to the stored actions
void AppendAction(Action action);
void AppendAddMockDevice(async_dispatcher_t* dispatcher, const std::string& parent_path,
std::string name, std::vector<zx_device_prop_t> props,
zx_status_t expect_status, std::unique_ptr<MockDevice>* new_device_out,
fit::promise<void, std::string>* add_done_out);
void AppendAddMockDevice(async_dispatcher_t* dispatcher, const std::string& parent_path,
std::string name, std::vector<zx_device_prop_t> props,
zx_status_t expect_status, fit::completer<void, std::string> add_done,
std::unique_ptr<MockDevice>* new_device_out);
void AppendUnbindReply(fit::promise<void, std::string>* unbind_reply_done_out);
void AppendUnbindReply(fit::completer<void, std::string> unbind_reply_done);
void AppendAsyncRemoveDevice();
void AppendCreateThread(async_dispatcher_t* dispatcher, std::unique_ptr<MockDeviceThread>* out);
void AppendReturnStatus(zx_status_t status);
// Consume this action list, updating the given |map| and action counter.
std::vector<Action> FinalizeActionList(CompleterMap* map, uint64_t* next_action_id);
private:
std::vector<Action> actions_;
// Map of locally assigned action IDs to completers for them. These will be
// remapped by MockDevice::FinalizeActionList.
CompleterMap local_action_map_;
uint64_t next_action_id_ = 0;
};
} // namespace libdriver_integration_test
#endif // SRC_DEVICES_TESTS_LIBDRIVER_INTEGRATION_TEST_ACTION_LIST_H_