#include <babeltrace/ctf-writer/stream-class.h>
#include <babeltrace/ctf-ir/packet.h>
#include <babeltrace/ctf-ir/clock-class.h>
+#include <babeltrace/ctf-ir/trace.h>
#include <babeltrace/ref.h>
#include <babeltrace/ctf/events.h>
#include <babeltrace/values.h>
#define DEFAULT_CLOCK_TIME 0
#define DEFAULT_CLOCK_VALUE 0
-#define NR_TESTS 601
+#define NR_TESTS 614
static int64_t current_time = 42;
"bt_ctf_stream_class_get_event_class_count handles NULL correctly");
ok(bt_ctf_stream_class_get_event_class_count(stream_class) == 1,
"bt_ctf_stream_class_get_event_class_count returns a correct number of event classes");
- ok(bt_ctf_stream_class_get_event_class(NULL, 0) == NULL,
+ ok(bt_ctf_stream_class_get_event_class_by_index(NULL, 0) == NULL,
"bt_ctf_stream_class_get_event_class handles NULL correctly");
- ok(bt_ctf_stream_class_get_event_class(stream_class, 8724) == NULL,
+ ok(bt_ctf_stream_class_get_event_class_by_index(stream_class, 8724) == NULL,
"bt_ctf_stream_class_get_event_class handles invalid indexes correctly");
- ret_event_class = bt_ctf_stream_class_get_event_class(stream_class, 0);
+ ret_event_class = bt_ctf_stream_class_get_event_class_by_index(stream_class, 0);
ok(ret_event_class == simple_event_class,
"bt_ctf_stream_class_get_event_class returns the correct event class");
bt_put(ret_event_class);
"bt_ctf_stream_class_get_event_class_by_id returns a correct event class");
bt_put(ret_event_class);
- ok(bt_ctf_stream_class_get_event_class_by_name(NULL, "some event name") == NULL,
- "bt_ctf_stream_class_get_event_class_by_name handles a NULL stream class correctly");
- ok(bt_ctf_stream_class_get_event_class_by_name(stream_class, NULL) == NULL,
- "bt_ctf_stream_class_get_event_class_by_name handles a NULL event class name correctly");
- ok(bt_ctf_stream_class_get_event_class_by_name(stream_class, "some event name") == NULL,
- "bt_ctf_stream_class_get_event_class_by_name handles non-existing event class names correctly");
- ret_event_class = bt_ctf_stream_class_get_event_class_by_name(stream_class, "Simple Event");
- ok(ret_event_class == simple_event_class,
- "bt_ctf_stream_class_get_event_class_by_name returns a correct event class");
- bt_put(ret_event_class);
-
simple_event = bt_ctf_event_create(simple_event_class);
ok(simple_event,
"Instantiate an event containing a single integer field");
"bt_ctf_event_class_get_attribute_count handles a NULL event class");
ok(bt_ctf_event_class_get_attribute_count(event_class) == 4,
"bt_ctf_event_class_get_attribute_count returns the correct count");
- ok(!bt_ctf_event_class_get_attribute_name(NULL, 0),
+ ok(!bt_ctf_event_class_get_attribute_name_by_index(NULL, 0),
"bt_ctf_event_class_get_attribute_name handles a NULL event class correctly");
- ok(!bt_ctf_event_class_get_attribute_name(event_class, 4),
+ ok(!bt_ctf_event_class_get_attribute_name_by_index(event_class, 4),
"bt_ctf_event_class_get_attribute_name handles a too large index correctly");
- ok(!bt_ctf_event_class_get_attribute_value(NULL, 0),
+ ok(!bt_ctf_event_class_get_attribute_value_by_index(NULL, 0),
"bt_ctf_event_class_get_attribute_value handles a NULL event class correctly");
- ok(!bt_ctf_event_class_get_attribute_value(event_class, 4),
+ ok(!bt_ctf_event_class_get_attribute_value_by_index(event_class, 4),
"bt_ctf_event_class_get_attribute_value handles a too large index correctly");
memset(&attrs_count, 0, sizeof(attrs_count));
for (i = 0; i < 4; ++i) {
- ret_string = bt_ctf_event_class_get_attribute_name(event_class,
- i);
- obj = bt_ctf_event_class_get_attribute_value(event_class, i);
+ ret_string = bt_ctf_event_class_get_attribute_name_by_index(
+ event_class, i);
+ obj = bt_ctf_event_class_get_attribute_value_by_index(
+ event_class, i);
assert(ret_string && obj);
if (!strcmp(ret_string, "id")) {
"bt_ctf_event_class_get_stream_class returns the correct stream class");
bt_put(ret_stream_class);
- ok(bt_ctf_event_class_get_field_count(NULL) < 0,
+ ok(bt_ctf_event_class_get_payload_type_field_count(NULL) < 0,
"bt_ctf_event_class_get_field_count handles NULL correctly");
- ok(bt_ctf_event_class_get_field_count(event_class) == 3,
+ ok(bt_ctf_event_class_get_payload_type_field_count(event_class) == 3,
"bt_ctf_event_class_get_field_count returns a correct value");
- ok(bt_ctf_event_class_get_field(NULL, &ret_string,
+ ok(bt_ctf_event_class_get_payload_type_field_by_index(NULL, &ret_string,
&ret_field_type, 0) < 0,
"bt_ctf_event_class_get_field handles a NULL event class correctly");
- ok(bt_ctf_event_class_get_field(event_class, NULL,
+ ok(bt_ctf_event_class_get_payload_type_field_by_index(event_class, NULL,
&ret_field_type, 0) == 0,
"bt_ctf_event_class_get_field handles a NULL field name correctly");
bt_put(ret_field_type);
- ok(bt_ctf_event_class_get_field(event_class, &ret_string,
+ ok(bt_ctf_event_class_get_payload_type_field_by_index(event_class, &ret_string,
NULL, 0) == 0,
"bt_ctf_event_class_get_field handles a NULL field type correctly");
- ok(bt_ctf_event_class_get_field(event_class, &ret_string,
+ ok(bt_ctf_event_class_get_payload_type_field_by_index(event_class, &ret_string,
&ret_field_type, 42) < 0,
"bt_ctf_event_class_get_field handles an invalid index correctly");
- ok(bt_ctf_event_class_get_field(event_class, &ret_string,
+ ok(bt_ctf_event_class_get_payload_type_field_by_index(event_class, &ret_string,
&ret_field_type, 0) == 0,
"bt_ctf_event_class_get_field returns a field");
ok(bt_ctf_field_type_compare(ret_field_type, uint_35_type) == 0,
event_class = bt_ctf_event_class_create("Simple Event");
assert(event_class);
- ok(bt_ctf_stream_class_add_event_class(stream_class, event_class),
- "two event classes with the same name cannot cohabit within the same stream class");
+ ok(bt_ctf_stream_class_add_event_class(stream_class, event_class) == 0,
+ "two event classes with the same name may cohabit within the same stream class");
bt_put(event_class);
event_class = bt_ctf_event_class_create("different name, ok");
bt_put(sc);
}
+static
+void test_static_trace(void)
+{
+ struct bt_ctf_trace *trace;
+ struct bt_ctf_stream_class *stream_class;
+ struct bt_ctf_stream_class *stream_class2;
+ struct bt_ctf_stream *stream;
+ struct bt_ctf_clock_class *clock_class;
+ int ret;
+
+ trace = bt_ctf_trace_create();
+ assert(trace);
+ ret = bt_ctf_trace_set_native_byte_order(trace,
+ BT_CTF_BYTE_ORDER_LITTLE_ENDIAN);
+ assert(ret == 0);
+ stream_class = bt_ctf_stream_class_create(NULL);
+ assert(stream_class);
+ ret = bt_ctf_trace_add_stream_class(trace, stream_class);
+ assert(ret == 0);
+ stream = bt_ctf_stream_create(stream_class, "hello");
+ ok(stream, "bt_ctf_stream_create() succeeds with a non-static trace");
+ bt_put(stream);
+ ok(!bt_ctf_trace_is_static(trace),
+ "bt_ctf_trace_is_static() returns the expected value");
+ ok(bt_ctf_trace_set_is_static(trace) == 0,
+ "bt_ctf_trace_set_is_static() succeeds");
+ ok(bt_ctf_trace_is_static(trace),
+ "bt_ctf_trace_is_static() returns the expected value");
+ clock_class = bt_ctf_clock_class_create("yes");
+ assert(clock_class);
+ stream_class2 = bt_ctf_stream_class_create(NULL);
+ assert(stream_class2);
+ ok(bt_ctf_trace_add_stream_class(trace, stream_class2),
+ "bt_ctf_trace_add_stream_class() fails with a static trace");
+ ok(bt_ctf_trace_add_clock_class(trace, clock_class),
+ "bt_ctf_trace_add_clock_class() fails with a static trace");
+ ok(!bt_ctf_stream_create(stream_class, "hello2"),
+ "bt_ctf_stream_create() fails with a static trace");
+
+ bt_put(trace);
+ bt_put(stream_class);
+ bt_put(stream_class2);
+ bt_put(clock_class);
+}
+
+static
+void test_trace_uuid(void)
+{
+ struct bt_ctf_trace *trace;
+ const unsigned char uuid[] = {
+ 0x35, 0x92, 0x63, 0xab, 0xb4, 0xbe, 0x40, 0xb4,
+ 0xb2, 0x60, 0xd3, 0xf1, 0x3b, 0xb0, 0xd8, 0x59,
+ };
+ const unsigned char *ret_uuid;
+
+ trace = bt_ctf_trace_create();
+ assert(trace);
+ ok(!bt_ctf_trace_get_uuid(NULL),
+ "bt_ctf_trace_get_uuid() handles NULL");
+ ok(!bt_ctf_trace_get_uuid(trace),
+ "bt_ctf_trace_get_uuid() returns NULL initially");
+ ok(bt_ctf_trace_set_uuid(NULL, uuid),
+ "bt_ctf_trace_set_uuid() handles NULL (trace)");
+ ok(bt_ctf_trace_set_uuid(trace, NULL),
+ "bt_ctf_trace_set_uuid() handles NULL (UUID)");
+ ok(bt_ctf_trace_set_uuid(trace, uuid) == 0,
+ "bt_ctf_trace_set_uuid() succeeds with a valid UUID");
+ ret_uuid = bt_ctf_trace_get_uuid(trace);
+ ok(ret_uuid, "bt_ctf_trace_get_uuid() returns a UUID");
+ ok(memcmp(uuid, ret_uuid, 16) == 0,
+ "bt_ctf_trace_get_uuid() returns the expected UUID");
+
+ bt_put(trace);
+}
+
int main(int argc, char **argv)
{
char trace_path[] = "/tmp/ctfwriter_XXXXXX";
struct bt_ctf_clock_class *ret_clock_class;
struct bt_ctf_stream_class *stream_class, *ret_stream_class;
struct bt_ctf_stream *stream1;
+ struct bt_ctf_stream *stream;
const char *ret_string;
const unsigned char *ret_uuid;
unsigned char tmp_uuid[16] = { 0 };
"bt_ctf_writer_get_trace returns a bt_ctf_trace object");
ok(bt_ctf_trace_set_native_byte_order(trace, BT_CTF_BYTE_ORDER_BIG_ENDIAN) == 0,
"Set a trace's byte order to big endian");
- ok(bt_ctf_trace_get_byte_order(trace) == BT_CTF_BYTE_ORDER_BIG_ENDIAN,
- "bt_ctf_trace_get_byte_order returns a correct endianness");
+ ok(bt_ctf_trace_get_native_byte_order(trace) == BT_CTF_BYTE_ORDER_BIG_ENDIAN,
+ "bt_ctf_trace_get_native_byte_order returns a correct endianness");
/* Add environment context to the trace */
ret = gethostname(hostname, sizeof(hostname));
"bt_ctf_trace_get_environment_field_count returns a correct number of environment fields");
/* Test bt_ctf_trace_get_environment_field_name */
- ok(bt_ctf_trace_get_environment_field_name(NULL, 0) == NULL,
+ ok(bt_ctf_trace_get_environment_field_name_by_index(NULL, 0) == NULL,
"bt_ctf_trace_get_environment_field_name handles a NULL trace correctly");
- ok(bt_ctf_trace_get_environment_field_name(trace, -1) == NULL,
+ ok(bt_ctf_trace_get_environment_field_name_by_index(trace, -1) == NULL,
"bt_ctf_trace_get_environment_field_name handles an invalid index correctly (negative)");
- ok(bt_ctf_trace_get_environment_field_name(trace, 5) == NULL,
+ ok(bt_ctf_trace_get_environment_field_name_by_index(trace, 5) == NULL,
"bt_ctf_trace_get_environment_field_name handles an invalid index correctly (too large)");
- ret_string = bt_ctf_trace_get_environment_field_name(trace, 0);
+ ret_string = bt_ctf_trace_get_environment_field_name_by_index(trace, 0);
ok(ret_string && !strcmp(ret_string, "host"),
"bt_ctf_trace_get_environment_field_name returns a correct field name");
- ret_string = bt_ctf_trace_get_environment_field_name(trace, 1);
+ ret_string = bt_ctf_trace_get_environment_field_name_by_index(trace, 1);
ok(ret_string && !strcmp(ret_string, "test_env_int_obj"),
"bt_ctf_trace_get_environment_field_name returns a correct field name");
- ret_string = bt_ctf_trace_get_environment_field_name(trace, 2);
+ ret_string = bt_ctf_trace_get_environment_field_name_by_index(trace, 2);
ok(ret_string && !strcmp(ret_string, "test_env_str_obj"),
"bt_ctf_trace_get_environment_field_name returns a correct field name");
- ret_string = bt_ctf_trace_get_environment_field_name(trace, 3);
+ ret_string = bt_ctf_trace_get_environment_field_name_by_index(trace, 3);
ok(ret_string && !strcmp(ret_string, "test_env_int"),
"bt_ctf_trace_get_environment_field_name returns a correct field name");
- ret_string = bt_ctf_trace_get_environment_field_name(trace, 4);
+ ret_string = bt_ctf_trace_get_environment_field_name_by_index(trace, 4);
ok(ret_string && !strcmp(ret_string, "test_env_str"),
"bt_ctf_trace_get_environment_field_name returns a correct field name");
/* Test bt_ctf_trace_get_environment_field_value */
- ok(bt_ctf_trace_get_environment_field_value(NULL, 0) == NULL,
+ ok(bt_ctf_trace_get_environment_field_value_by_index(NULL, 0) == NULL,
"bt_ctf_trace_get_environment_field_value handles a NULL trace correctly");
- ok(bt_ctf_trace_get_environment_field_value(trace, -1) == NULL,
+ ok(bt_ctf_trace_get_environment_field_value_by_index(trace, -1) == NULL,
"bt_ctf_trace_get_environment_field_value handles an invalid index correctly (negative)");
- ok(bt_ctf_trace_get_environment_field_value(trace, 5) == NULL,
+ ok(bt_ctf_trace_get_environment_field_value_by_index(trace, 5) == NULL,
"bt_ctf_trace_get_environment_field_value handles an invalid index correctly (too large)");
- obj = bt_ctf_trace_get_environment_field_value(trace, 1);
+ obj = bt_ctf_trace_get_environment_field_value_by_index(trace, 1);
ret = bt_value_integer_get(obj, &ret_int64_t);
ok(!ret && ret_int64_t == 23,
"bt_ctf_trace_get_environment_field_value succeeds in getting an integer value");
BT_PUT(obj);
- obj = bt_ctf_trace_get_environment_field_value(trace, 2);
+ obj = bt_ctf_trace_get_environment_field_value_by_index(trace, 2);
ret = bt_value_string_get(obj, &ret_string);
ok(!ret && ret_string && !strcmp(ret_string, "the value"),
"bt_ctf_trace_get_environment_field_value succeeds in getting a string value");
"bt_ctf_trace_set_environment_field_integer succeeds with an existing name");
ok(bt_ctf_trace_get_environment_field_count(trace) == 5,
"bt_ctf_trace_set_environment_field_integer with an existing key does not increase the environment size");
- obj = bt_ctf_trace_get_environment_field_value(trace, 3);
+ obj = bt_ctf_trace_get_environment_field_value_by_index(trace, 3);
ret = bt_value_integer_get(obj, &ret_int64_t);
ok(!ret && ret_int64_t == 654321,
"bt_ctf_trace_get_environment_field_value successfully replaces an existing field");
/* Instantiate a stream and append events */
ret = bt_ctf_writer_add_clock(writer, clock);
assert(ret == 0);
+ ok(bt_ctf_trace_get_stream_count(trace) == 0,
+ "bt_ctf_trace_get_stream_count() succeeds and returns the correct value (0)");
stream1 = bt_ctf_writer_create_stream(writer, stream_class);
ok(stream1, "Instanciate a stream class from writer");
+ ok(bt_ctf_trace_get_stream_count(trace) == 1,
+ "bt_ctf_trace_get_stream_count() succeeds and returns the correct value (1)");
+ stream = bt_ctf_trace_get_stream_by_index(trace, 0);
+ ok(stream == stream1,
+ "bt_ctf_trace_get_stream_by_index() succeeds and returns the correct value");
+ BT_PUT(stream);
/*
* Creating a stream through a writer adds the given stream
"bt_ctf_trace_get_clock_class_count correctly handles NULL");
ok(bt_ctf_trace_get_clock_class_count(trace) == 1,
"bt_ctf_trace_get_clock_class_count returns the correct number of clocks");
- ok(!bt_ctf_trace_get_clock_class(NULL, 0),
+ ok(!bt_ctf_trace_get_clock_class_by_index(NULL, 0),
"bt_ctf_trace_get_clock_class correctly handles NULL");
- ok(!bt_ctf_trace_get_clock_class(trace, -1),
+ ok(!bt_ctf_trace_get_clock_class_by_index(trace, -1),
"bt_ctf_trace_get_clock_class correctly handles negative indexes");
- ok(!bt_ctf_trace_get_clock_class(trace, 1),
+ ok(!bt_ctf_trace_get_clock_class_by_index(trace, 1),
"bt_ctf_trace_get_clock_class correctly handles out of bound accesses");
- ret_clock_class = bt_ctf_trace_get_clock_class(trace, 0);
+ ret_clock_class = bt_ctf_trace_get_clock_class_by_index(trace, 0);
ok(strcmp(bt_ctf_clock_class_get_name(ret_clock_class),
bt_ctf_clock_get_name(clock)) == 0,
"bt_ctf_trace_get_clock_class returns the right clock instance");
test_custom_event_header_stream(writer, clock);
+ test_static_trace();
+
+ test_trace_uuid();
+
metadata_string = bt_ctf_writer_get_metadata_string(writer);
ok(metadata_string, "Get metadata string");