docs: Add supported versions and fix-backport policy
[lttng-tools.git] / tests / unit / test_kernel_data.cpp
CommitLineData
897b8e23 1/*
21cf9b6b 2 * Copyright (C) 2011 EfficiOS Inc.
897b8e23 3 *
9d16b343 4 * SPDX-License-Identifier: GPL-2.0-only
897b8e23 5 *
897b8e23
DG
6 */
7
c9e313bc 8#include <common/compat/errno.hpp>
c9e313bc 9#include <common/defaults.hpp>
10a8a223 10
28ab034a
JG
11#include <bin/lttng-sessiond/trace-kernel.hpp>
12#include <stdio.h>
13#include <stdlib.h>
14#include <string.h>
23aaa19e 15#include <tap/tap.h>
28ab034a
JG
16#include <time.h>
17#include <unistd.h>
897b8e23 18
28ab034a 19#define RANDOM_STRING_LEN 11
98612240 20
23aaa19e 21/* Number of TAP tests in this file */
1c0733db 22#define NUM_TESTS 11
23aaa19e 23
48c6e03e 24#ifdef HAVE_LIBLTTNG_UST_CTL
4bd69c5f 25#include <lttng/lttng-export.h>
48c6e03e 26#include <lttng/ust-sigbus.h>
4bd69c5f 27LTTNG_EXPORT DEFINE_LTTNG_UST_SIGBUS_STATE();
48c6e03e 28#endif
e207fe73 29
28ab034a
JG
30static const char alphanum[] = "0123456789"
31 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
32 "abcdefghijklmnopqrstuvwxyz";
897b8e23
DG
33
34static struct ltt_kernel_session *kern;
98612240 35static char random_string[RANDOM_STRING_LEN];
897b8e23
DG
36
37/*
38 * Return random string of 10 characters.
98612240 39 * Not thread-safe.
897b8e23 40 */
cd9adb8b 41static char *get_random_string()
897b8e23
DG
42{
43 int i;
897b8e23 44
98612240
MD
45 for (i = 0; i < RANDOM_STRING_LEN - 1; i++) {
46 random_string[i] = alphanum[rand() % (sizeof(alphanum) - 1)];
897b8e23
DG
47 }
48
98612240 49 random_string[RANDOM_STRING_LEN - 1] = '\0';
897b8e23 50
98612240 51 return random_string;
897b8e23
DG
52}
53
cd9adb8b 54static void test_create_one_kernel_session()
897b8e23 55{
dec56f6c 56 kern = trace_kernel_create_session();
cd9adb8b 57 ok(kern != nullptr, "Create kernel session");
897b8e23 58
84a7eb73
JR
59 if (!kern) {
60 skip(1, "Kernel session is null");
61 return;
62 }
28ab034a
JG
63 ok(kern->fd == -1 && kern->metadata_stream_fd == -1 && kern->consumer_fds_sent == 0 &&
64 kern->channel_count == 0 && kern->stream_count_global == 0 &&
cd9adb8b 65 kern->metadata == nullptr,
23aaa19e 66 "Validate kernel session");
897b8e23
DG
67}
68
cd9adb8b 69static void test_create_kernel_metadata()
897b8e23 70{
cd9adb8b 71 LTTNG_ASSERT(kern != nullptr);
897b8e23 72
a4b92340 73 kern->metadata = trace_kernel_create_metadata();
cd9adb8b 74 ok(kern->metadata != nullptr, "Create kernel metadata");
23aaa19e 75
cd9adb8b 76 ok(kern->metadata->fd == -1 && kern->metadata->conf != nullptr &&
28ab034a
JG
77 kern->metadata->conf->attr.overwrite == DEFAULT_METADATA_OVERWRITE &&
78 kern->metadata->conf->attr.subbuf_size == default_get_metadata_subbuf_size() &&
79 kern->metadata->conf->attr.num_subbuf == DEFAULT_METADATA_SUBBUF_NUM &&
80 kern->metadata->conf->attr.switch_timer_interval ==
81 DEFAULT_METADATA_SWITCH_TIMER &&
82 kern->metadata->conf->attr.read_timer_interval == DEFAULT_METADATA_READ_TIMER &&
83 kern->metadata->conf->attr.output == LTTNG_EVENT_MMAP,
23aaa19e 84 "Validate kernel session metadata");
897b8e23 85
3f43a221 86 trace_kernel_destroy_metadata(kern->metadata);
897b8e23
DG
87}
88
cd9adb8b 89static void test_create_kernel_channel()
897b8e23
DG
90{
91 struct ltt_kernel_channel *chan;
92 struct lttng_channel attr;
63aaa3dc 93 struct lttng_channel_extended extended;
897b8e23 94
441c16a7 95 memset(&attr, 0, sizeof(attr));
63aaa3dc
JG
96 memset(&extended, 0, sizeof(extended));
97 attr.attr.extended.ptr = &extended;
441c16a7 98
fdd9eb17 99 chan = trace_kernel_create_channel(&attr);
cd9adb8b 100 ok(chan != nullptr, "Create kernel channel");
897b8e23 101
84a7eb73
JR
102 if (!chan) {
103 skip(1, "Channel is null");
104 return;
105 }
106
66cefebd 107 ok(chan->fd == -1 && chan->enabled && chan->stream_count == 0 &&
28ab034a 108 chan->channel->attr.overwrite == attr.attr.overwrite,
23aaa19e 109 "Validate kernel channel");
897b8e23
DG
110
111 /* Init list in order to avoid sefaults from cds_list_del */
112 CDS_INIT_LIST_HEAD(&chan->list);
3f43a221 113 trace_kernel_destroy_channel(chan);
897b8e23
DG
114}
115
cd9adb8b 116static void test_create_kernel_event()
897b8e23 117{
71a3bb01 118 enum lttng_error_code ret;
897b8e23
DG
119 struct ltt_kernel_event *event;
120 struct lttng_event ev;
121
441c16a7 122 memset(&ev, 0, sizeof(ev));
28ab034a
JG
123 ok(!lttng_strncpy(ev.name, get_random_string(), RANDOM_STRING_LEN),
124 "Validate string length");
897b8e23 125 ev.type = LTTNG_EVENT_TRACEPOINT;
441c16a7 126 ev.loglevel_type = LTTNG_EVENT_LOGLEVEL_ALL;
897b8e23 127
cd9adb8b 128 ret = trace_kernel_create_event(&ev, nullptr, nullptr, &event);
71a3bb01 129 ok(ret == LTTNG_OK, "Create kernel event");
897b8e23 130
84a7eb73
JR
131 if (!event) {
132 skip(1, "Event is null");
133 return;
134 }
135
66cefebd 136 ok(event->fd == -1 && event->enabled &&
28ab034a
JG
137 event->event->instrumentation == LTTNG_KERNEL_ABI_TRACEPOINT &&
138 strlen(event->event->name),
23aaa19e 139 "Validate kernel event");
897b8e23
DG
140
141 /* Init list in order to avoid sefaults from cds_list_del */
142 CDS_INIT_LIST_HEAD(&event->list);
3f43a221 143 trace_kernel_destroy_event(event);
897b8e23
DG
144}
145
cd9adb8b 146static void test_create_kernel_stream()
897b8e23
DG
147{
148 struct ltt_kernel_stream *stream;
149
00e2e675 150 stream = trace_kernel_create_stream("stream1", 0);
cd9adb8b 151 ok(stream != nullptr, "Create kernel stream");
897b8e23 152
84a7eb73
JR
153 if (!stream) {
154 skip(1, "Stream is null");
155 return;
156 }
157
28ab034a 158 ok(stream->fd == -1 && stream->state == 0, "Validate kernel stream");
897b8e23
DG
159
160 /* Init list in order to avoid sefaults from cds_list_del */
161 CDS_INIT_LIST_HEAD(&stream->list);
3f43a221 162 trace_kernel_destroy_stream(stream);
897b8e23
DG
163}
164
cd9adb8b 165int main()
897b8e23 166{
23aaa19e 167 plan_tests(NUM_TESTS);
897b8e23 168
e3bef725
CB
169 diag("Kernel data structure unit test");
170
23aaa19e
CB
171 test_create_one_kernel_session();
172 test_create_kernel_metadata();
173 test_create_kernel_channel();
174 test_create_kernel_event();
175 test_create_kernel_stream();
897b8e23 176
674c3e2c 177 return exit_status();
897b8e23 178}
This page took 0.070947 seconds and 4 git commands to generate.