You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
379 lines
10 KiB
379 lines
10 KiB
/* /////////////////////////////////////////////////////////////////////////
|
|
* File: test/unit/test.unit.util.onbailout/test.unit.util.onbailout.cpp
|
|
*
|
|
* Purpose: Implementation file for the test.unit.util.onbailout project.
|
|
*
|
|
* Created: 29th April 2008
|
|
* Updated: 6th August 2012
|
|
*
|
|
* Status: Wizard-generated
|
|
*
|
|
* License: (Licensed under the Synesis Software Open License)
|
|
*
|
|
* Copyright (c) 2008-2012, Synesis Software Pty Ltd.
|
|
* All rights reserved.
|
|
*
|
|
* www: http://www.synesis.com.au/software
|
|
*
|
|
* ////////////////////////////////////////////////////////////////////// */
|
|
|
|
|
|
#include <pantheios/util/test/compiler_warnings_suppression.first_include.h>
|
|
|
|
#define PANTHEIOS_NO_NAMESPACE
|
|
|
|
#define PANTHEIOS_BAILOUT_NO_OPERATING_SYSTEM_SPECIFICS
|
|
#define PANTHEIOS_BAILOUT_NO_UNIX_SYSLOG
|
|
#define PANTHEIOS_BAILOUT_NO_WINDOWS_EVENTLOG
|
|
|
|
#ifdef UNIX
|
|
# define _WINSOCKAPI_
|
|
# define _WINSOCK2API_
|
|
# define _WINSOCK2_H
|
|
#endif
|
|
|
|
#include <pantheios/pantheios.h>
|
|
#include <pantheios/internal/lean.h>
|
|
#include <pantheios/init_codes.h>
|
|
|
|
#include <xtests/xtests.h>
|
|
|
|
#include <shwild/shwild.hpp>
|
|
|
|
#include <stlsoft/shims/access/string/fwd.h>
|
|
#include <stlsoft/shims/access/string/std/basic_string.hpp>
|
|
#include <platformstl/platformstl.h>
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <stdlib.h>
|
|
#if defined(PLATFORMSTL_OS_IS_UNIX)
|
|
# undef _WINSOCKAPI_
|
|
# undef _WINSOCK2API_
|
|
# undef _WINSOCK2_H
|
|
# include <sys/time.h> // for gettimeofday()
|
|
#endif /* PLATFORMSTL_OS_IS_UNIX */
|
|
|
|
#include <pantheios/util/test/compiler_warnings_suppression.last_include.h>
|
|
|
|
/* /////////////////////////////////////////////////////////////////////////
|
|
* xTests extensions
|
|
*/
|
|
|
|
#define XTESTS_TEST_MULTIBYTE_STRING_MATCHES(pattern, value) \
|
|
\
|
|
((0 == shwild::match(pattern, stlsoft::c_str_ptr(value), 0)) \
|
|
? XTESTS_TEST_PASSED() \
|
|
: XTESTS_TEST_FAIL_WITH_QUALIFIER(std::string("the actual value did not match the pattern '") + pattern + "'", value))
|
|
|
|
/* /////////////////////////////////////////////////////////////////////////
|
|
* Forward declarations
|
|
*/
|
|
|
|
namespace
|
|
{
|
|
|
|
static void test_1_01();
|
|
static void test_1_02();
|
|
static void test_1_03();
|
|
static void test_1_04();
|
|
static void test_1_05();
|
|
static void test_1_06();
|
|
static void test_1_07();
|
|
static void test_1_08();
|
|
static void test_1_09();
|
|
static void test_1_10();
|
|
static void test_1_11();
|
|
static void test_1_12();
|
|
|
|
} // anonymous namespace
|
|
|
|
/* /////////////////////////////////////////////////////////////////////////
|
|
* Classes
|
|
*/
|
|
|
|
namespace
|
|
{
|
|
|
|
class OnBailOutReceiver
|
|
{
|
|
public:
|
|
typedef OnBailOutReceiver class_type;
|
|
typedef std::string string_type;
|
|
struct entry_type
|
|
{
|
|
string_type message;
|
|
string_type processId;
|
|
string_type qualifier;
|
|
|
|
entry_type(string_type const& msg, string_type const& prId, string_type const& qual)
|
|
: message(msg)
|
|
, processId(prId)
|
|
, qualifier(qual)
|
|
{}
|
|
};
|
|
typedef std::vector<entry_type> entries_type;
|
|
|
|
public:
|
|
void Clear()
|
|
{
|
|
entries_type().swap(ConsoleResults);
|
|
#if defined(PLATFORMSTL_OS_IS_WINDOWS) && \
|
|
!defined(PANTHEIOS_BAILOUT_NO_WINDOWS_EVENTLOG)
|
|
entries_type().swap(EventLogResults);
|
|
#endif /* PLATFORMSTL_OS_IS_WINDOWS */
|
|
entries_type().swap(LoggingBailoutTxtResults);
|
|
#if defined(PLATFORMSTL_OS_IS_WINDOWS)
|
|
entries_type().swap(OutputDebugStringResults);
|
|
#endif /* PLATFORMSTL_OS_IS_WINDOWS */
|
|
#if defined(PLATFORMSTL_OS_IS_UNIX) && \
|
|
!defined(PANTHEIOS_BAILOUT_NO_UNIX_SYSLOG)
|
|
entries_type().swap(SyslogResults);
|
|
#endif /* PLATFORMSTL_OS_IS_UNIX */
|
|
}
|
|
|
|
void onfprintf(string_type const& msg)
|
|
{
|
|
ConsoleResults.push_back(entry_type(msg, "", ""));
|
|
}
|
|
|
|
#if defined(PLATFORMSTL_OS_IS_WINDOWS)
|
|
void onOutputDebugString(char const* s)
|
|
{
|
|
OutputDebugStringResults.push_back(entry_type(s, "", ""));
|
|
}
|
|
#endif /* PLATFORMSTL_OS_IS_WINDOWS */
|
|
|
|
public:
|
|
entries_type ConsoleResults;
|
|
#if defined(PLATFORMSTL_OS_IS_WINDOWS) && \
|
|
!defined(PANTHEIOS_BAILOUT_NO_WINDOWS_EVENTLOG)
|
|
entries_type EventLogResults;
|
|
#endif /* PLATFORMSTL_OS_IS_WINDOWS */
|
|
entries_type LoggingBailoutTxtResults;
|
|
#if defined(PLATFORMSTL_OS_IS_WINDOWS)
|
|
entries_type OutputDebugStringResults;
|
|
#endif /* PLATFORMSTL_OS_IS_WINDOWS */
|
|
#if defined(PLATFORMSTL_OS_IS_UNIX) && \
|
|
!defined(PANTHEIOS_BAILOUT_NO_UNIX_SYSLOG)
|
|
entries_type SyslogResults;
|
|
#endif /* PLATFORMSTL_OS_IS_UNIX */
|
|
};
|
|
|
|
OnBailOutReceiver receiver;
|
|
|
|
} // anonymous namespace
|
|
|
|
/* ////////////////////////////////////////////////////////////////////// */
|
|
|
|
PANTHEIOS_EXTERN_C PAN_CHAR_T const PANTHEIOS_FE_PROCESS_IDENTITY[] = PANTHEIOS_LITERAL_STRING("test.unit.util.onbailout");
|
|
|
|
/* ////////////////////////////////////////////////////////////////////// */
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
int retCode = EXIT_SUCCESS;
|
|
int verbosity = 2;
|
|
|
|
XTESTS_COMMANDLINE_PARSEVERBOSITY(argc, argv, &verbosity);
|
|
|
|
if(XTESTS_START_RUNNER(PANTHEIOS_FE_PROCESS_IDENTITY, verbosity))
|
|
{
|
|
XTESTS_RUN_CASE(test_1_01);
|
|
XTESTS_RUN_CASE(test_1_02);
|
|
XTESTS_RUN_CASE(test_1_03);
|
|
XTESTS_RUN_CASE(test_1_04);
|
|
XTESTS_RUN_CASE(test_1_05);
|
|
XTESTS_RUN_CASE(test_1_06);
|
|
XTESTS_RUN_CASE(test_1_07);
|
|
XTESTS_RUN_CASE(test_1_08);
|
|
XTESTS_RUN_CASE(test_1_09);
|
|
XTESTS_RUN_CASE(test_1_10);
|
|
XTESTS_RUN_CASE(test_1_11);
|
|
XTESTS_RUN_CASE(test_1_12);
|
|
|
|
XTESTS_PRINT_RESULTS();
|
|
|
|
XTESTS_END_RUNNER_UPDATE_EXITCODE(&retCode);
|
|
}
|
|
|
|
return retCode;
|
|
}
|
|
|
|
/* ////////////////////////////////////////////////////////////////////// */
|
|
|
|
namespace
|
|
{
|
|
|
|
static void test_1_01()
|
|
{
|
|
receiver.Clear();
|
|
|
|
XTESTS_TEST_INTEGER_EQUAL(0u, receiver.ConsoleResults.size());
|
|
#if defined(PLATFORMSTL_OS_IS_WINDOWS) && \
|
|
!defined(PANTHEIOS_BAILOUT_NO_WINDOWS_EVENTLOG)
|
|
XTESTS_TEST_INTEGER_EQUAL(0u, receiver.EventLogResults.size());
|
|
#endif /* PLATFORMSTL_OS_IS_WINDOWS */
|
|
XTESTS_TEST_INTEGER_EQUAL(0u, receiver.LoggingBailoutTxtResults.size());
|
|
#if defined(PLATFORMSTL_OS_IS_WINDOWS)
|
|
XTESTS_TEST_INTEGER_EQUAL(0u, receiver.OutputDebugStringResults.size());
|
|
#endif /* PLATFORMSTL_OS_IS_WINDOWS */
|
|
#if defined(PLATFORMSTL_OS_IS_UNIX) && \
|
|
!defined(PANTHEIOS_BAILOUT_NO_UNIX_SYSLOG)
|
|
XTESTS_TEST_INTEGER_EQUAL(0u, receiver.SyslogResults.size());
|
|
#endif /* PLATFORMSTL_OS_IS_UNIX */
|
|
}
|
|
|
|
static void test_1_02()
|
|
{
|
|
receiver.Clear();
|
|
|
|
const char message[] = "hello";
|
|
const char pattern[] = "2[0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9].[0-9][0-9][0-9]: hello";
|
|
|
|
pantheios_onBailOut3(PANTHEIOS_SEV_DEBUG, message, "process-#1");
|
|
|
|
XTESTS_TEST_INTEGER_EQUAL(1u, receiver.ConsoleResults.size());
|
|
XTESTS_TEST_MULTIBYTE_STRING_MATCHES(pattern, receiver.ConsoleResults[0].message);
|
|
#if defined(PLATFORMSTL_OS_IS_WINDOWS) && \
|
|
!defined(PANTHEIOS_BAILOUT_NO_WINDOWS_EVENTLOG)
|
|
XTESTS_TEST_INTEGER_EQUAL(1u, receiver.EventLogResults.size());
|
|
#endif /* PLATFORMSTL_OS_IS_WINDOWS */
|
|
// XTESTS_TEST_INTEGER_EQUAL(1u, receiver.LoggingBailoutTxtResults.size());
|
|
#if defined(PLATFORMSTL_OS_IS_WINDOWS)
|
|
XTESTS_TEST_INTEGER_EQUAL(1u, receiver.OutputDebugStringResults.size());
|
|
XTESTS_TEST_MULTIBYTE_STRING_MATCHES(pattern, receiver.ConsoleResults[0].message);
|
|
#endif /* PLATFORMSTL_OS_IS_WINDOWS */
|
|
#if defined(PLATFORMSTL_OS_IS_UNIX) && \
|
|
!defined(PANTHEIOS_BAILOUT_NO_UNIX_SYSLOG)
|
|
XTESTS_TEST_INTEGER_EQUAL(1u, receiver.SyslogResults.size());
|
|
#endif /* PLATFORMSTL_OS_IS_UNIX */
|
|
}
|
|
|
|
static void test_1_03()
|
|
{
|
|
}
|
|
|
|
static void test_1_04()
|
|
{
|
|
}
|
|
|
|
static void test_1_05()
|
|
{
|
|
}
|
|
|
|
static void test_1_06()
|
|
{
|
|
}
|
|
|
|
static void test_1_07()
|
|
{
|
|
}
|
|
|
|
static void test_1_08()
|
|
{
|
|
}
|
|
|
|
static void test_1_09()
|
|
{
|
|
}
|
|
|
|
static void test_1_10()
|
|
{
|
|
}
|
|
|
|
static void test_1_11()
|
|
{
|
|
}
|
|
|
|
static void test_1_12()
|
|
{
|
|
}
|
|
|
|
} // anonymous namespace
|
|
|
|
/* ////////////////////////////////////////////////////////////////////// */
|
|
|
|
#include <stdio.h>
|
|
|
|
#if defined(PLATFORMSTL_OS_IS_UNIX)
|
|
|
|
# include <unistd.h>
|
|
|
|
# define fprintf bailout_test_fprintf_
|
|
void bailout_test_fprintf_(FILE*, char const*, int, char const*);
|
|
|
|
# define fopen(fileName, mode) bailout_test_fopen_()
|
|
FILE* bailout_test_fopen_(void);
|
|
|
|
#endif /* PLATFORMSTL_OS_IS_UNIX */
|
|
|
|
#if defined(PLATFORMSTL_OS_IS_WINDOWS)
|
|
|
|
# include <windows.h>
|
|
|
|
# define OutputDebugStringA bailout_test_OutputDebugStringA_
|
|
void bailout_test_OutputDebugStringA_(char const*);
|
|
|
|
# define WriteFile bailout_test_WriteFile_
|
|
void bailout_test_WriteFile_(FILE*, char const*, DWORD, DWORD*, void*);
|
|
void bailout_test_WriteFile_(HANDLE, char const*, DWORD, DWORD*, void*);
|
|
|
|
# define GetStdHandle(x) bailout_test_GetStdHandle_()
|
|
FILE* bailout_test_GetStdHandle_(void);
|
|
|
|
# define CreateFileA bailout_test_CreateFileA
|
|
HANDLE bailout_test_CreateFileA(char const*, DWORD, DWORD, void*, DWORD, DWORD, void*);
|
|
|
|
#endif /* PLATFORMSTL_OS_IS_WINDOWS */
|
|
|
|
#include <../src/util/bailout.c>
|
|
#include <../src/util/snprintf.c>
|
|
|
|
/* ////////////////////////////////////////////////////////////////////// */
|
|
|
|
#if defined(PLATFORMSTL_OS_IS_WINDOWS)
|
|
|
|
void bailout_test_OutputDebugStringA_(char const* msg)
|
|
{
|
|
receiver.onOutputDebugString(msg);
|
|
}
|
|
|
|
void bailout_test_WriteFile_(FILE*, char const* msg, DWORD cchMsg, DWORD*, void*)
|
|
{
|
|
receiver.onfprintf(OnBailOutReceiver::string_type(msg, cchMsg - 2));
|
|
}
|
|
|
|
void bailout_test_WriteFile_(HANDLE, char const*, DWORD, DWORD*, void*)
|
|
{
|
|
}
|
|
|
|
FILE* bailout_test_GetStdHandle_(void)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
HANDLE bailout_test_CreateFileA(char const*, DWORD, DWORD, void*, DWORD, DWORD, void*)
|
|
{
|
|
return INVALID_HANDLE_VALUE;
|
|
}
|
|
|
|
#endif /* PLATFORMSTL_OS_IS_WINDOWS */
|
|
|
|
#if defined(PLATFORMSTL_OS_IS_UNIX)
|
|
|
|
void bailout_test_fprintf_(FILE*, char const*, int cchMsg, char const* msg)
|
|
{
|
|
receiver.onfprintf(OnBailOutReceiver::string_type(msg, size_t(cchMsg)));
|
|
}
|
|
|
|
FILE* bailout_test_fopen_(void)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
#endif /* PLATFORMSTL_OS_IS_UNIX */
|
|
|
|
|
|
/* ////////////////////////////////////////////////////////////////////// */
|