/*
 * Copyright (c) 2006 Sendmail, Inc. and its suppliers.
 *	All rights reserved.
 *
 * By using this file, you agree to the terms and conditions set
 * forth in the LICENSE file which can be found at the top level of
 * the sendmail distribution.
 */

#include "sm/generic.h"
SM_RCSID("@(#)$Id: t-log-0.c,v 1.1 2006/04/14 23:52:50 ca Exp $")
#include "sm/assert.h"
#include "sm/error.h"
#include "sm/test.h"
#include "sm/io.h"
#include "sm/log.h"

static int Verbosity = 0;

sm_logcategory_T lcats[] =
{
	{ "init",	0 },
	{ "config",	0 },
	{ "comm",	0 },
	{ "sched",	0 },
	{ "edb",	0 },
	{ "edbc",	0 },
	{ "smtps",	0 },
	{ "smtpc",	0 },
	{ "da",		0 },
	{ "dastat",	0 },
	{ "cleanup",	0 },
	{ "control",	0 },
	{ NULL,		0 }
};

sm_logmodule_T lmods[] =
{
	{ "comm",		0 },
	{ "config",		0 },
	{ "sched",		0 },
	{ "to_smar",		0 },
	{ "from_smar",		0 },
	{ "to_smtps",		0 },
	{ "from_smtps",		0 },
	{ "to_smtpc",		0 },
	{ "from_smtpc",		0 },
	{ "defedb",		0 },
	{ "edbc",		0 },
	{ "edbs",		0 },
	{ "iqdb",		0 },
	{ "ibdb",		0 },
	{ "bounce",		0 },
	{ "dastat",		0 },
	{ "cleanup",		0 },
	{ "control",		0 },
	{ "query",		0 },
	{ "start",		0 },
	{ NULL,			0 }
};

#define LCAT_INIT		(&lcats[0])
#define LCAT_COMM		(&lcats[1])
#define LCAT_CONFIG		(&lcats[2])
#define LCAT_SCHED		(&lcats[3])
#define LCAT_EDB		(&lcats[4])
#define LCAT_EDBC		(&lcats[5])
#define LCAT_SMTPS		(&lcats[6])
#define LCAT_SMTPC		(&lcats[7])
#define LCAT_DA			(&lcats[8])
#define LCAT_DASTAT		(&lcats[9])
#define LCAT_CLEANUP		(&lcats[10])
#define LCAT_CONTROL		(&lcats[11])

/* Backwards compatibility. */
#define LCAT_GENERAL	QMGLOGCATEGORY_GENERAL

#define LMOD_COMM		(&lmods[0])
#define LMOD_CONFIG		(&lmods[1])
#define LMOD_SCHED		(&lmods[2])
#define LMOD_TO_SMAR		(&lmods[3])
#define LMOD_FROM_SMAR	(&lmods[4])
#define LMOD_TO_SMTPS	(&lmods[5])
#define LMOD_FROM_SMTPS	(&lmods[6])
#define LMOD_TO_SMTPC	(&lmods[7])
#define LMOD_FROM_SMTPC	(&lmods[8])
#define LMOD_DEFEDB		(&lmods[9])
#define LMOD_EDBC		(&lmods[10])
#define LMOD_EDBS		(&lmods[11])
#define LMOD_IQDB		(&lmods[12])
#define LMOD_IBDB		(&lmods[13])
#define LMOD_BOUNCE		(&lmods[14])
#define LMOD_DASTAT		(&lmods[15])
#define LMOD_CLEANUP		(&lmods[16])
#define LMOD_CONTROL		(&lmods[17])
#define LMOD_QUERY		(&lmods[18])
#define LMOD_START		(&lmods[19])


static sm_ret_T
test(uint loglevel)
{
	sm_ret_T ret;
	sm_log_ctx_P lctx;
	sm_logconfig_P lcfg;

	ret = sm_log_create(NULL, &lctx, &lcfg);
	SM_TEST(sm_is_success(ret));
	if (sm_is_err(ret))
	{
		sm_io_fprintf(smioerr,
			"sev=ERROR, sm_log_create=%m\n", ret);
		goto error;
	}
	ret = sm_log_setfp_fd(lctx, smiolog, SMIOLOG_FILENO);
	SM_TEST(sm_is_success(ret));
	if (sm_is_err(ret))
	{
		sm_io_fprintf(smioerr,
			"sev=ERROR, sm_log_setfp=%m\n", ret);
		goto error;
	}
	ret = sm_log_setdebuglevel(lctx, loglevel);
	SM_TEST(sm_is_success(ret));
	if (sm_is_err(ret))
	{
		sm_io_fprintf(smioerr,
			"sev=ERROR, sm_log_setdebuglevel=%m\n",
			ret);
		goto error;
	}
	ret = sm_log_registercategories(lctx, lcats);
	SM_TEST(sm_is_success(ret));
	ret = sm_log_registermodules(lctx, lmods);
	SM_TEST(sm_is_success(ret));

	ret = sm_log_cat_set_level(lctx, "sched", 8);
	SM_TEST(sm_is_success(ret));
	SM_TEST(LCAT_SCHED->smlc_log_level == 8);

	ret = sm_log_mod_set_level(lctx, "sched", 7);
	SM_TEST(sm_is_success(ret));
	SM_TEST(LMOD_SCHED->smlm_log_level == 7);

	ret = sm_log_cat_set_level(lctx, "nocat", 8);
	SM_TEST(sm_is_error(ret));

	ret = sm_log_mod_set_level(lctx, "nomod", 7);
	SM_TEST(sm_is_error(ret));

	return ret;

  error:
	return ret;
}

int
main(int argc, char *argv[])
{
	int c;
	uint loglevel;

	loglevel = 9;
	while ((c = getopt(argc, argv, "V")) != -1)
	{
		switch (c)
		{
		  case 'V':
			++Verbosity;
			break;
		}
	}
	sm_test_begin(argc, argv, "test log");
	argc -= optind;
	argv += optind;
	test(loglevel);
	return sm_test_end();
}


syntax highlighted by Code2HTML, v. 0.9.1