Base lttng_trace_format_descriptor
[lttng-tools.git] / tests / unit / test_trace_format_descriptor.cpp
1 /*
2 * Unit tests for the trace format descriptor API.
3 *
4 * Copyright (C) 2022 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
5 *
6 * SPDX-License-Identifier: MIT
7 *
8 */
9
10 #include <inttypes.h>
11 #include <stdio.h>
12 #include <string.h>
13 #include <unistd.h>
14
15 #include <tap/tap.h>
16
17 #include <common/payload-view.hpp>
18 #include <common/payload.hpp>
19 #include <lttng/trace-format-descriptor-internal.hpp>
20 #include <lttng/trace-format-descriptor.h>
21
22 /* For error.h */
23 int lttng_opt_quiet = 1;
24 int lttng_opt_verbose;
25 int lttng_opt_mi;
26
27 #define NUM_TESTS 28
28
29 static void test_trace_format_descriptor_base(void)
30 {
31 lttng_trace_format_descriptor_status status;
32 uint64_t major;
33 uint64_t minor;
34
35 lttng_trace_format_descriptor *ctf1 = lttng_trace_format_ctf_1_descriptor_create();
36 lttng_trace_format_descriptor *ctf2 = lttng_trace_format_ctf_2_descriptor_create();
37 ok1(ctf1);
38 ok1(ctf2);
39
40 /* Ctf 1 */
41 status = lttng_trace_format_ctf_1_get_version(nullptr, nullptr, nullptr);
42 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_INVALID);
43 status = lttng_trace_format_ctf_1_get_version(nullptr, nullptr, &minor);
44 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_INVALID);
45 status = lttng_trace_format_ctf_1_get_version(nullptr, &major, nullptr);
46 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_INVALID);
47 status = lttng_trace_format_ctf_1_get_version(nullptr, &major, &minor);
48 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_INVALID);
49 status = lttng_trace_format_ctf_1_get_version(ctf1, nullptr, nullptr);
50 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_INVALID);
51 status = lttng_trace_format_ctf_1_get_version(ctf1, nullptr, &minor);
52 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_INVALID);
53 status = lttng_trace_format_ctf_1_get_version(ctf1, &major, nullptr);
54 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_INVALID);
55
56 /* Wrong object type */
57 status = lttng_trace_format_ctf_1_get_version(ctf2, &major, &minor);
58 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_INVALID);
59
60 status = lttng_trace_format_ctf_1_get_version(ctf1, &major, &minor);
61 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_OK);
62 ok1(major == 1);
63 ok1(minor == 8);
64
65 /* Ctf 2 */
66 status = lttng_trace_format_ctf_2_get_version(nullptr, nullptr, nullptr);
67 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_INVALID);
68 status = lttng_trace_format_ctf_2_get_version(nullptr, nullptr, &minor);
69 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_INVALID);
70 status = lttng_trace_format_ctf_2_get_version(nullptr, &major, nullptr);
71 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_INVALID);
72 status = lttng_trace_format_ctf_2_get_version(nullptr, &major, &minor);
73 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_INVALID);
74 status = lttng_trace_format_ctf_2_get_version(ctf2, nullptr, nullptr);
75 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_INVALID);
76 status = lttng_trace_format_ctf_2_get_version(ctf2, nullptr, &minor);
77 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_INVALID);
78 status = lttng_trace_format_ctf_2_get_version(ctf2, &major, nullptr);
79 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_INVALID);
80
81 /* Wrong object type */
82 status = lttng_trace_format_ctf_1_get_version(ctf2, &major, &minor);
83 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_INVALID);
84
85 status = lttng_trace_format_ctf_2_get_version(ctf2, &major, &minor);
86 ok1(status == LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_OK);
87 ok1(major == 2);
88 ok1(minor == 0);
89
90 lttng_trace_format_descriptor_destroy(ctf1);
91 lttng_trace_format_descriptor_destroy(ctf2);
92 }
93
94 static void test_trace_format_descriptor_ctf1_ser_des(void)
95 {
96 struct lttng_payload buffer;
97 lttng_payload_init(&buffer);
98
99 lttng::trace_format_descriptor::uptr descriptor_from_buffer;
100 lttng::trace_format_descriptor::uptr ctf1(new lttng::trace_format_descriptor_ctf1);
101 lttng::trace_format_descriptor::uptr ctf2(new lttng::trace_format_descriptor_ctf2);
102
103 /* Ctf1 ser/des */
104 ctf1->serialize(&buffer);
105 {
106 struct lttng_payload_view view = lttng_payload_view_from_payload(&buffer, 0, -1);
107
108 (void) lttng::trace_format_descriptor::create_from_payload(
109 &view, descriptor_from_buffer);
110 }
111
112 ok1(*descriptor_from_buffer == *ctf1);
113 ok1(*descriptor_from_buffer != *ctf2);
114
115 lttng_payload_reset(&buffer);
116
117 /* Ctf2 ser/des */
118 ctf2->serialize(&buffer);
119 {
120 struct lttng_payload_view view = lttng_payload_view_from_payload(&buffer, 0, -1);
121
122 (void) lttng::trace_format_descriptor::create_from_payload(
123 &view, descriptor_from_buffer);
124 }
125
126 ok1(*descriptor_from_buffer != *ctf1);
127 ok1(*descriptor_from_buffer == *ctf2);
128
129 lttng_payload_reset(&buffer);
130 }
131
132 int main(void)
133 {
134 plan_tests(NUM_TESTS);
135 test_trace_format_descriptor_base();
136 test_trace_format_descriptor_ctf1_ser_des();
137 return exit_status();
138 }
This page took 0.035604 seconds and 5 git commands to generate.