/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * \file PerfTest.h */ #ifndef tests_storePerftools_jrnlPerf_PerfTest_h_ #define tests_storePerftools_jrnlPerf_PerfTest_h_ #include "TestResult.h" #include "tests/storePerftools/common/Streamable.h" #include namespace tests { namespace storePerftools { namespace common { class TestParameters; } namespace jrnlPerf { class Journal; class JournalParameters; /** * \brief Main test class; Create an instance and execute run() * * Main test class which aggregates the components of a test. */ class PerfTest : public tests::storePerftools::common::Streamable { public: /** * \brief Constructor * * \param tp Test parameters for the test * \param jp Journal parameters for all queues (journals) in the test */ PerfTest(const tests::storePerftools::common::TestParameters& tp, const JournalParameters& jp); /** * \brief Virtual destructor */ virtual ~PerfTest(); /** * \brief Runs the test and prints out the results. * * Runs the test as set by the test parameters and journal parameters. */ void run(); /** * \brief Stream the test setup and results to an output stream * * Convenience feature which streams the test setup and results to an output stream. * * \param os Output stream to which the test setup and results are to be streamed. */ void toStream(std::ostream& os = std::cout) const; private: const tests::storePerftools::common::TestParameters& m_testParams; ///< Ref to a struct containing test params const JournalParameters& m_jrnlParams; ///< Ref to a struct containing the journal parameters TestResult m_testResult; ///< Journal performance object const char* m_msgData; ///< Pointer to msg data, which is the same for all messages /** * \brief Creates journals and JrnlInstance classes for all journals (queues) to be tested * * Creates a new journal instance and JrnlInstance instance for each queue. The journals are initialized * which creates a new set of journal files on the local storage media (which is determined by path in * JrnlParameters._jrnlDir). This activity is not timed, and is not a part of the performance test per se. * * \param jrnlList List which will be filled with pointers to the newly prepared journals */ void prepareJournals(std::vector& jrnlList); /** * \brief Destroy the journal instances in list jrnlList * * \param jrnlList List of pointers to journals to be destroyed */ void destroyJournals(std::vector& jrnlList); }; /** * \brief Print out the program arguments * * Print out the arguments to the performance program if requested by help or a parameter error. * * \param os Stream to which the arguments should be streamed. */ void printArgs(std::ostream& os = std::cout); /** * \brief Process the command-line arguments * * Process the command-line arguments and populate the JrnlPerfTestParameters and JrnlParameters structs. Only the * arguments supplied are on the command-line are changed in these structs, the others remain unchanged. It is * important therefore to make sure that defaults are pre-loaded (the default behavior of the default constructors * for these structs). * * \param argc Number of command-line arguments. Process directly from main(). * \param argv Pointer to array of command-line argument pointers. Process directly from main(). * \param tp Reference to test parameter object. Only params on the command-line are changed. * \param jp Reference to journal parameter object. Only params on the command-line are changed. */ bool readArgs(int argc, char** argv, tests::storePerftools::common::TestParameters& tp, JournalParameters& jp); }}} // namespace tests::storePerftools::jrnlPerf #endif // tests_storePerftools_jrnlPerf_PerfTest_h_