2 * Unit tests for the trace format descriptor API.
4 * Copyright (C) 2022 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
6 * SPDX-License-Identifier: MIT
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>
23 int lttng_opt_quiet
= 1;
24 int lttng_opt_verbose
;
29 static void test_trace_format_descriptor_base(void)
31 lttng_trace_format_descriptor_status status
;
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();
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
);
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
);
60 status
= lttng_trace_format_ctf_1_get_version(ctf1
, &major
, &minor
);
61 ok1(status
== LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_OK
);
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
);
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
);
85 status
= lttng_trace_format_ctf_2_get_version(ctf2
, &major
, &minor
);
86 ok1(status
== LTTNG_TRACE_FORMAT_DESCRIPTOR_STATUS_OK
);
90 lttng_trace_format_descriptor_destroy(ctf1
);
91 lttng_trace_format_descriptor_destroy(ctf2
);
94 static void test_trace_format_descriptor_ctf1_ser_des(void)
96 struct lttng_payload buffer
;
97 lttng_payload_init(&buffer
);
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
);
104 ctf1
->serialize(&buffer
);
106 struct lttng_payload_view view
= lttng_payload_view_from_payload(&buffer
, 0, -1);
108 (void) lttng::trace_format_descriptor::create_from_payload(
109 &view
, descriptor_from_buffer
);
112 ok1(*descriptor_from_buffer
== *ctf1
);
113 ok1(*descriptor_from_buffer
!= *ctf2
);
115 lttng_payload_reset(&buffer
);
118 ctf2
->serialize(&buffer
);
120 struct lttng_payload_view view
= lttng_payload_view_from_payload(&buffer
, 0, -1);
122 (void) lttng::trace_format_descriptor::create_from_payload(
123 &view
, descriptor_from_buffer
);
126 ok1(*descriptor_from_buffer
!= *ctf1
);
127 ok1(*descriptor_from_buffer
== *ctf2
);
129 lttng_payload_reset(&buffer
);
134 plan_tests(NUM_TESTS
);
135 test_trace_format_descriptor_base();
136 test_trace_format_descriptor_ctf1_ser_des();
137 return exit_status();