| // 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_ |