forked from npshub/mantid
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ErrorReporterTest.h
142 lines (123 loc) · 6.34 KB
/
ErrorReporterTest.h
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
// NScD Oak Ridge National Laboratory, European Spallation Source,
// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
// SPDX - License - Identifier: GPL - 3.0 +
#pragma once
#include <cxxtest/TestSuite.h>
#include "MantidJson/Json.h"
#include "MantidKernel/ErrorReporter.h"
#include <algorithm>
#include <json/json.h>
using Mantid::Kernel::ErrorReporter;
class TestableErrorReporter : public ErrorReporter {
public:
using ErrorReporter::ErrorReporter;
/// generates the message body for a error message
std::string generateErrorMessage() const override { return ErrorReporter::generateErrorMessage(); }
protected:
/// sends a report over the internet
int sendReport(const std::string &message, const std::string &url) override {
UNUSED_ARG(message);
UNUSED_ARG(url);
// do nothing
return 200;
}
};
class ErrorReporterTest : public CxxTest::TestSuite {
public:
// This pair of boilerplate methods prevent the suite being created statically
// This means the constructor isn't called when running other tests
static ErrorReporterTest *createSuite() { return new ErrorReporterTest(); }
static void destroySuite(ErrorReporterTest *suite) { delete suite; }
void test_errorMessage() {
const std::string name = "My testing application name";
const Mantid::Types::Core::time_duration upTime(5, 0, 7, 0);
TestableErrorReporter errorService(name, upTime, "0", false);
const std::string message = errorService.generateErrorMessage();
::Json::Value root;
Mantid::JsonHelpers::parse(message, &root);
auto members = root.getMemberNames();
const std::vector<std::string> expectedMembers{
"ParaView", "application", "host", "mantidSha1", "mantidVersion", "osArch", "osName",
"osReadable", "osVersion", "uid", "facility", "upTime", "exitCode"};
for (auto expectedMember : expectedMembers) {
TSM_ASSERT(expectedMember + " not found",
std::find(members.begin(), members.end(), expectedMember) != members.end());
}
TS_ASSERT_EQUALS(root["application"].asString(), name);
TS_ASSERT_EQUALS(root["upTime"].asString(), to_simple_string(upTime));
TS_ASSERT_EQUALS(root["exitCode"].asString(), "0");
}
void test_errorMessageWithShare() {
const std::string name = "My testing application name";
const Mantid::Types::Core::time_duration upTime(5, 0, 7, 0);
TestableErrorReporter errorService(name, upTime, "0", true, "name", "email", "textBox");
const std::string message = errorService.generateErrorMessage();
::Json::Value root;
Mantid::JsonHelpers::parse(message, &root);
auto members = root.getMemberNames();
const std::vector<std::string> expectedMembers{
"ParaView", "application", "host", "mantidSha1", "mantidVersion", "osArch", "osName", "osReadable",
"osVersion", "uid", "facility", "upTime", "exitCode", "textBox", "name", "email"};
for (auto expectedMember : expectedMembers) {
TSM_ASSERT(expectedMember + " not found",
std::find(members.begin(), members.end(), expectedMember) != members.end());
}
TS_ASSERT_EQUALS(root["application"].asString(), name);
TS_ASSERT_EQUALS(root["upTime"].asString(), to_simple_string(upTime));
TS_ASSERT_EQUALS(root["exitCode"].asString(), "0");
TS_ASSERT_EQUALS(root["name"].asString(), "name");
TS_ASSERT_EQUALS(root["email"].asString(), "email");
TS_ASSERT_EQUALS(root["textBox"].asString(), "textBox");
}
void test_errorMessageWithShareAndRecoveryFileHash() {
const std::string name = "My testing application name";
const Mantid::Types::Core::time_duration upTime(5, 0, 7, 0);
TestableErrorReporter errorService(name, upTime, "0", true, "name", "email", "textBox", "stacktrace");
const std::string message = errorService.generateErrorMessage();
::Json::Value root;
Mantid::JsonHelpers::parse(message, &root);
auto members = root.getMemberNames();
const std::vector<std::string> expectedMembers{
"ParaView", "application", "host", "mantidSha1", "mantidVersion", "osArch",
"osName", "osReadable", "osVersion", "uid", "facility", "upTime",
"exitCode", "textBox", "name", "email", "stacktrace"};
for (auto expectedMember : expectedMembers) {
TSM_ASSERT(expectedMember + " not found",
std::find(members.begin(), members.end(), expectedMember) != members.end());
}
TS_ASSERT_EQUALS(root["application"].asString(), name);
TS_ASSERT_EQUALS(root["upTime"].asString(), to_simple_string(upTime));
TS_ASSERT_EQUALS(root["exitCode"].asString(), "0");
TS_ASSERT_EQUALS(root["name"].asString(), "name");
TS_ASSERT_EQUALS(root["email"].asString(), "email");
TS_ASSERT_EQUALS(root["textBox"].asString(), "textBox");
TS_ASSERT_EQUALS(root["stacktrace"].asString(), "stacktrace");
}
void test_errorMessageWithNoShareAndRecoveryFileHash() {
const std::string name = "My testing application name";
const Mantid::Types::Core::time_duration upTime(5, 0, 7, 0);
TestableErrorReporter errorService(name, upTime, "0", false, "name", "email", "textBox", "stacktrace");
const std::string message = errorService.generateErrorMessage();
::Json::Value root;
Mantid::JsonHelpers::parse(message, &root);
auto members = root.getMemberNames();
const std::vector<std::string> expectedMembers{
"ParaView", "application", "host", "mantidSha1", "mantidVersion", "osArch",
"osName", "osReadable", "osVersion", "uid", "facility", "upTime",
"exitCode", "textBox", "name", "email", "stacktrace"};
for (auto expectedMember : expectedMembers) {
TSM_ASSERT(expectedMember + " not found",
std::find(members.begin(), members.end(), expectedMember) != members.end());
}
TS_ASSERT_EQUALS(root["application"].asString(), name);
TS_ASSERT_EQUALS(root["upTime"].asString(), to_simple_string(upTime));
TS_ASSERT_EQUALS(root["exitCode"].asString(), "0");
TS_ASSERT_EQUALS(root["name"].asString(), "");
TS_ASSERT_EQUALS(root["email"].asString(), "");
TS_ASSERT_EQUALS(root["textBox"].asString(), "textBox");
TS_ASSERT_EQUALS(root["stacktrace"].asString(), "");
}
};