| // Copyright 2022 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_SYS_FUZZING_COMMON_TESTING_COMPONENT_CONTEXT_H_ |
| #define SRC_SYS_FUZZING_COMMON_TESTING_COMPONENT_CONTEXT_H_ |
| |
| #include <lib/zx/channel.h> |
| #include <stdint.h> |
| |
| #include <memory> |
| #include <unordered_map> |
| |
| #include "src/lib/fxl/macros.h" |
| #include "src/sys/fuzzing/common/component-context.h" |
| #include "testing/fidl/async_loop_for_test.h" |
| |
| namespace fuzzing { |
| |
| // This class is a wrapper around |sys::ComponentContext| that provides some additional common |
| // behaviors, such as making an |async::Loop| and scheduling a primary task on an |async::Executor|. |
| class ComponentContextForTest final : public ComponentContext { |
| public: |
| ~ComponentContextForTest() override = default; |
| |
| // Creates a component context. Unlike the the base class, this method does not consumes any |
| // startup handles. Instead, use |PutChannel| to add handles in order to serve FIDL protocols. |
| static ComponentContextPtr Create(); |
| |
| // Like |Create|, but does not have a loop and does not own its |executor|. This can be useful for |
| // tests that provide an executor using a test loop dispatcher. |
| static ComponentContextPtr Create(ExecutorPtr executor); |
| |
| // Adds a channel as if it had been passed as the |PA_HND(PA_USER0, arg)| startup handle. |
| void PutChannel(uint32_t arg, zx::channel); |
| |
| // If |PutChannel| was called with the given |arg|, returns that channel; otherwise, returns an |
| // invalid channel. |
| zx::channel TakeChannel(uint32_t arg) override; |
| |
| // These use the test loop, if set. Otherwise, they dispatch to the base class. |
| __WARN_UNUSED_RESULT zx_status_t Run() override; |
| __WARN_UNUSED_RESULT zx_status_t RunUntilIdle() override; |
| |
| private: |
| using ComponentContext::ComponentContext; |
| |
| std::unique_ptr<fidl::test::AsyncLoopForTest> loop_; |
| std::unordered_map<uint32_t, zx::channel> channels_; |
| |
| FXL_DISALLOW_COPY_ASSIGN_AND_MOVE(ComponentContextForTest); |
| }; |
| |
| } // namespace fuzzing |
| |
| #endif // SRC_SYS_FUZZING_COMMON_TESTING_COMPONENT_CONTEXT_H_ |