![]() |
RTBKit
0.9
Open-source framework to create real-time ad bidding systems.
|
00001 /* rotating_file_logger_test.cc 00002 Jeremy Barnes, 31 January 2011 00003 Copyright (c) 2011 Datacratic. All rights reserved. 00004 00005 Tests for the endpoints. 00006 */ 00007 00008 #define BOOST_TEST_MAIN 00009 #define BOOST_TEST_DYN_LINK 00010 00011 #include <boost/test/unit_test.hpp> 00012 #include "soa/logger/file_output.h" 00013 #include <sys/socket.h> 00014 #include "jml/utils/guard.h" 00015 #include "jml/arch/exception_handler.h" 00016 #include "jml/utils/testing/watchdog.h" 00017 #include "jml/utils/testing/fd_exhauster.h" 00018 #include "jml/arch/timers.h" 00019 00020 using namespace std; 00021 using namespace ML; 00022 using namespace Datacratic; 00023 00024 BOOST_AUTO_TEST_CASE( test_rotating_file_logger ) 00025 { 00026 vector<string> filesOpened; 00027 00028 ML::Call_Guard guard([&] () { for (auto file: filesOpened) unlink(file.c_str());}); 00029 00030 RotatingFileOutput logger; 00031 00032 int numLinesWritten = 0; 00033 00034 logger.onPreFileOpen = [&] (string filename) 00035 { 00036 cerr << "opening file " << filename << endl; 00037 filesOpened.push_back(filename); 00038 }; 00039 00040 logger.onPostFileOpen = [&] (string filename) 00041 { 00042 cerr << "closing file " << filename << endl; 00043 }; 00044 00045 logger.open("tmp/file-logger-%F-%T.log.gz", "2s"); 00046 00047 for (unsigned i = 0; i < 60; ++i) { 00048 logger.logMessage("HELLO", "This is a message " + numLinesWritten); 00049 ++numLinesWritten; 00050 ML::sleep(0.1); 00051 } 00052 00053 logger.close(); 00054 00055 BOOST_CHECK_GT(filesOpened.size(), 3); 00056 BOOST_CHECK_LE(filesOpened.size(), 6); 00057 00058 int totalLines = 0; 00059 00060 for (auto file: filesOpened) { 00061 filter_istream stream(file); 00062 while (stream) { 00063 string line; 00064 getline(stream, line); 00065 00066 if (line != "") 00067 ++totalLines; 00068 } 00069 } 00070 00071 BOOST_CHECK_EQUAL(totalLines, numLinesWritten); 00072 } 00073