19 #ifndef INCLUDE_RCF_TEST_TESTMINIMAL_HPP
20 #define INCLUDE_RCF_TEST_TESTMINIMAL_HPP
23 #if defined(_MSC_VER) && _MSC_VER == 1310 && defined(RCF_USE_BOOST_SERIALIZATION)
28 #if defined(_MSC_VER) && _MSC_VER == 1310
29 #pragma warning( disable : 4995 ) // 'func': name was marked as #pragma deprecated
31 #pragma warning( default : 4995 )
34 #include <RCF/Exception.hpp>
35 #include <RCF/InitDeinit.hpp>
36 #include <RCF/ThreadLibrary.hpp>
37 #include <RCF/Tools.hpp>
39 #include <RCF/test/PrintTestHeader.hpp>
40 #include <RCF/test/ProgramTimeLimit.hpp>
41 #include <RCF/test/SpCollector.hpp>
42 #include <RCF/test/Test.hpp>
43 #include <RCF/test/TransportFactories.hpp>
45 #include <RCF/util/Platform/OS/BsdSockets.hpp>
46 #include <RCF/util/Log.hpp>
52 #include <RCF/test/MiniDump.hpp>
60 #if RCF_FEATURE_CUSTOM_ALLOCATOR==1
61 #if defined(_MSC_VER) && !defined(NDEBUG)
62 #include <RCF/test/AllocationHookCRT.hpp>
66 int test_main(
int argc,
char **argv);
68 int main(
int argc,
char **argv)
70 Platform::OS::BsdSockets::disableBrokenPipeSignals();
72 RCF::RcfInitDeinit rcfInit;
76 RCF::initializeTransportFactories();
78 std::cout <<
"Commandline: ";
79 for (
int i=0; i<argc; ++i)
81 std::cout << argv[i] <<
" ";
83 std::cout << std::endl;
85 bool shoudNotCatch =
false;
88 util::CommandLineOption<std::string> clTestCase(
"testcase",
"",
"Run a specific test case.");
89 util::CommandLineOption<bool> clListTests(
"list",
false,
"List all test cases.");
90 util::CommandLineOption<bool> clAssert(
"assert",
false,
"Enable assert popups, and assert on test failures.");
91 util::CommandLineOption<int> clLogLevel(
"loglevel", 1,
"Set RCF log level.");
92 util::CommandLineOption<bool> clLogTime(
"logtime",
false,
"Set RCF time stamp logging.");
93 util::CommandLineOption<bool> clLogTid(
"logtid",
false,
"Set RCF thread id logging.");
94 util::CommandLineOption<std::string> clLogFormat(
"logformat",
"",
"Set RCF log format.");
95 util::CommandLineOption<bool> clNoCatch(
"nocatch",
false,
"Don't catch exceptions at top level.");
96 util::CommandLineOption<unsigned int> clTimeLimit(
"timelimit", 5*60,
"Set program time limit in seconds. 0 to disable.");
99 util::CommandLineOption<bool> clMinidump(
"minidump",
true,
"Enable minidump creation.");
102 bool exitOnHelp =
false;
103 util::CommandLine::getSingleton().parse(argc, argv, exitOnHelp);
106 std::string testCase = clTestCase.get();
107 if (!testCase.empty())
109 RCF::gTestEnv().setTestCaseToRun(testCase);
113 bool list = clListTests.get();
116 RCF::gTestEnv().setEnumerationOnly();
120 bool assertOnFail = clAssert.get();
121 RCF::gTestEnv().setAssertOnFail(assertOnFail);
128 DWORD dwFlags = SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS;
129 DWORD dwOldFlags = SetErrorMode(dwFlags);
130 SetErrorMode(dwOldFlags | dwFlags);
134 _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG);
135 _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);
136 _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG);
144 int logName = RCF::LogNameRcf;
145 int logLevel = clLogLevel.get();
146 bool includeTid = clLogTid.get();
147 bool includeTimestamp = clLogTime.get();
149 std::string logFormat = clLogFormat.get();
150 if (logFormat.empty())
152 if (!includeTid && !includeTimestamp)
154 logFormat =
"%E(%F): %X";
156 if (includeTid && !includeTimestamp)
158 logFormat =
"%E(%F): (Tid:%D): %X";
160 else if (!includeTid && includeTimestamp)
162 logFormat =
"%E(%F): (Time:%H): %X";
164 else if (includeTid && includeTimestamp)
166 logFormat =
"%E(%F): (Tid:%D)(Time::%H): %X";
171 RCF::LoggerPtr loggerPtr(
new RCF::Logger(logName, logLevel, RCF::LogToDebugWindow(), logFormat) );
172 loggerPtr->activate();
174 RCF::LoggerPtr loggerPtr(
new RCF::Logger(logName, logLevel,
RCF::LogToStdout(), logFormat) );
175 loggerPtr->activate();
179 #if defined(_MSC_VER)
180 bool enableMinidumps = clMinidump.get();
183 setMiniDumpExceptionFilter();
188 unsigned int timeLimitS = clTimeLimit.get();
189 gpProgramTimeLimit =
new ProgramTimeLimit(timeLimitS);
191 shoudNotCatch = clNoCatch.get();
196 bool shouldCatch = !shoudNotCatch;
201 ret = test_main(argc, argv);
203 catch(
const RCF::RemoteException & e)
205 std::cout <<
"Caught top-level exception (RCF::RemoteException): " << e.getErrorString() << std::endl;
208 catch(
const RCF::Exception & e)
210 std::cout <<
"Caught top-level exception (RCF::Exception): " << e.getErrorString() << std::endl;
213 catch(
const std::exception & e)
215 std::cout <<
"Caught top-level exception (std::exception): " << e.what() << std::endl;
220 std::cout <<
"Caught top-level exception (...)" << std::endl;
226 ret = test_main(argc, argv);
230 std::size_t failCount = RCF::gTestEnv().getFailCount();
233 std::ostringstream os;
234 os <<
"*** Test Failures: " << failCount <<
" ***" << std::endl;
239 exitMsg =
"*** All Tests Passed ***\n";
242 RCF::gTestEnv().printTestMessage(exitMsg);
245 boost::uint32_t durationMs = testTimer.getDurationMs();
246 std::cout <<
"Time elapsed: " << durationMs/1000 <<
" (s)" << std::endl;
253 return ret +
static_cast<int>(failCount);
257 std::string getFilterName(
int filterId)
261 case RcfFilter_Unknown :
return "Unknown";
262 case RcfFilter_Identity :
return "Identity";
263 case RcfFilter_OpenSsl :
return "OpenSSL";
264 case RcfFilter_ZlibCompressionStateless :
return "Zlib stateless";
265 case RcfFilter_ZlibCompressionStateful :
return "Zlib stateful";
266 case RcfFilter_SspiNtlm :
return "NTLM";
267 case RcfFilter_SspiKerberos :
return "Kerberos";
268 case RcfFilter_SspiNegotiate :
return "Negotiate";
269 case RcfFilter_SspiSchannel :
return "Schannel";
270 case RcfFilter_Xor :
return "Xor";
271 default :
return "Unknown";
275 bool isFilterRemovable(
int filterId)
279 case RcfFilter_Unknown :
return true;
280 case RcfFilter_Identity :
return true;
281 case RcfFilter_OpenSsl :
return true;
282 case RcfFilter_ZlibCompressionStateless :
return false;
283 case RcfFilter_ZlibCompressionStateful :
return false;
284 case RcfFilter_SspiNtlm :
return true;
285 case RcfFilter_SspiKerberos :
return true;
286 case RcfFilter_SspiNegotiate :
return true;
287 case RcfFilter_SspiSchannel :
return true;
288 case RcfFilter_Xor :
return true;
289 default :
return true;
295 #if defined(_MSC_VER)
296 #include <RCF/test/MiniDump.cpp>
299 #include <RCF/../../src/RCF/test/Test.cpp>
301 #endif // ! INCLUDE_RCF_TEST_TESTMINIMAL_HPP