1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137 | // Copyright (C) 2016-2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include <config.h>
#include <testutils/log_utils.h>
#include <cstdlib><--- Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results.
#include <iostream><--- Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results.
namespace isc {
namespace dhcp {
namespace test {
LogContentTest::LogContentTest()
:verbose_(false) {
// Get rid of any old files
remFile();
// Set up the logger for use in checking the debug statements.
// We send the debug statements to a file which we can
// check after the evaluations have completed. We also
// set the log severity and debug levels so that the log
// statements are executed.
LoggerSpecification spec(getRootLoggerName(),
keaLoggerSeverity(isc::log::DEBUG),
keaLoggerDbglevel(isc::log::MAX_DEBUG_LEVEL));
OutputOption option;
option.destination = OutputOption::DEST_FILE;
option.filename = string(LogContentTest::LOG_FILE);
spec.addOutputOption(option);
LoggerManager manager;
manager.process(spec);
// Overwrite the verbose_ default is the KEA_LOG_CHECK_VERBOSE
// environment variable exists.
if (getenv(KEA_LOG_CHECK_VERBOSE)) {
verbose_ = true;
}
}
LogContentTest:: ~LogContentTest() {
remFile();
}
bool LogContentTest::checkFile() {
ifstream file(LOG_FILE);
EXPECT_TRUE(file.is_open());
string line, exp_line;<--- The scope of the variable 'exp_line' can be reduced. [+]The scope of the variable 'exp_line' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced:
void f(int x)
{
int i = 0;
if (x) {
// it's safe to move 'int i = 0;' here
for (int n = 0; n < 10; ++n) {
// it is possible but not safe to move 'int i = 0;' here
do_something(&i);
}
}
}
When you see this message it is always safe to reduce the variable scope 1 level.
int i = 0;
bool found = true;
using namespace std;
while (getline(file, line) && (i != exp_strings_.size())) {
exp_line = exp_strings_[i];
if (verbose_) {
cout << "Read line : " << line << endl;
cout << "Looking for: " << exp_line << endl;
}
i++;
if (string::npos == line.find(exp_line)) {
if (verbose_) {
cout << "Verdict : not found" << endl;
}
found = false;
}
}
file.close();
if ((i != exp_strings_.size()) || (found == false)) {
if (verbose_) {
cout << "Final verdict: false" << endl;
}
return (false);
}
return (true);
}
size_t LogContentTest::countFile(const string& exp_string) {
ifstream file(LOG_FILE);
EXPECT_TRUE(file.is_open());
string line;
size_t cnt = 0;
using namespace std;
if (verbose_) {
cout << "Looking for:" << exp_string << endl;
}
while (getline(file, line)) {
if (verbose_) {
cout << "Read line :" << line << endl;
}
if (line.find(exp_string) != string::npos) {
++cnt;
}
}
file.close();
if (verbose_) {
cout << "Final count: " << cnt << endl;
}
return (cnt);
}
void LogContentTest::remFile() {
static_cast<void>(remove(LOG_FILE));
}
void LogContentTest::addString(const string& new_string) {
exp_strings_.push_back(new_string);
}
void LogContentTest::addString(const string& logger_msg, const string& new_string, const string& label) {
std::ostringstream stream;
stream << logger_msg << " " << label << ": " << new_string;
exp_strings_.push_back(stream.str());
}
// Set up the name of the LOG_FILE for use in checking
// the debug statements.
// Must not be the same file name used by test shell scripts.
const char* LogContentTest::LOG_FILE = "logtest.log";
// The environment variable to overwrite the verbose_ default value.
const char* LogContentTest::KEA_LOG_CHECK_VERBOSE = "KEA_LOG_CHECK_VERBOSE";
} // end of isc::dhcp::test namespace
} // end of isc::dhcp namespace
} // end of isc namespace
|