blob: 3db512d3db28e690989556cb06f9c784326ed46c [file]
/*
* 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 <vector>
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<Journal*>& jrnlList);
/**
* \brief Destroy the journal instances in list jrnlList
*
* \param jrnlList List of pointers to journals to be destroyed
*/
void destroyJournals(std::vector<Journal*>& 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_