RTBKit  0.9
Open-source framework to create real-time ad bidding systems.
soa/logger/testing/rotating_file_logger_test.cc
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 
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator