blob: 3548b1dd673bf15d7c0605e8b5235f0e44a04bfd [file] [log] [blame]
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +02001/* simple test for the debug interface */
2/*
3 * (C) 2008, 2009 by Holger Hans Peter Freyther <zecke@selfish.org>
4 * All Rights Reserved
5 *
6 * This program is free software; you can redistribute it and/or modify
Holger Hans Peter Freyther53aa0f52017-12-09 13:03:29 +00007 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +02009 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +020016 */
17
18#include <osmocom/core/logging.h>
19#include <osmocom/core/utils.h>
20
Holger Hans Peter Freytherb7d0f462013-12-29 19:38:01 +010021#include <stdlib.h>
22
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +020023enum {
24 DRLL,
25 DCC,
26 DMM,
27};
28
Holger Hans Peter Freytherb7d0f462013-12-29 19:38:01 +010029static int filter_called = 0;
Holger Hans Peter Freyther79599ac2016-01-15 16:49:06 +010030static int select_output = 0;
Holger Hans Peter Freytherb7d0f462013-12-29 19:38:01 +010031
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +020032static const struct log_info_cat default_categories[] = {
33 [DRLL] = {
34 .name = "DRLL",
35 .description = "A-bis Radio Link Layer (RLL)",
Neels Hofmeyrf2644ae2019-11-20 04:00:29 +010036 .color = OSMO_LOGCOLOR_RED,
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +020037 .enabled = 1, .loglevel = LOGL_NOTICE,
38 },
39 [DCC] = {
40 .name = "DCC",
41 .description = "Layer3 Call Control (CC)",
Neels Hofmeyrf2644ae2019-11-20 04:00:29 +010042 .color = OSMO_LOGCOLOR_GREEN,
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +020043 .enabled = 1, .loglevel = LOGL_NOTICE,
44 },
45 [DMM] = {
Holger Hans Peter Freyther779d2f42012-09-27 16:31:29 +020046 .name = NULL,
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +020047 .description = "Layer3 Mobility Management (MM)",
Neels Hofmeyrf2644ae2019-11-20 04:00:29 +010048 .color = OSMO_LOGCOLOR_YELLOW,
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +020049 .enabled = 1, .loglevel = LOGL_NOTICE,
50 },
51};
52
Holger Hans Peter Freytherb7d0f462013-12-29 19:38:01 +010053static int test_filter(const struct log_context *ctx, struct log_target *target)
54{
55 filter_called += 1;
56 /* omit everything */
Holger Hans Peter Freyther79599ac2016-01-15 16:49:06 +010057 return select_output;
Holger Hans Peter Freytherb7d0f462013-12-29 19:38:01 +010058}
59
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +020060const struct log_info log_info = {
61 .cat = default_categories,
62 .num_cat = ARRAY_SIZE(default_categories),
Holger Hans Peter Freytherb7d0f462013-12-29 19:38:01 +010063 .filter_fn = test_filter,
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +020064};
65
Neels Hofmeyr85b42c42016-12-12 14:34:41 +010066extern struct log_info *osmo_log_info;
67
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +020068int main(int argc, char **argv)
69{
70 struct log_target *stderr_target;
71
72 log_init(&log_info, NULL);
73 stderr_target = log_target_create_stderr();
74 log_add_target(stderr_target);
75 log_set_all_filter(stderr_target, 1);
Pau Espin Pedrol01e0d3e2021-02-18 19:25:44 +010076 log_set_print_filename2(stderr_target, LOG_FILENAME_NONE);
Pau Espin Pedrol690b6612021-02-18 19:10:28 +010077 log_set_print_category_hex(stderr_target, 0);
Neels Hofmeyr9adf32f2016-12-12 14:22:59 +010078 log_set_print_category(stderr_target, 1);
79 log_set_use_color(stderr_target, 0);
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +020080
Vadim Yanitskiy27961902022-01-29 20:02:43 +060081 if (argc > 1 && !strcmp(argv[1], "wqueue"))
82 log_target_file_switch_to_wqueue(stderr_target);
83 else
84 log_target_file_switch_to_stream(stderr_target);
85
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +020086 log_parse_category_mask(stderr_target, "DRLL:DCC");
87 log_parse_category_mask(stderr_target, "DRLL");
Holger Hans Peter Freyther79599ac2016-01-15 16:49:06 +010088
89 select_output = 0;
90
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +020091 DEBUGP(DCC, "You should not see this\n");
Jacob Erlbeck64e0eb52015-11-17 11:52:26 +010092 if (log_check_level(DMM, LOGL_DEBUG) != 0)
93 fprintf(stderr, "log_check_level did not catch this case\n");
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +020094
95 log_parse_category_mask(stderr_target, "DRLL:DCC");
96 DEBUGP(DRLL, "You should see this\n");
Jacob Erlbeck64e0eb52015-11-17 11:52:26 +010097 OSMO_ASSERT(log_check_level(DRLL, LOGL_DEBUG) != 0);
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +020098 DEBUGP(DCC, "You should see this\n");
Jacob Erlbeck64e0eb52015-11-17 11:52:26 +010099 OSMO_ASSERT(log_check_level(DCC, LOGL_DEBUG) != 0);
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +0200100 DEBUGP(DMM, "You should not see this\n");
Jacob Erlbeck64e0eb52015-11-17 11:52:26 +0100101
Holger Hans Peter Freyther79599ac2016-01-15 16:49:06 +0100102 OSMO_ASSERT(log_check_level(DMM, LOGL_DEBUG) == 0);
Holger Hans Peter Freytherb7d0f462013-12-29 19:38:01 +0100103 OSMO_ASSERT(filter_called == 0);
104
105 log_set_all_filter(stderr_target, 0);
106 DEBUGP(DRLL, "You should not see this and filter is called\n");
107 OSMO_ASSERT(filter_called == 1);
Holger Hans Peter Freyther79599ac2016-01-15 16:49:06 +0100108 OSMO_ASSERT(log_check_level(DRLL, LOGL_DEBUG) == 0);
109 OSMO_ASSERT(filter_called == 2);
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +0200110
Holger Hans Peter Freyther79599ac2016-01-15 16:49:06 +0100111 DEBUGP(DRLL, "You should not see this\n");
112 OSMO_ASSERT(filter_called == 3);
113 select_output = 1;
114 DEBUGP(DRLL, "You should see this\n");
115 OSMO_ASSERT(filter_called == 5); /* called twice on output */
Neels Hofmeyr85b42c42016-12-12 14:34:41 +0100116
117 /* Make sure out-of-bounds category maps to DLGLOBAL */
118 log_parse_category_mask(stderr_target, "DLGLOBAL,1");
Neels Hofmeyrd1a145e2016-12-12 15:53:51 +0100119 /* For IDs out of bounds of the overall osmo_log_info array */
Neels Hofmeyr85b42c42016-12-12 14:34:41 +0100120 DEBUGP(osmo_log_info->num_cat + 1, "You should see this on DLGLOBAL (a)\n");
121 DEBUGP(osmo_log_info->num_cat + 100, "You should see this on DLGLOBAL (b)\n");
Neels Hofmeyra280b822016-12-12 14:42:56 +0100122 DEBUGP(osmo_log_info->num_cat, "You should see this on DLGLOBAL (c)\n");
Neels Hofmeyrd1a145e2016-12-12 15:53:51 +0100123 /* For IDs out of bounds of the user categories part */
124 DEBUGP(log_info.num_cat + 1, "You should see this on DLGLOBAL (d)\n");
125 DEBUGP(log_info.num_cat, "You should see this on DLGLOBAL (e)\n");
Neels Hofmeyr85b42c42016-12-12 14:34:41 +0100126
Neels Hofmeyra4842af2016-12-12 14:11:31 +0100127 /* Check log_set_category_filter() with internal categories */
128 log_parse_category_mask(stderr_target, "DLGLOBAL,3");
129 DEBUGP(DLGLOBAL, "You should not see this (DLGLOBAL not on DEBUG)\n");
130 log_set_category_filter(stderr_target, DLGLOBAL, 1, LOGL_DEBUG);
131 DEBUGP(DLGLOBAL, "You should see this (DLGLOBAL on DEBUG)\n");
132
Vadim Yanitskiyeff08802022-01-29 19:55:44 +0600133 /* Test printing of the filename */
134 log_set_print_filename2(stderr_target, LOG_FILENAME_BASENAME);
135
136 log_set_print_filename_pos(stderr_target, LOG_FILENAME_POS_HEADER_END);
137 DEBUGP(DLGLOBAL, "A message with source info printed first\n");
138 log_set_print_filename_pos(stderr_target, LOG_FILENAME_POS_LINE_END);
139 DEBUGP(DLGLOBAL, "A message with source info printed last\n");
140
Holger Hans Peter Freyther4b54cab2012-09-27 14:18:37 +0200141 return 0;
142}