blob: 43f9bc559aad41dd2155a71e65a553aadef5a558 (
plain)
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
|
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
#include <boost/algorithm/string.hpp>
#include <gtest/gtest.h>
#include <regex>
#include <sstream>
#include <string>
#include "common/BackTrace.h"
#include "common/version.h"
// a dummy function, so we can check "foo" in the backtrace.
// do not mark this function as static or put it into an anonymous namespace,
// otherwise it's function name will be removed in the backtrace.
std::string foo()
{
std::ostringstream oss;
oss << ceph::BackTrace(1);
return oss.str();
}
// a typical backtrace looks like:
//
// ceph version Development (no_version)
// 1: (foo[abi:cxx11]()+0x4a) [0x5562231cf22a]
// 2: (BackTrace_Basic_Test::TestBody()+0x28) [0x5562231cf2fc]
TEST(BackTrace, Basic) {
std::string bt = foo();
std::vector<std::string> lines;
boost::split(lines, bt, boost::is_any_of("\n"));
const unsigned lineno = 1;
ASSERT_GT(lines.size(), lineno);
ASSERT_EQ(lines[0].find(pretty_version_to_str()), 1U);
std::regex e{"^ 1: "
#ifdef __FreeBSD__
"<foo.*>\\s"
"at\\s.*$"};
#else
"\\(foo.*\\)\\s"
"\\[0x[[:xdigit:]]+\\]$"};
#endif
EXPECT_TRUE(std::regex_match(lines[lineno], e));
}
|