Skip to content
This repository was archived by the owner on Aug 5, 2022. It is now read-only.

Commit 3d178a2

Browse files
committed
Klocwork fix: wrong instance lifetime
A pfw instance may use a logger after its deletion. This patch fixes it. Signed-off-by: Thomas Cahuzac <[email protected]>
1 parent 27d0dad commit 3d178a2

File tree

1 file changed

+26
-21
lines changed

1 file changed

+26
-21
lines changed

test/functional-tests/Basic.cpp

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -62,29 +62,34 @@ SCENARIO_METHOD(ParameterFramework, "No Logger", "[log]")
6262
}
6363
}
6464

65-
SCENARIO_METHOD(WarningPF, "Logger should receive info and warnings", "[log]")
65+
SCENARIO("Logger should receive info and warnings", "[log]")
6666
{
67-
GIVEN ("Config files that emit warnings") {
68-
GIVEN ("A logger that stores logs") {
69-
StoreLogger logger{};
70-
WHEN ("The record logger is set") {
71-
setLogger(&logger);
72-
THEN ("Start should succeed") {
73-
REQUIRE_NOTHROW(start());
74-
AND_THEN ("The logger should have stored info and warning log") {
75-
using Logs = StoreLogger::Logs;
76-
using Level = StoreLogger::Log::Level;
77-
CHECK(logger.filter(Level::warning) != Logs{});
78-
CHECK(logger.getLogs() != Logs{});
79-
}
80-
}
81-
AND_WHEN ("A nullptr logger is set") {
82-
setLogger(nullptr);
67+
GIVEN ("A logger that stores logs") {
68+
/* Instantiating logger first to ensure that its lifetime is longer than the pfw's one,
69+
* because the pfw references the logger. */
70+
StoreLogger logger{};
71+
GIVEN ("A parameter framework") {
72+
WarningPF pfw;
73+
GIVEN ("Config files that emit warnings") {
74+
WHEN ("The record logger is set") {
75+
pfw.setLogger(&logger);
8376
THEN ("Start should succeed") {
84-
REQUIRE_NOTHROW(start());
85-
AND_THEN (
86-
"The record logger should NOT have stored any info or warning log") {
87-
CHECK(logger.getLogs() == StoreLogger::Logs{});
77+
REQUIRE_NOTHROW(pfw.start());
78+
AND_THEN ("The logger should have stored info and warning log") {
79+
using Logs = StoreLogger::Logs;
80+
using Level = StoreLogger::Log::Level;
81+
CHECK(logger.filter(Level::warning) != Logs{});
82+
CHECK(logger.getLogs() != Logs{});
83+
}
84+
}
85+
AND_WHEN ("A nullptr logger is set") {
86+
pfw.setLogger(nullptr);
87+
THEN ("Start should succeed") {
88+
REQUIRE_NOTHROW(pfw.start());
89+
AND_THEN ("The record logger should NOT have stored any info or "
90+
"warning log") {
91+
CHECK(logger.getLogs() == StoreLogger::Logs{});
92+
}
8893
}
8994
}
9095
}

0 commit comments

Comments
 (0)