Blame winpr/libwinpr/utils/test/TestWLogCallback.c

Packit 1fb8d4
#include <winpr/crt.h>
Packit 1fb8d4
#include <winpr/tchar.h>
Packit 1fb8d4
#include <winpr/path.h>
Packit 1fb8d4
#include <winpr/wlog.h>
Packit 1fb8d4
Packit 1fb8d4
typedef struct 
Packit 1fb8d4
{
Packit 1fb8d4
	UINT32 level;
Packit 1fb8d4
	char *msg;
Packit 1fb8d4
	char *channel;
Packit 1fb8d4
} test_t;
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
static const char *function = NULL;
Packit 1fb8d4
static const char *channels[] = 
Packit 1fb8d4
{
Packit 1fb8d4
	"com.test.channelA",
Packit 1fb8d4
	"com.test.channelB"
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
static const test_t messages[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{WLOG_INFO, "this is a test", "com.test.channelA"},
Packit 1fb8d4
	{WLOG_INFO, "Just some info", "com.test.channelB"},
Packit 1fb8d4
	{WLOG_WARN, "this is a %dnd %s", "com.test.channelA"},
Packit 1fb8d4
	{WLOG_WARN, "we're warning a %dnd %s", "com.test.channelB"},
Packit 1fb8d4
	{WLOG_ERROR, "this is an error", "com.test.channelA"},
Packit 1fb8d4
	{WLOG_ERROR, "we've got an error", "com.test.channelB"},
Packit 1fb8d4
	{WLOG_TRACE, "this is a trace output", "com.test.channelA"},
Packit 1fb8d4
	{WLOG_TRACE, "leaving a trace behind", "com.test.channelB"}
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
static BOOL success = TRUE;
Packit 1fb8d4
static int pos = 0;
Packit 1fb8d4
Packit 1fb8d4
static BOOL check(const wLogMessage *msg)
Packit 1fb8d4
{
Packit 1fb8d4
	BOOL rc = TRUE;
Packit 1fb8d4
	if (!msg)
Packit 1fb8d4
		rc = FALSE;
Packit 1fb8d4
	else if (strcmp(msg->FileName, __FILE__))
Packit 1fb8d4
		rc = FALSE;
Packit 1fb8d4
	else if (strcmp(msg->FunctionName, function))
Packit 1fb8d4
		rc = FALSE;
Packit 1fb8d4
	else if (strcmp(msg->PrefixString, messages[pos].channel))
Packit 1fb8d4
		rc = FALSE;
Packit 1fb8d4
	else if (msg->Level != messages[pos].level)
Packit 1fb8d4
		rc = FALSE;
Packit 1fb8d4
	else if (strcmp(msg->FormatString, messages[pos].msg))
Packit 1fb8d4
		rc = FALSE;
Packit 1fb8d4
	pos++;
Packit 1fb8d4
Packit 1fb8d4
	if (!rc)
Packit 1fb8d4
	{
Packit 1fb8d4
		fprintf(stderr, "Test failed!\n");
Packit 1fb8d4
		success = FALSE;
Packit 1fb8d4
	}
Packit 1fb8d4
	return rc;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL CallbackAppenderMessage(const wLogMessage *msg)
Packit 1fb8d4
{
Packit 1fb8d4
	check(msg);
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL CallbackAppenderData(const wLogMessage *msg)
Packit 1fb8d4
{
Packit 1fb8d4
	fprintf(stdout, "%s\n", __FUNCTION__);
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL CallbackAppenderImage(const wLogMessage *msg)
Packit 1fb8d4
{
Packit 1fb8d4
	fprintf(stdout, "%s\n", __FUNCTION__);
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL CallbackAppenderPackage(const wLogMessage *msg)
Packit 1fb8d4
{
Packit 1fb8d4
	fprintf(stdout, "%s\n", __FUNCTION__);
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
int TestWLogCallback(int argc, char* argv[])
Packit 1fb8d4
{
Packit 1fb8d4
	wLog* root;
Packit 1fb8d4
	wLog* logA;
Packit 1fb8d4
	wLog* logB;
Packit 1fb8d4
	wLogLayout* layout;
Packit 1fb8d4
	wLogAppender* appender;
Packit 1fb8d4
	wLogCallbacks callbacks;
Packit 1fb8d4
Packit 1fb8d4
	function = __FUNCTION__;
Packit 1fb8d4
Packit 1fb8d4
	root = WLog_GetRoot();
Packit 1fb8d4
Packit 1fb8d4
	WLog_SetLogAppenderType(root, WLOG_APPENDER_CALLBACK);
Packit 1fb8d4
Packit 1fb8d4
	appender = WLog_GetLogAppender(root);
Packit 1fb8d4
Packit 1fb8d4
	callbacks.data = CallbackAppenderData;
Packit 1fb8d4
	callbacks.image = CallbackAppenderImage;
Packit 1fb8d4
	callbacks.message = CallbackAppenderMessage;
Packit 1fb8d4
	callbacks.package = CallbackAppenderPackage;
Packit 1fb8d4
Packit 1fb8d4
	if (!WLog_ConfigureAppender(appender, "callbacks", (void *)&callbacks))
Packit 1fb8d4
		return -1;
Packit 1fb8d4
Packit 1fb8d4
	layout = WLog_GetLogLayout(root);
Packit 1fb8d4
	WLog_Layout_SetPrefixFormat(root, layout, "%mn");
Packit 1fb8d4
Packit 1fb8d4
	WLog_OpenAppender(root);
Packit 1fb8d4
Packit 1fb8d4
	logA = WLog_Get(channels[0]);
Packit 1fb8d4
	logB = WLog_Get(channels[1]);
Packit 1fb8d4
Packit 1fb8d4
	WLog_SetLogLevel(logA, WLOG_TRACE);
Packit 1fb8d4
	WLog_SetLogLevel(logB, WLOG_TRACE);
Packit 1fb8d4
Packit 1fb8d4
	WLog_Print(logA, messages[0].level, messages[0].msg);
Packit 1fb8d4
	WLog_Print(logB, messages[1].level, messages[1].msg);
Packit 1fb8d4
	WLog_Print(logA, messages[2].level, messages[2].msg, 2, "test");
Packit 1fb8d4
	WLog_Print(logB, messages[3].level, messages[3].msg, 2, "time");
Packit 1fb8d4
	WLog_Print(logA, messages[4].level, messages[4].msg);
Packit 1fb8d4
	WLog_Print(logB, messages[5].level, messages[5].msg);
Packit 1fb8d4
	WLog_Print(logA, messages[6].level, messages[6].msg);
Packit 1fb8d4
	WLog_Print(logB, messages[7].level, messages[7].msg);
Packit 1fb8d4
Packit 1fb8d4
	WLog_CloseAppender(root);
Packit 1fb8d4
Packit 1fb8d4
	return success ? 0 : -1;
Packit 1fb8d4
}
Packit 1fb8d4