X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=tests%2Flib%2Ftest_trace_ir_ref.c;h=8811cf90ab6cfb0b21e320ff1d4f3b41de26ae06;hb=a3f0c7db90f4cfc81090a83a7442b7bc624d5789;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..8811cf90 100644 --- a/tests/lib/test_trace_ir_ref.c +++ b/tests/lib/test_trace_ir_ref.c @@ -19,11 +19,21 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include #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 +73,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_integer_unsigned_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_integer_unsigned_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_integer_unsigned_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 +152,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 +170,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); @@ -187,49 +197,6 @@ static bt_event_class *create_complex_event( return event; } -static void set_stream_class_field_classes( - bt_stream_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(); - BT_ASSERT(packet_context_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_context_type, - "packet_size", fc); - BT_ASSERT(ret == 0); - bt_field_class_put_ref(fc); - 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_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) { int ret; @@ -240,7 +207,6 @@ static void create_sc1(bt_trace_class *trace_class) BT_ASSERT(sc1); ret = bt_stream_class_set_name(sc1, "sc1"); BT_ASSERT(ret == 0); - set_stream_class_field_classes(sc1); ec1 = create_complex_event(sc1, "ec1"); BT_ASSERT(ec1); ec2 = create_simple_event(sc1, "ec2"); @@ -264,7 +230,6 @@ static void create_sc2(bt_trace_class *trace_class) BT_ASSERT(sc2); ret = bt_stream_class_set_name(sc2, "sc2"); BT_ASSERT(ret == 0); - set_stream_class_field_classes(sc2); ec3 = create_simple_event(sc2, "ec3"); ret_stream = bt_event_class_borrow_stream_class(ec3); ok(ret_stream == sc2, "Borrow parent stream SC2 from EC3"); @@ -272,35 +237,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 +265,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 +281,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 +408,48 @@ static void test_example_scenario(void) BT_EVENT_CLASS_PUT_REF_AND_RESET(user_c.ec); } +static +bt_component_class_initialize_method_status src_init( + bt_self_component_source *self_comp, + bt_self_component_source_configuration *config, + const bt_value *params, void *init_method_data) +{ + test_example_scenario(self_comp); + return BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK; +} + +static +bt_message_iterator_class_next_method_status src_iter_next( + bt_self_message_iterator *self_iterator, + bt_message_array_const msgs, uint64_t capacity, + uint64_t *count) +{ + return BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; +} + +static void test_example_scenario_in_graph(void) +{ + bt_message_iterator_class *msg_iter_cls; + bt_component_class_source *comp_cls; + bt_graph *graph; + int ret; + + msg_iter_cls = bt_message_iterator_class_create(src_iter_next); + BT_ASSERT(msg_iter_cls); + + comp_cls = bt_component_class_source_create("src", msg_iter_cls); + BT_ASSERT(comp_cls); + ret = bt_component_class_source_set_initialize_method(comp_cls, src_init); + BT_ASSERT(ret == 0); + graph = bt_graph_create(0); + ret = bt_graph_add_source_component(graph, comp_cls, "src-comp", + NULL, BT_LOGGING_LEVEL_NONE, NULL); + BT_ASSERT(ret == 0); + bt_graph_put_ref(graph); + bt_component_class_source_put_ref(comp_cls); + bt_message_iterator_class_put_ref(msg_iter_cls); +} + static void create_writer_user_full(struct writer_user *user) { gchar *trace_path; @@ -604,7 +589,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();