summaryrefslogtreecommitdiffstats
path: root/src/lib/testutils/log_utils.cc
blob: 56b6d333d5b0367f5b0f53d556a3e8e9d6658c22 (plain)
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
// 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