vscode: Add configurations to run the executables under the debugger
[lttng-tools.git] / tests / unit / test_log_level_rule.cpp
CommitLineData
85b05318
JR
1/*
2 * Unit tests for the log level rule API.
3 *
4 * Copyright (C) 2020 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
5 *
6 * SPDX-License-Identifier: LGPL-2.1-only
7 *
8 */
9
c9e313bc
SM
10#include <common/payload-view.hpp>
11#include <common/payload.hpp>
28ab034a 12
c9e313bc 13#include <lttng/log-level-rule-internal.hpp>
85b05318
JR
14#include <lttng/log-level-rule.h>
15
28ab034a
JG
16#include <inttypes.h>
17#include <stdio.h>
18#include <string.h>
19#include <tap/tap.h>
20#include <unistd.h>
21
85b05318
JR
22/* For error.h. */
23int lttng_opt_quiet = 1;
24int lttng_opt_verbose;
25int lttng_opt_mi;
26
27#define NUM_TESTS 29
28
cd9adb8b 29static void test_log_level_rule_error()
85b05318
JR
30{
31 int level = 9000;
28ab034a 32 struct lttng_log_level_rule *exactly = lttng_log_level_rule_exactly_create(level);
85b05318 33 struct lttng_log_level_rule *at_least_as_severe =
28ab034a
JG
34 lttng_log_level_rule_at_least_as_severe_as_create(level);
35
cd9adb8b 36 ok(lttng_log_level_rule_get_type(nullptr) == LTTNG_LOG_LEVEL_RULE_TYPE_UNKNOWN,
28ab034a
JG
37 "Get type on invalid pointer");
38
cd9adb8b 39 ok(lttng_log_level_rule_exactly_get_level(nullptr, nullptr) ==
28ab034a
JG
40 LTTNG_LOG_LEVEL_RULE_STATUS_INVALID,
41 "lttng_log_level_rule_exactly_get_level (NULL, NULL) returns invalid");
cd9adb8b 42 ok(lttng_log_level_rule_exactly_get_level(exactly, nullptr) ==
28ab034a
JG
43 LTTNG_LOG_LEVEL_RULE_STATUS_INVALID,
44 "lttng_log_level_rule_exactly_get_level (valid, NULL) returns invalid");
cd9adb8b 45 ok(lttng_log_level_rule_exactly_get_level(nullptr, &level) ==
28ab034a
JG
46 LTTNG_LOG_LEVEL_RULE_STATUS_INVALID,
47 "lttng_log_level_rule_exactly_get_level (NULL, valid) returns invalid");
48
cd9adb8b 49 ok(lttng_log_level_rule_at_least_as_severe_as_get_level(nullptr, nullptr) ==
28ab034a
JG
50 LTTNG_LOG_LEVEL_RULE_STATUS_INVALID,
51 "lttng_log_level_rule_at_least_as_severe_as_get_level (NULL, NULL) returns invalid");
cd9adb8b 52 ok(lttng_log_level_rule_at_least_as_severe_as_get_level(exactly, nullptr) ==
28ab034a
JG
53 LTTNG_LOG_LEVEL_RULE_STATUS_INVALID,
54 "lttng_log_level_rule_at_least_as_severe_as_get_level (valid, NULL) returns invalid");
cd9adb8b 55 ok(lttng_log_level_rule_at_least_as_severe_as_get_level(nullptr, &level) ==
28ab034a
JG
56 LTTNG_LOG_LEVEL_RULE_STATUS_INVALID,
57 "lttng_log_level_rule_at_least_as_severe_as_get_level (NULL, valid) returns invalid");
85b05318
JR
58
59 lttng_log_level_rule_destroy(exactly);
60 lttng_log_level_rule_destroy(at_least_as_severe);
61}
62
28ab034a 63static void test_log_level_rule_serialize_deserialize(const struct lttng_log_level_rule *rule)
85b05318 64{
cd9adb8b 65 struct lttng_log_level_rule *log_level_rule_from_buffer = nullptr;
85b05318
JR
66 struct lttng_payload payload;
67
68 lttng_payload_init(&payload);
69
70 ok(lttng_log_level_rule_serialize(rule, &payload) == 0, "Serializing.");
71
72 {
28ab034a 73 struct lttng_payload_view view = lttng_payload_view_from_payload(&payload, 0, -1);
85b05318 74
28ab034a
JG
75 ok(lttng_log_level_rule_create_from_payload(&view, &log_level_rule_from_buffer) > 0,
76 "Deserializing.");
85b05318
JR
77 }
78
28ab034a
JG
79 ok(lttng_log_level_rule_is_equal(rule, log_level_rule_from_buffer),
80 "Serialized and from buffer are equal");
85b05318
JR
81
82 lttng_log_level_rule_destroy(log_level_rule_from_buffer);
17d3ad99 83 lttng_payload_reset(&payload);
85b05318
JR
84}
85
cd9adb8b 86static void test_log_level_rule_is_equal_exactly()
85b05318
JR
87{
88 int level = 9000, no_eq_level = 420;
89 struct lttng_log_level_rule *a, *b, *different_level, *different_type;
90
91 /* Identical log level rules. */
92 a = lttng_log_level_rule_exactly_create(level);
93 b = lttng_log_level_rule_exactly_create(level);
94
95 /* Different level, same type. */
96 different_level = lttng_log_level_rule_exactly_create(no_eq_level);
97
98 /* Different type. */
99 different_type = lttng_log_level_rule_at_least_as_severe_as_create(level);
100
a0377dfe 101 LTTNG_ASSERT(a && b && different_level && different_type);
85b05318
JR
102
103 ok(lttng_log_level_rule_is_equal(a, a), "Same object is equal");
104 ok(lttng_log_level_rule_is_equal(a, b), "Object a and b are equal");
28ab034a
JG
105 ok(!lttng_log_level_rule_is_equal(a, different_level),
106 " Object of different levels are not equal");
107 ok(!lttng_log_level_rule_is_equal(a, different_type),
108 " Object of different types are not equal");
85b05318
JR
109
110 lttng_log_level_rule_destroy(a);
111 lttng_log_level_rule_destroy(b);
112 lttng_log_level_rule_destroy(different_level);
113 lttng_log_level_rule_destroy(different_type);
114}
115
cd9adb8b 116static void test_log_level_rule_is_equal_at_least_as_severe_as()
85b05318
JR
117{
118 int level = 9000, no_eq_level = 420;
119 struct lttng_log_level_rule *a, *b, *different_level, *different_type;
120
121 /* Identical log level rules. */
122 a = lttng_log_level_rule_at_least_as_severe_as_create(level);
123 b = lttng_log_level_rule_at_least_as_severe_as_create(level);
124
125 /* Different level, same type. */
126 different_level = lttng_log_level_rule_at_least_as_severe_as_create(no_eq_level);
127
128 /* Different type. */
129 different_type = lttng_log_level_rule_exactly_create(level);
130
a0377dfe 131 LTTNG_ASSERT(a && b && different_level && different_type);
85b05318
JR
132
133 ok(lttng_log_level_rule_is_equal(a, a), "Same object is equal");
134 ok(lttng_log_level_rule_is_equal(a, b), "Object a and b are equal");
28ab034a
JG
135 ok(!lttng_log_level_rule_is_equal(a, different_level),
136 " Object of different levels are not equal");
137 ok(!lttng_log_level_rule_is_equal(a, different_type),
138 " Object of different types are not equal");
85b05318
JR
139
140 lttng_log_level_rule_destroy(a);
141 lttng_log_level_rule_destroy(b);
142 lttng_log_level_rule_destroy(different_level);
143 lttng_log_level_rule_destroy(different_type);
144}
145
cd9adb8b 146static void test_log_level_rule_exactly()
85b05318
JR
147{
148 int level = 9000;
149 int _level;
cd9adb8b 150 struct lttng_log_level_rule *exactly = nullptr;
85b05318
JR
151 enum lttng_log_level_rule_status status;
152
153 exactly = lttng_log_level_rule_exactly_create(level);
154
155 ok(exactly, "Log level exactly allocated");
28ab034a
JG
156 ok(lttng_log_level_rule_get_type(exactly) == LTTNG_LOG_LEVEL_RULE_TYPE_EXACTLY,
157 "Log level rule exactly type");
85b05318
JR
158
159 status = lttng_log_level_rule_exactly_get_level(exactly, &_level);
160 ok(status == LTTNG_LOG_LEVEL_RULE_STATUS_OK, "Get the level");
161 ok(_level == level, "Level property is valid");
162
163 test_log_level_rule_is_equal_exactly();
164 test_log_level_rule_serialize_deserialize(exactly);
f6acdcb9 165 lttng_log_level_rule_destroy(exactly);
85b05318
JR
166}
167
cd9adb8b 168static void test_log_level_rule_at_least_as_severe_as()
85b05318
JR
169{
170 int level = 9000;
171 int _level;
cd9adb8b 172 struct lttng_log_level_rule *at_least_as_severe_as = nullptr;
85b05318
JR
173 enum lttng_log_level_rule_status status;
174
175 at_least_as_severe_as = lttng_log_level_rule_at_least_as_severe_as_create(level);
176
177 ok(at_least_as_severe_as, "Log level at_least_as_severe_as allocated");
178 ok(lttng_log_level_rule_get_type(at_least_as_severe_as) ==
28ab034a
JG
179 LTTNG_LOG_LEVEL_RULE_TYPE_AT_LEAST_AS_SEVERE_AS,
180 "Log level rule at_least_as_severe_as type");
85b05318 181
28ab034a
JG
182 status = lttng_log_level_rule_at_least_as_severe_as_get_level(at_least_as_severe_as,
183 &_level);
85b05318
JR
184 ok(status == LTTNG_LOG_LEVEL_RULE_STATUS_OK, "Get the level");
185 ok(_level == level, "Level property is valid");
186
187 test_log_level_rule_is_equal_at_least_as_severe_as();
188 test_log_level_rule_serialize_deserialize(at_least_as_severe_as);
f6acdcb9 189 lttng_log_level_rule_destroy(at_least_as_severe_as);
85b05318
JR
190}
191
cd9adb8b 192int main()
85b05318
JR
193{
194 plan_tests(NUM_TESTS);
195 test_log_level_rule_exactly();
196 test_log_level_rule_at_least_as_severe_as();
197 test_log_level_rule_error();
198 return exit_status();
199}
This page took 0.050496 seconds and 4 git commands to generate.