You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
6.6 KiB
182 lines
6.6 KiB
/*
|
|
* Copyright (c) 2015, Intel Corporation
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
* are permitted provided that the following conditions are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
* list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation and/or
|
|
* other materials provided with the distribution.
|
|
*
|
|
* 3. Neither the name of the copyright holder nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software without
|
|
* specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#include "Test.hpp"
|
|
#include "Config.hpp"
|
|
#include "StoreLogger.hpp"
|
|
#include "ParameterFramework.hpp"
|
|
|
|
#include <catch.hpp>
|
|
|
|
#include <list>
|
|
#include <string>
|
|
|
|
#include <cstdio>
|
|
|
|
namespace parameterFramework
|
|
{
|
|
|
|
SCENARIO_METHOD(ParameterFramework, "Default logger", "[log]")
|
|
{
|
|
WHEN ("No logger is set") {
|
|
THEN ("Start should succeed") {
|
|
CHECK_NOTHROW(start());
|
|
}
|
|
}
|
|
}
|
|
|
|
SCENARIO_METHOD(ParameterFramework, "No Logger", "[log]")
|
|
{
|
|
WHEN ("A nullptr logger is set") {
|
|
setLogger(nullptr);
|
|
THEN ("Start should succeed") {
|
|
CHECK_NOTHROW(start());
|
|
}
|
|
}
|
|
}
|
|
|
|
SCENARIO("Logger should receive info and warnings", "[log]")
|
|
{
|
|
GIVEN ("A logger that stores logs") {
|
|
/* Instantiating logger first to ensure that its lifetime is longer than the pfw's one,
|
|
* because the pfw references the logger. */
|
|
StoreLogger logger{};
|
|
GIVEN ("A parameter framework") {
|
|
WarningPF pfw;
|
|
GIVEN ("Config files that emit warnings") {
|
|
WHEN ("The record logger is set") {
|
|
pfw.setLogger(&logger);
|
|
THEN ("Start should succeed") {
|
|
REQUIRE_NOTHROW(pfw.start());
|
|
AND_THEN ("The logger should have stored info and warning log") {
|
|
using Logs = StoreLogger::Logs;
|
|
using Level = StoreLogger::Log::Level;
|
|
CHECK(logger.filter(Level::warning) != Logs{});
|
|
CHECK(logger.getLogs() != Logs{});
|
|
}
|
|
}
|
|
AND_WHEN ("A nullptr logger is set") {
|
|
pfw.setLogger(nullptr);
|
|
THEN ("Start should succeed") {
|
|
REQUIRE_NOTHROW(pfw.start());
|
|
AND_THEN ("The record logger should NOT have stored any info or "
|
|
"warning log") {
|
|
CHECK(logger.getLogs() == StoreLogger::Logs{});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
SCENARIO_METHOD(LazyPF, "Tuning OK", "[properties][remote interface]")
|
|
{
|
|
}
|
|
|
|
SCENARIO_METHOD(LazyPF, "Invalid XML configuration")
|
|
{
|
|
for (auto &xmlT : Tests<std::string>{{"an unknown tag", "<unknown_tag/>"},
|
|
{"an unclosed tag", "<unclosed>"}}) {
|
|
auto invalidXml = xmlT.payload;
|
|
GIVEN ("An invalid xml: containing " + xmlT.title) {
|
|
Config::Plugins ps{};
|
|
for (auto &&configT : Tests<Config>{
|
|
{"top config", {&Config::plugins, Config::Plugins{{"", {invalidXml}}}}},
|
|
{"structure", {&Config::instances, invalidXml}},
|
|
{"settings", {&Config::domains, invalidXml}}}) {
|
|
WHEN ("Used in the " + configT.title) {
|
|
create(std::move(configT.payload));
|
|
THEN ("Start should fail") {
|
|
CHECK_THROWS_AS(mPf->start(), Exception);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
SCENARIO_METHOD(LazyPF, "Plugin OK", "[properties][missing plugin policy]")
|
|
{
|
|
for (auto &pluginNameT :
|
|
Tests<std::string>{{"an non existing plugin", "libdonetexist.so"},
|
|
{"an existing library but invalid (linux) PF plugin", "libc.so.6"}}) {
|
|
GIVEN ("An" + pluginNameT.title) {
|
|
create({&Config::plugins, Config::Plugins{{"", {pluginNameT.payload}}}});
|
|
WHEN ("The missing subsystem policy is left to default") {
|
|
THEN ("Start should fail") {
|
|
CHECK_THROWS_AS(mPf->start(), Exception);
|
|
}
|
|
}
|
|
WHEN ("The missing subsystem policy is set to failure") {
|
|
mPf->setFailureOnMissingSubsystem(true);
|
|
THEN ("Start should fail") {
|
|
CHECK_THROWS_AS(mPf->start(), Exception);
|
|
}
|
|
}
|
|
WHEN ("The missing subsystem policy is set to ignore") {
|
|
mPf->setFailureOnMissingSubsystem(false);
|
|
THEN ("Start should success") {
|
|
CHECK_NOTHROW(mPf->start());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
SCENARIO_METHOD(LazyPF, "Invalid domains", "[properties]")
|
|
{
|
|
GIVEN ("An invalid domain file") {
|
|
create({&Config::domains, "<Domain name='Invalid'/>"});
|
|
THEN ("Start should fail") {
|
|
CHECK_THROWS_AS(mPf->start(), Exception);
|
|
}
|
|
WHEN ("Changing failure setting load policy to ignore") {
|
|
mPf->setFailureOnFailedSettingsLoad(false);
|
|
THEN ("Start should succeed") {
|
|
CHECK_NOTHROW(mPf->start());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
SCENARIO_METHOD(ParameterFramework, "Raw value space")
|
|
{
|
|
WHEN ("Raw value space is set") {
|
|
setRawValueSpace(true);
|
|
THEN ("Value space should be raw") {
|
|
CHECK(isValueSpaceRaw() == true);
|
|
}
|
|
}
|
|
}
|
|
|
|
} // namespace parameterFramework
|