File: sansio_utils.cpp

package info (click to toggle)
boost1.90 1.90.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 593,120 kB
  • sloc: cpp: 4,190,908; xml: 196,648; python: 34,618; ansic: 23,145; asm: 5,468; sh: 3,774; makefile: 1,161; perl: 1,020; sql: 728; ruby: 676; yacc: 478; java: 77; lisp: 24; csh: 6
file content (75 lines) | stat: -rw-r--r-- 2,393 bytes parent folder | download | duplicates (3)
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
/* Copyright (c) 2018-2025 Marcelo Zimbres Silva (mzimbres@gmail.com)
 *
 * Distributed under the Boost Software License, Version 1.0. (See
 * accompanying file LICENSE.txt)
 */

#include <boost/redis/detail/multiplexer.hpp>

#include <boost/core/ignore_unused.hpp>
#include <boost/core/lightweight_test.hpp>

#include "sansio_utils.hpp"

#include <initializer_list>
#include <iostream>
#include <ostream>

using namespace boost::redis;

static constexpr const char* to_string(logger::level lvl)
{
   switch (lvl) {
      case logger::level::disabled: return "logger::level::disabled";
      case logger::level::emerg:    return "logger::level::emerg";
      case logger::level::alert:    return "logger::level::alert";
      case logger::level::crit:     return "logger::level::crit";
      case logger::level::err:      return "logger::level::err";
      case logger::level::warning:  return "logger::level::warning";
      case logger::level::notice:   return "logger::level::notice";
      case logger::level::info:     return "logger::level::info";
      case logger::level::debug:    return "logger::level::debug";
      default:                      return "<unknown logger::level>";
   }
}

namespace boost::redis::detail {

void read(multiplexer& mpx, std::string_view data)
{
   auto const ec = mpx.prepare_read();
   ignore_unused(ec);
   BOOST_ASSERT(ec == system::error_code{});
   auto const buffer = mpx.get_prepared_read_buffer();
   BOOST_ASSERT(buffer.size() >= data.size());
   std::copy(data.cbegin(), data.cend(), buffer.begin());
   mpx.commit_read(data.size());
}

// Operators to enable checking logs
bool operator==(const log_message& lhs, const log_message& rhs) noexcept
{
   return lhs.lvl == rhs.lvl && lhs.msg == rhs.msg;
}

std::ostream& operator<<(std::ostream& os, const log_message& v)
{
   return os << "log_message { .lvl=" << to_string(v.lvl) << ", .msg=" << v.msg << " }";
}

void log_fixture::check_log(std::initializer_list<const log_message> expected, source_location loc)
   const
{
   if (!BOOST_TEST_ALL_EQ(expected.begin(), expected.end(), msgs.begin(), msgs.end())) {
      std::cerr << "Called from " << loc << std::endl;
   }
}

logger log_fixture::make_logger()
{
   return logger(logger::level::debug, [&](logger::level lvl, std::string_view msg) {
      msgs.push_back({lvl, std::string(msg)});
   });
}

}  // namespace boost::redis::detail