X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=tests%2Flib%2Ftest_trace_ir_ref.c;h=10916fba59294c1040dfe7fee074c5a3de93fd97;hb=578e048b5debf169e286e5b5cc747b5d6c16886d;hp=61c3de613e44587ed250a5caf4474a1bc247c120;hpb=b19ff26f04df428047676dd736bd7cc9473906fe;p=babeltrace.git diff --git a/tests/lib/test_trace_ir_ref.c b/tests/lib/test_trace_ir_ref.c index 61c3de61..10916fba 100644 --- a/tests/lib/test_trace_ir_ref.c +++ b/tests/lib/test_trace_ir_ref.c @@ -20,10 +20,19 @@ */ #include "tap/tap.h" -#include -#include -#include -#include +#include +#include "lib/object.h" +#include "compat/stdlib.h" +#include "common/assert.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include #include "common.h" #define NR_TESTS 37 @@ -63,27 +72,27 @@ static const size_t WRITER_USER_NR_ELEMENTS = * - uint16_t payload_16; * - uint32_t payload_32; */ -static bt_field_class *create_integer_struct(void) +static bt_field_class *create_integer_struct(bt_trace_class *trace_class) { int ret; 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, @@ -142,7 +151,7 @@ static bt_event_class *create_simple_event( 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); @@ -160,22 +169,22 @@ static bt_event_class *create_simple_event( * - uint16_t payload_16; * - uint32_t payload_32; */ -static bt_event_class *create_complex_event( - bt_stream_class *sc, +static bt_event_class *create_complex_event(bt_stream_class *sc, const char *name) { int ret; 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); @@ -190,44 +199,32 @@ static bt_event_class *create_complex_event( static void set_stream_class_field_classes( bt_stream_class *stream_class) { + bt_trace_class *trace_class = + bt_stream_class_borrow_trace_class(stream_class); bt_field_class *packet_context_type; - bt_field_class *event_header_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(bt_trace_class *trace_class) @@ -272,35 +269,13 @@ static void create_sc2(bt_trace_class *trace_class) BT_STREAM_CLASS_PUT_REF_AND_RESET(sc2); } -static void set_trace_packet_header(bt_trace_class *trace_class) -{ - bt_field_class *packet_header_type; - bt_field_class *fc; - int ret; - - 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 bt_trace_class *create_tc1(void) +static bt_trace_class *create_tc1(bt_self_component_source *self_comp) { 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; @@ -322,7 +297,7 @@ static void init_weak_refs(bt_trace_class *tc, *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 @@ -338,7 +313,7 @@ static void test_example_scenario(void) 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, @@ -465,6 +440,42 @@ static void test_example_scenario(void) 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; @@ -604,7 +615,7 @@ int main(int argc, char **argv) /* Initialize tap harness before any tests */ plan_tests(NR_TESTS); - test_example_scenario(); + test_example_scenario_in_graph(); test_put_order(); return exit_status();