1 /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /*
3  *     Copyright 2018 Couchbase, Inc
4  *
5  *   Licensed under the Apache License, Version 2.0 (the "License");
6  *   you may not use this file except in compliance with the License.
7  *   You may obtain a copy of the License at
8  *
9  *       http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *   Unless required by applicable law or agreed to in writing, software
12  *   distributed under the License is distributed on an "AS IS" BASIS,
13  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *   See the License for the specific language governing permissions and
15  *   limitations under the License.
16  */
17 
18 #include "logger_test_fixture.h"
19 
20 #include <gsl/gsl>
21 
SpdloggerTest()22 SpdloggerTest::SpdloggerTest() {
23     // Use default values from cb::logger::Config, apart from:
24     config.log_level = spdlog::level::level_enum::debug;
25     config.filename = "spdlogger_test";
26     config.unit_test = true; // Enable unit test mode (synchronous logging)
27     config.console = false; // Don't print to stderr
28 }
29 
SetUp()30 void SpdloggerTest::SetUp() {
31     setUpLogger();
32 }
33 
TearDown()34 void SpdloggerTest::TearDown() {
35     cb::logger::shutdown();
36     RemoveFiles();
37 }
38 
RemoveFiles()39 void SpdloggerTest::RemoveFiles() {
40     Expects(!config.filename.empty());
41     files = cb::io::findFilesWithPrefix(config.filename);
42     for (const auto& file : files) {
43         cb::io::rmrf(file);
44     }
45 }
46 
setUpLogger()47 void SpdloggerTest::setUpLogger() {
48     RemoveFiles();
49 
50     const auto ret = cb::logger::initialize(config);
51     EXPECT_FALSE(ret) << ret.get();
52 
53     cb::logger::get()->set_level(config.log_level);
54 }
55 
countInFile(const std::string& file, const std::string& msg)56 int SpdloggerTest::countInFile(const std::string& file,
57                                const std::string& msg) {
58     const auto content = cb::io::loadFile(file);
59 
60     const auto* begin = content.data();
61     const auto* end = begin + content.size();
62 
63     int count = 0;
64     while ((begin = std::search(begin, end, msg.begin(), msg.end())) != end) {
65         ++count;
66         begin += msg.size();
67     }
68     return count;
69 }
70 
getLogContents()71 std::string SpdloggerTest::getLogContents() {
72     files = cb::io::findFilesWithPrefix(config.filename);
73     std::string ret;
74 
75     for (const auto& file : files) {
76         ret.append(cb::io::loadFile(file));
77     }
78 
79     return ret;
80 }
81