| // Copyright 2017 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_LEDGER_BIN_TESTS_INTEGRATION_INTEGRATION_TEST_H_ |
| #define SRC_LEDGER_BIN_TESTS_INTEGRATION_INTEGRATION_TEST_H_ |
| |
| #include <fuchsia/ledger/internal/cpp/fidl.h> |
| #include <lib/async-loop/cpp/loop.h> |
| #include <lib/gtest/real_loop_fixture.h> |
| #include <trace-provider/provider.h> |
| |
| #include <functional> |
| |
| #include "gtest/gtest.h" |
| #include "src/ledger/bin/fidl/include/types.h" |
| #include "src/ledger/bin/testing/ledger_app_instance_factory.h" |
| #include "src/lib/fxl/macros.h" |
| |
| namespace ledger { |
| |
| // Base class for integration tests. |
| // |
| // Integration tests verify interactions with client-facing FIDL services |
| // exposed by Ledger. The FIDL services are run within the test process, on a |
| // separate thread. |
| class BaseIntegrationTest : public ::testing::Test, public LoopController { |
| public: |
| explicit BaseIntegrationTest( |
| const LedgerAppInstanceFactoryBuilder* factory_builder); |
| ~BaseIntegrationTest() override; |
| |
| BaseIntegrationTest(const BaseIntegrationTest&) = delete; |
| BaseIntegrationTest(BaseIntegrationTest&&) = delete; |
| BaseIntegrationTest& operator=(const BaseIntegrationTest&) = delete; |
| BaseIntegrationTest& operator=(BaseIntegrationTest&&) = delete; |
| |
| // LoopController: |
| void RunLoop() override; |
| void StopLoop() override; |
| std::unique_ptr<SubLoop> StartNewLoop() override; |
| std::unique_ptr<CallbackWaiter> NewWaiter() override; |
| async_dispatcher_t* dispatcher() override; |
| bool RunLoopUntil(fit::function<bool()> condition) override; |
| void RunLoopFor(zx::duration duration) override; |
| |
| protected: |
| // ::testing::Test: |
| void SetUp() override; |
| void TearDown() override; |
| |
| zx::socket StreamDataToSocket(std::string data); |
| |
| std::unique_ptr<LedgerAppInstanceFactory::LedgerAppInstance> |
| NewLedgerAppInstance(); |
| |
| LedgerAppInstanceFactory* GetAppFactory(); |
| |
| LoopController* GetLoopController(); |
| |
| rng::Random* GetRandom(); |
| |
| private: |
| const LedgerAppInstanceFactoryBuilder* factory_builder_; |
| std::unique_ptr<LedgerAppInstanceFactory> factory_; |
| // Loop used to run network service and token provider tasks. |
| std::unique_ptr<SubLoop> services_loop_; |
| std::unique_ptr<trace::TraceProvider> trace_provider_; |
| }; |
| |
| class IntegrationTest : public BaseIntegrationTest, |
| public ::testing::WithParamInterface< |
| const LedgerAppInstanceFactoryBuilder*> { |
| public: |
| IntegrationTest(); |
| ~IntegrationTest() override; |
| }; |
| |
| // Initializes test environment based on the command line arguments. |
| // |
| // Returns true iff the initialization was successful. |
| bool ProcessCommandLine(int argc, char** argv); |
| |
| } // namespace ledger |
| |
| #endif // SRC_LEDGER_BIN_TESTS_INTEGRATION_INTEGRATION_TEST_H_ |