#include <babeltrace/ctf-ir/trace.h>
#include <babeltrace/ctf-ir/visitor.h>
#include <stdlib.h>
+#include <stdbool.h>
#include <string.h>
+#include <assert.h>
#define NR_TESTS 13
};
struct expected_result {
- const char *element_name;
- enum bt_ctf_ir_type element_type;
+ const char *object_name;
+ enum bt_ctf_object_type object_type;
};
struct expected_result expected_results[] = {
- { NULL, BT_CTF_IR_TYPE_TRACE },
- { "sc1", BT_CTF_IR_TYPE_STREAM_CLASS },
- { "ec1", BT_CTF_IR_TYPE_EVENT_CLASS },
- { "sc2", BT_CTF_IR_TYPE_STREAM_CLASS },
- { "ec2", BT_CTF_IR_TYPE_EVENT_CLASS },
- { "ec3", BT_CTF_IR_TYPE_EVENT_CLASS },
+ { NULL, BT_CTF_OBJECT_TYPE_TRACE },
+ { "sc1", BT_CTF_OBJECT_TYPE_STREAM_CLASS },
+ { "ec1", BT_CTF_OBJECT_TYPE_EVENT_CLASS },
+ { "sc2", BT_CTF_OBJECT_TYPE_STREAM_CLASS },
+ { "ec2", BT_CTF_OBJECT_TYPE_EVENT_CLASS },
+ { "ec3", BT_CTF_OBJECT_TYPE_EVENT_CLASS },
};
-const char *element_type_str(enum bt_ctf_ir_type type)
+const char *object_type_str(enum bt_ctf_object_type type)
{
switch (type) {
- case BT_CTF_IR_TYPE_TRACE:
+ case BT_CTF_OBJECT_TYPE_TRACE:
return "trace";
- case BT_CTF_IR_TYPE_STREAM_CLASS:
+ case BT_CTF_OBJECT_TYPE_STREAM_CLASS:
return "stream class";
- case BT_CTF_IR_TYPE_STREAM:
+ case BT_CTF_OBJECT_TYPE_STREAM:
return "stream";
- case BT_CTF_IR_TYPE_EVENT_CLASS:
+ case BT_CTF_OBJECT_TYPE_EVENT_CLASS:
return "event class";
- case BT_CTF_IR_TYPE_EVENT:
+ case BT_CTF_OBJECT_TYPE_EVENT:
return "event";
default:
return "unknown";
return NULL;
}
+static void set_stream_class_field_types(
+ struct bt_ctf_stream_class *stream_class)
+{
+ struct bt_ctf_field_type *packet_context_type;
+ struct bt_ctf_field_type *event_header_type;
+ struct bt_ctf_field_type *ft;
+ int ret;
+
+ packet_context_type = bt_ctf_field_type_structure_create();
+ assert(packet_context_type);
+ ft = bt_ctf_field_type_integer_create(32);
+ assert(ft);
+ ret = bt_ctf_field_type_structure_add_field(packet_context_type,
+ ft, "packet_size");
+ assert(ret == 0);
+ bt_put(ft);
+ ft = bt_ctf_field_type_integer_create(32);
+ assert(ft);
+ ret = bt_ctf_field_type_structure_add_field(packet_context_type,
+ ft, "content_size");
+ assert(ret == 0);
+ bt_put(ft);
+
+ event_header_type = bt_ctf_field_type_structure_create();
+ assert(event_header_type);
+ ft = bt_ctf_field_type_integer_create(32);
+ assert(ft);
+ ret = bt_ctf_field_type_structure_add_field(event_header_type,
+ ft, "id");
+ assert(ret == 0);
+ bt_put(ft);
+
+ ret = bt_ctf_stream_class_set_packet_context_type(stream_class,
+ packet_context_type);
+ assert(ret == 0);
+ ret = bt_ctf_stream_class_set_event_header_type(stream_class,
+ event_header_type);
+ assert(ret == 0);
+
+ bt_put(packet_context_type);
+ bt_put(event_header_type);
+}
+
+static void set_trace_packet_header(struct bt_ctf_trace *trace)
+{
+ struct bt_ctf_field_type *packet_header_type;
+ struct bt_ctf_field_type *ft;
+ int ret;
+
+ packet_header_type = bt_ctf_field_type_structure_create();
+ assert(packet_header_type);
+ ft = bt_ctf_field_type_integer_create(32);
+ assert(ft);
+ ret = bt_ctf_field_type_structure_add_field(packet_header_type,
+ ft, "stream_id");
+ assert(ret == 0);
+ bt_put(ft);
+
+ ret = bt_ctf_trace_set_packet_header_type(trace,
+ packet_header_type);
+ assert(ret == 0);
+
+ bt_put(packet_header_type);
+}
+
struct bt_ctf_trace *init_trace(void)
{
int ret;
goto end;
}
+ set_trace_packet_header(trace);
+ set_stream_class_field_types(sc1);
+ set_stream_class_field_types(sc2);
ret = bt_ctf_stream_class_add_event_class(sc1, ec1);
if (ret) {
goto error;
goto end;
}
-int visitor(struct bt_ctf_ir_element *element, void *data)
+int visitor(struct bt_ctf_object *object, void *data)
{
int ret = 0;
bool names_match;
- const char *element_name;
+ const char *object_name;
struct visitor_state *state = data;
struct expected_result *expected = &expected_results[state->i++];
- switch (bt_ctf_ir_element_get_type(element)) {
- case BT_CTF_IR_TYPE_TRACE:
- element_name = NULL;
- names_match = expected->element_name == NULL;
+ switch (bt_ctf_object_get_type(object)) {
+ case BT_CTF_OBJECT_TYPE_TRACE:
+ object_name = NULL;
+ names_match = expected->object_name == NULL;
break;
- case BT_CTF_IR_TYPE_STREAM_CLASS:
- element_name = bt_ctf_stream_class_get_name(
- bt_ctf_ir_element_get_element(element));
- if (!element_name) {
+ case BT_CTF_OBJECT_TYPE_STREAM_CLASS:
+ object_name = bt_ctf_stream_class_get_name(
+ bt_ctf_object_get_object(object));
+ if (!object_name) {
ret = -1;
goto end;
}
- names_match = !strcmp(element_name, expected->element_name);
+ names_match = !strcmp(object_name, expected->object_name);
break;
- case BT_CTF_IR_TYPE_EVENT_CLASS:
- element_name = bt_ctf_event_class_get_name(
- bt_ctf_ir_element_get_element(element));
- if (!element_name) {
+ case BT_CTF_OBJECT_TYPE_EVENT_CLASS:
+ object_name = bt_ctf_event_class_get_name(
+ bt_ctf_object_get_object(object));
+ if (!object_name) {
ret = -1;
goto end;
}
- names_match = !strcmp(element_name, expected->element_name);
+ names_match = !strcmp(object_name, expected->object_name);
break;
default:
diag("Encountered an unexpected type while visiting trace");
goto end;
}
- ok(expected->element_type == bt_ctf_ir_element_get_type(element),
- "Encoutered element type %s, expected %s",
- element_type_str(expected->element_type),
- element_type_str(bt_ctf_ir_element_get_type(element)));
+ ok(expected->object_type == bt_ctf_object_get_type(object),
+ "Encoutered object type %s, expected %s",
+ object_type_str(expected->object_type),
+ object_type_str(bt_ctf_object_get_type(object)));
ok(names_match, "Element name is %s, expected %s",
- element_name ? : "NULL",
- expected->element_name ? : "NULL");
+ object_name ? : "NULL",
+ expected->object_name ? : "NULL");
end:
return ret;
}