*/
#include "tap/tap.h"
-#include <babeltrace/babeltrace.h>
-#include <babeltrace/object-internal.h>
-#include <babeltrace/compat/stdlib-internal.h>
-#include <babeltrace/assert-internal.h>
+#include <babeltrace2/babeltrace.h>
+#include <babeltrace2/object-internal.h>
+#include <babeltrace2/compat/stdlib-internal.h>
+#include <babeltrace2/assert-internal.h>
+#include <babeltrace2/ctf-writer/writer.h>
+#include <babeltrace2/ctf-writer/clock.h>
+#include <babeltrace2/ctf-writer/clock-class.h>
+#include <babeltrace2/ctf-writer/stream.h>
+#include <babeltrace2/ctf-writer/event.h>
+#include <babeltrace2/ctf-writer/event-types.h>
+#include <babeltrace2/ctf-writer/event-fields.h>
+#include <babeltrace2/ctf-writer/stream-class.h>
+#include <babeltrace2/ctf-writer/trace.h>
#include "common.h"
#define NR_TESTS 37
struct user {
- struct bt_trace_class *tc;
- struct bt_stream_class *sc;
- struct bt_event_class *ec;
- struct bt_stream *stream;
- struct bt_event *event;
+ bt_trace_class *tc;
+ bt_stream_class *sc;
+ bt_event_class *ec;
+ bt_stream *stream;
+ bt_event *event;
};
struct writer_user {
* - uint16_t payload_16;
* - uint32_t payload_32;
*/
-static struct bt_field_class *create_integer_struct(void)
+static bt_field_class *create_integer_struct(bt_trace_class *trace_class)
{
int ret;
- struct bt_field_class *structure = NULL;
- struct bt_field_class *ui8 = NULL, *ui16 = NULL, *ui32 = NULL;
+ bt_field_class *structure = NULL;
+ bt_field_class *ui8 = NULL, *ui16 = NULL, *ui32 = NULL;
- structure = bt_field_class_structure_create();
+ structure = bt_field_class_structure_create(trace_class);
BT_ASSERT(structure);
- ui8 = bt_field_class_unsigned_integer_create();
+ ui8 = bt_field_class_unsigned_integer_create(trace_class);
BT_ASSERT(ui8);
bt_field_class_integer_set_field_value_range(ui8, 8);
ret = bt_field_class_structure_append_member(structure,
"payload_8", ui8);
BT_ASSERT(ret == 0);
- ui16 = bt_field_class_unsigned_integer_create();
+ ui16 = bt_field_class_unsigned_integer_create(trace_class);
BT_ASSERT(ui16);
bt_field_class_integer_set_field_value_range(ui16, 16);
ret = bt_field_class_structure_append_member(structure,
"payload_16", ui16);
BT_ASSERT(ret == 0);
- ui32 = bt_field_class_unsigned_integer_create();
+ ui32 = bt_field_class_unsigned_integer_create(trace_class);
BT_ASSERT(ui32);
bt_field_class_integer_set_field_value_range(ui32, 32);
ret = bt_field_class_structure_append_member(structure,
* - uint16_t payload_16;
* - uint32_t payload_32;
*/
-static struct bt_event_class *create_simple_event(
- struct bt_stream_class *sc, const char *name)
+static bt_event_class *create_simple_event(
+ bt_stream_class *sc, const char *name)
{
int ret;
- struct bt_event_class *event = NULL;
- struct bt_field_class *payload = NULL;
+ bt_event_class *event = NULL;
+ bt_field_class *payload = NULL;
BT_ASSERT(name);
event = bt_event_class_create(sc);
BT_ASSERT(event);
ret = bt_event_class_set_name(event, name);
BT_ASSERT(ret == 0);
- payload = create_integer_struct();
+ payload = create_integer_struct(bt_stream_class_borrow_trace_class(sc));
BT_ASSERT(payload);
ret = bt_event_class_set_payload_field_class(event, payload);
BT_ASSERT(ret == 0);
* - uint16_t payload_16;
* - uint32_t payload_32;
*/
-static struct bt_event_class *create_complex_event(
- struct bt_stream_class *sc,
+static bt_event_class *create_complex_event(bt_stream_class *sc,
const char *name)
{
int ret;
- struct bt_event_class *event = NULL;
- struct bt_field_class *inner = NULL, *outer = NULL;
+ bt_event_class *event = NULL;
+ bt_field_class *inner = NULL, *outer = NULL;
+ bt_trace_class *trace_class = bt_stream_class_borrow_trace_class(sc);
BT_ASSERT(name);
event = bt_event_class_create(sc);
BT_ASSERT(event);
ret = bt_event_class_set_name(event, name);
BT_ASSERT(ret == 0);
- outer = create_integer_struct();
+ outer = create_integer_struct(trace_class);
BT_ASSERT(outer);
- inner = create_integer_struct();
+ inner = create_integer_struct(trace_class);
BT_ASSERT(inner);
ret = bt_field_class_structure_append_member(outer,
"payload_struct", inner);
}
static void set_stream_class_field_classes(
- struct bt_stream_class *stream_class)
+ bt_stream_class *stream_class)
{
- struct bt_field_class *packet_context_type;
- struct bt_field_class *event_header_type;
- struct bt_field_class *fc;
+ bt_trace_class *trace_class =
+ bt_stream_class_borrow_trace_class(stream_class);
+ bt_field_class *packet_context_type;
+ bt_field_class *fc;
int ret;
- packet_context_type = bt_field_class_structure_create();
+ packet_context_type = bt_field_class_structure_create(trace_class);
BT_ASSERT(packet_context_type);
- fc = bt_field_class_unsigned_integer_create();
+ fc = bt_field_class_unsigned_integer_create(trace_class);
BT_ASSERT(fc);
bt_field_class_integer_set_field_value_range(fc, 32);
ret = bt_field_class_structure_append_member(packet_context_type,
"packet_size", fc);
BT_ASSERT(ret == 0);
bt_field_class_put_ref(fc);
- fc = bt_field_class_unsigned_integer_create();
+ fc = bt_field_class_unsigned_integer_create(trace_class);
BT_ASSERT(fc);
bt_field_class_integer_set_field_value_range(fc, 32);
ret = bt_field_class_structure_append_member(packet_context_type,
"content_size", fc);
BT_ASSERT(ret == 0);
bt_field_class_put_ref(fc);
- event_header_type = bt_field_class_structure_create();
- BT_ASSERT(event_header_type);
- fc = bt_field_class_unsigned_integer_create();
- BT_ASSERT(fc);
- bt_field_class_integer_set_field_value_range(fc, 32);
- ret = bt_field_class_structure_append_member(event_header_type,
- "id", fc);
- BT_ASSERT(ret == 0);
- bt_field_class_put_ref(fc);
ret = bt_stream_class_set_packet_context_field_class(
stream_class, packet_context_type);
BT_ASSERT(ret == 0);
- ret = bt_stream_class_set_event_header_field_class(
- stream_class, event_header_type);
- BT_ASSERT(ret == 0);
bt_field_class_put_ref(packet_context_type);
- bt_field_class_put_ref(event_header_type);
}
-static void create_sc1(struct bt_trace_class *trace_class)
+static void create_sc1(bt_trace_class *trace_class)
{
int ret;
- struct bt_event_class *ec1 = NULL, *ec2 = NULL;
- struct bt_stream_class *sc1 = NULL, *ret_stream = NULL;
+ bt_event_class *ec1 = NULL, *ec2 = NULL;
+ bt_stream_class *sc1 = NULL, *ret_stream = NULL;
sc1 = bt_stream_class_create(trace_class);
BT_ASSERT(sc1);
BT_STREAM_CLASS_PUT_REF_AND_RESET(sc1);
}
-static void create_sc2(struct bt_trace_class *trace_class)
+static void create_sc2(bt_trace_class *trace_class)
{
int ret;
- struct bt_event_class *ec3 = NULL;
- struct bt_stream_class *sc2 = NULL, *ret_stream = NULL;
+ bt_event_class *ec3 = NULL;
+ bt_stream_class *sc2 = NULL, *ret_stream = NULL;
sc2 = bt_stream_class_create(trace_class);
BT_ASSERT(sc2);
BT_STREAM_CLASS_PUT_REF_AND_RESET(sc2);
}
-static void set_trace_packet_header(struct bt_trace_class *trace_class)
+static bt_trace_class *create_tc1(bt_self_component_source *self_comp)
{
- struct bt_field_class *packet_header_type;
- struct bt_field_class *fc;
- int ret;
+ bt_trace_class *tc1 = NULL;
- packet_header_type = bt_field_class_structure_create();
- BT_ASSERT(packet_header_type);
- fc = bt_field_class_unsigned_integer_create();
- BT_ASSERT(fc);
- bt_field_class_integer_set_field_value_range(fc, 32);
- ret = bt_field_class_structure_append_member(packet_header_type,
- "stream_id", fc);
- BT_ASSERT(ret == 0);
- bt_field_class_put_ref(fc);
- ret = bt_trace_class_set_packet_header_field_class(trace_class,
- packet_header_type);
- BT_ASSERT(ret == 0);
-
- bt_field_class_put_ref(packet_header_type);
-}
-
-static struct bt_trace_class *create_tc1(void)
-{
- struct bt_trace_class *tc1 = NULL;
-
- tc1 = bt_trace_class_create();
+ tc1 = bt_trace_class_create(
+ bt_self_component_source_as_self_component(self_comp));
BT_ASSERT(tc1);
- set_trace_packet_header(tc1);
create_sc1(tc1);
create_sc2(tc1);
return tc1;
}
-static void init_weak_refs(struct bt_trace_class *tc,
- struct bt_trace_class **tc1,
- struct bt_stream_class **sc1,
- struct bt_stream_class **sc2,
- struct bt_event_class **ec1,
- struct bt_event_class **ec2,
- struct bt_event_class **ec3)
+static void init_weak_refs(bt_trace_class *tc,
+ bt_trace_class **tc1,
+ bt_stream_class **sc1,
+ bt_stream_class **sc2,
+ bt_event_class **ec1,
+ bt_event_class **ec2,
+ bt_event_class **ec3)
{
*tc1 = tc;
*sc1 = bt_trace_class_borrow_stream_class_by_index(tc, 0);
*ec3 = bt_stream_class_borrow_event_class_by_index(*sc2, 0);
}
-static void test_example_scenario(void)
+static void test_example_scenario(bt_self_component_source *self_comp)
{
/*
* Weak pointers to trace IR objects are to be used very
* of expected reference counts without affecting them by taking
* "real" references to the objects.
*/
- struct bt_trace_class *tc1 = NULL, *weak_tc1 = NULL;
- struct bt_stream_class *weak_sc1 = NULL, *weak_sc2 = NULL;
- struct bt_event_class *weak_ec1 = NULL, *weak_ec2 = NULL,
+ bt_trace_class *tc1 = NULL, *weak_tc1 = NULL;
+ bt_stream_class *weak_sc1 = NULL, *weak_sc2 = NULL;
+ bt_event_class *weak_ec1 = NULL, *weak_ec2 = NULL,
*weak_ec3 = NULL;
struct user user_a = { 0 }, user_b = { 0 }, user_c = { 0 };
/* The only reference which exists at this point is on TC1. */
- tc1 = create_tc1();
+ tc1 = create_tc1(self_comp);
ok(tc1, "Initialize trace");
BT_ASSERT(tc1);
init_weak_refs(tc1, &weak_tc1, &weak_sc1, &weak_sc2, &weak_ec1,
BT_EVENT_CLASS_PUT_REF_AND_RESET(user_c.ec);
}
+static
+bt_self_component_status src_init(
+ bt_self_component_source *self_comp,
+ const bt_value *params, void *init_method_data)
+{
+ test_example_scenario(self_comp);
+ return BT_SELF_COMPONENT_STATUS_OK;
+}
+
+static
+bt_self_message_iterator_status src_iter_next(
+ bt_self_message_iterator *self_iterator,
+ bt_message_array_const msgs, uint64_t capacity,
+ uint64_t *count)
+{
+ return BT_SELF_MESSAGE_ITERATOR_STATUS_ERROR;
+}
+
+static void test_example_scenario_in_graph(void)
+{
+ bt_component_class_source *comp_cls;
+ bt_graph *graph;
+ int ret;
+
+ comp_cls = bt_component_class_source_create("src", src_iter_next);
+ BT_ASSERT(comp_cls);
+ ret = bt_component_class_source_set_init_method(comp_cls, src_init);
+ BT_ASSERT(ret == 0);
+ graph = bt_graph_create();
+ ret = bt_graph_add_source_component(graph, comp_cls, "src-comp",
+ NULL, NULL);
+ BT_ASSERT(ret == 0);
+ bt_graph_put_ref(graph);
+ bt_component_class_source_put_ref(comp_cls);
+}
+
static void create_writer_user_full(struct writer_user *user)
{
gchar *trace_path;
/* Initialize tap harness before any tests */
plan_tests(NR_TESTS);
- test_example_scenario();
+ test_example_scenario_in_graph();
test_put_order();
return exit_status();