LCOV - code coverage report
Current view: top level - tests - catch_appender.cpp (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 65 65
Test Date: 2025-07-04 17:06:38 Functions: 100.0 % 1 1
Legend: Lines: hit not hit

            Line data    Source code
       1              : // Copyright (c) 2006-2025  Made to Order Software Corp.  All Rights Reserved
       2              : //
       3              : // https://snapwebsites.org/project/snaplogger
       4              : // contact@m2osw.com
       5              : //
       6              : // This program is free software; you can redistribute it and/or modify
       7              : // it under the terms of the GNU General Public License as published by
       8              : // the Free Software Foundation; either version 2 of the License, or
       9              : // (at your option) any later version.
      10              : //
      11              : // This program is distributed in the hope that it will be useful,
      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14              : // GNU General Public License for more details.
      15              : //
      16              : // You should have received a copy of the GNU General Public License along
      17              : // with this program; if not, write to the Free Software Foundation, Inc.,
      18              : // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
      19              : 
      20              : // self
      21              : //
      22              : #include    "catch_main.h"
      23              : 
      24              : 
      25              : // snaplogger
      26              : //
      27              : #include    <snaplogger/buffer_appender.h>
      28              : #include    <snaplogger/exception.h>
      29              : #include    <snaplogger/format.h>
      30              : #include    <snaplogger/logger.h>
      31              : #include    <snaplogger/map_diagnostic.h>
      32              : #include    <snaplogger/message.h>
      33              : #include    <snaplogger/severity.h>
      34              : #include    <snaplogger/version.h>
      35              : 
      36              : 
      37              : // C
      38              : //
      39              : #include    <unistd.h>
      40              : #include    <netdb.h>
      41              : #include    <sys/param.h>
      42              : 
      43              : 
      44              : 
      45              : 
      46              : 
      47            1 : CATCH_TEST_CASE("appender", "[appender]")
      48              : {
      49            1 :     CATCH_START_SECTION("appender: Create")
      50              :     {
      51            5 :         snaplogger::set_diagnostic(snaplogger::DIAG_KEY_PROGNAME, "appender");
      52              : 
      53            5 :         snaplogger::appender::pointer_t unknown(snaplogger::create_appender("unknown", "test-buffer"));
      54            1 :         CATCH_REQUIRE(unknown == nullptr);
      55              : 
      56            5 :         snaplogger::appender::pointer_t buffer(snaplogger::create_appender("buffer", "test-buffer"));
      57            1 :         CATCH_REQUIRE(buffer != nullptr);
      58            1 :         CATCH_REQUIRE(buffer->get_type() == "buffer");
      59            1 :         CATCH_REQUIRE(buffer->get_name() == "test-buffer");
      60              : 
      61              :         // the name cannot be changed because it is not "console" or "syslog"
      62              :         //
      63            7 :         CATCH_REQUIRE_THROWS_MATCHES(
      64              :                   buffer->set_name("not-available")
      65              :                 , snaplogger::invalid_parameter
      66              :                 , Catch::Matchers::ExceptionMessage(
      67              :                             "logger_error: the appender set_name() can only be used for the console & syslog appenders to rename them to your own appender name (and done internally only)."));
      68              : 
      69            1 :         char const * cargv[] =
      70              :         {
      71              :             "/usr/bin/daemon",
      72              :             nullptr
      73              :         };
      74            1 :         int const argc(sizeof(cargv) / sizeof(cargv[0]) - 1);
      75            1 :         char ** argv = const_cast<char **>(cargv);
      76              : 
      77            1 :         advgetopt::options_environment environment_options;
      78            1 :         environment_options.f_project_name = "test-logger";
      79            1 :         environment_options.f_environment_flags = advgetopt::GETOPT_ENVIRONMENT_FLAG_SYSTEM_PARAMETERS;
      80            1 :         advgetopt::getopt opts(environment_options);
      81            1 :         opts.parse_program_name(argv);
      82            1 :         opts.parse_arguments(argc, argv, advgetopt::option_source_t::SOURCE_COMMAND_LINE);
      83            1 :         buffer->set_config(opts);
      84              : 
      85            1 :         snaplogger::format::pointer_t f(std::make_shared<snaplogger::format>("${severity}: ${message}"));
      86            1 :         buffer->set_format(f);
      87            1 :         CATCH_REQUIRE(buffer->get_format() == f);
      88              : 
      89            1 :         CATCH_REQUIRE(buffer->get_bytes_per_minute() == 0);
      90            1 :         CATCH_REQUIRE(buffer->get_bitrate_dropped_messages() == 0);
      91              : 
      92            1 :         snaplogger::logger::pointer_t l(snaplogger::logger::get_instance());
      93            1 :         l->add_appender(buffer);
      94              : 
      95            1 :         CATCH_REQUIRE(buffer->is_enabled());
      96              : 
      97            2 :         SNAP_LOG_FATAL << "Appender created by name" << SNAP_LOG_SEND;
      98            1 :         CATCH_REQUIRE(std::dynamic_pointer_cast<snaplogger::buffer_appender>(buffer)->str() == "fatal: Appender created by name\n");
      99              : 
     100            1 :         buffer->set_enabled(false);
     101            1 :         CATCH_REQUIRE_FALSE(buffer->is_enabled());
     102              : 
     103            2 :         SNAP_LOG_FATAL << "Another message when disabled does not make it" << SNAP_LOG_SEND;
     104            1 :         CATCH_REQUIRE(std::dynamic_pointer_cast<snaplogger::buffer_appender>(buffer)->str() == "fatal: Appender created by name\n");
     105              : 
     106            1 :         CATCH_REQUIRE_FALSE(buffer->unique());
     107              : 
     108              :         // nothing happens by default
     109              :         //
     110            1 :         buffer->reopen();
     111              : 
     112              :         // change severity
     113              :         //
     114            1 :         CATCH_REQUIRE(buffer->get_severity() == snaplogger::severity_t::SEVERITY_INFORMATION);
     115            1 :         buffer->set_severity(snaplogger::severity_t::SEVERITY_ERROR);
     116            1 :         CATCH_REQUIRE(buffer->get_severity() == snaplogger::severity_t::SEVERITY_ERROR);
     117              : 
     118            1 :         buffer->set_enabled(true);
     119            1 :         CATCH_REQUIRE(buffer->is_enabled());
     120              : 
     121            2 :         SNAP_LOG_INFORMATION << "Severity prevents this message from going in" << SNAP_LOG_SEND;
     122            1 :         CATCH_REQUIRE(std::dynamic_pointer_cast<snaplogger::buffer_appender>(buffer)->str() == "fatal: Appender created by name\n");
     123              : 
     124            1 :         buffer->reduce_severity(snaplogger::severity_t::SEVERITY_FATAL);
     125            1 :         CATCH_REQUIRE(buffer->get_severity() == snaplogger::severity_t::SEVERITY_ERROR);
     126            1 :         buffer->reduce_severity(snaplogger::severity_t::SEVERITY_INFORMATION);
     127            1 :         CATCH_REQUIRE(buffer->get_severity() == snaplogger::severity_t::SEVERITY_INFORMATION);
     128              : 
     129            1 :         snaplogger::format::pointer_t g(std::make_shared<snaplogger::format>("appender[${severity}]:${line}: ${message}"));
     130            1 :         std::shared_ptr<snaplogger::safe_format> safe(std::make_shared<snaplogger::safe_format>(buffer, g));
     131            1 :         CATCH_REQUIRE(buffer->get_format() == g);
     132              : 
     133              :         // the format includes the line number so we need to save that as it can
     134              :         // move each time we edit this file...
     135              :         //
     136            1 :         int const line = __LINE__;
     137            2 :         SNAP_LOG_TODO << "Complete the tests to 100%." << SNAP_LOG_SEND;
     138              : 
     139            1 :         CATCH_REQUIRE(std::dynamic_pointer_cast<snaplogger::buffer_appender>(buffer)->str()
     140              :                 == "fatal: Appender created by name\n"
     141              :                    "appender[uncompleted task]:" + std::to_string(line + 1) + ": Complete the tests to 100%.\n");
     142              : 
     143            1 :         safe.reset();
     144            1 :         CATCH_REQUIRE(buffer->get_format() == f);
     145              : 
     146            1 :         buffer->increase_severity(snaplogger::severity_t::SEVERITY_DEBUG);
     147            1 :         CATCH_REQUIRE(buffer->get_severity() == snaplogger::severity_t::SEVERITY_INFORMATION);
     148            1 :         buffer->increase_severity(snaplogger::severity_t::SEVERITY_MAJOR);
     149            1 :         CATCH_REQUIRE(buffer->get_severity() == snaplogger::severity_t::SEVERITY_MAJOR);
     150              : 
     151            5 :         snaplogger::appender::pointer_t other_buffer(snaplogger::create_appender("buffer", "other-buffer"));
     152            1 :         CATCH_REQUIRE(*other_buffer < *buffer);
     153              : 
     154            1 :         l->reset();
     155            1 :     }
     156            1 :     CATCH_END_SECTION()
     157            1 : }
     158              : 
     159              : 
     160              : 
     161              : // vim: ts=4 sw=4 et
        

Generated by: LCOV version 2.0-1

Snap C++ | List of projects | List of versions