summaryrefslogtreecommitdiffstats
path: root/src/lib/testutils/log_utils.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/testutils/log_utils.cc')
-rw-r--r--src/lib/testutils/log_utils.cc131
1 files changed, 131 insertions, 0 deletions
diff --git a/src/lib/testutils/log_utils.cc b/src/lib/testutils/log_utils.cc
new file mode 100644
index 0000000..56b6d33
--- /dev/null
+++ b/src/lib/testutils/log_utils.cc
@@ -0,0 +1,131 @@
+// Copyright (C) 2016-2021 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 <iostream>
+
+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;
+ 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);
+}
+
+// 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