Fix: possible NULL dereference of uuid in test
[babeltrace.git] / tests / lib / test_ctf_writer.c
index eebb37fb2961317963abddb2d76f644acabd684b..8942f2f172f675891aada0b3f9579681eb7e0d9c 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * test-ctf-writer.c
+ * test_ctf_writer.c
  *
  * CTF Writer test
  *
- * Copyright 2013 - 2015 - Jérémie Galarneau <jeremie.galarneau@efficios.com>
+ * Copyright 2013 - 2017 - Jérémie Galarneau <jeremie.galarneau@efficios.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #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>
 #include <unistd.h>
-#include <babeltrace/compat/stdlib.h>
+#include <babeltrace/compat/stdlib-internal.h>
 #include <stdio.h>
 #include <sys/utsname.h>
-#include <babeltrace/compat/limits.h>
-#include <babeltrace/compat/stdio.h>
+#include <babeltrace/compat/limits-internal.h>
+#include <babeltrace/compat/stdio-internal.h>
 #include <string.h>
 #include <assert.h>
 #include <sys/wait.h>
 #include <fcntl.h>
-#include <babeltrace/compat/dirent.h>
+#include <babeltrace/compat/dirent-internal.h>
 #include "tap/tap.h"
 #include <math.h>
 #include <float.h>
@@ -60,7 +61,7 @@
 #define DEFAULT_CLOCK_TIME 0
 #define DEFAULT_CLOCK_VALUE 0
 
-#define NR_TESTS 602
+#define NR_TESTS 609
 
 static int64_t current_time = 42;
 
@@ -86,123 +87,6 @@ end:
        return ret;
 }
 
-static
-void validate_metadata(char *parser_path, char *metadata_path)
-{
-       int ret = 0;
-       char parser_output_path[] = "/tmp/parser_output_XXXXXX";
-       int parser_output_fd = -1, metadata_fd = -1;
-
-       if (!metadata_path) {
-               ret = -1;
-               goto result;
-       }
-
-       parser_output_fd = mkstemp(parser_output_path);
-       metadata_fd = open(metadata_path, O_RDONLY);
-
-       unlink(parser_output_path);
-
-       if (parser_output_fd == -1 || metadata_fd == -1) {
-               diag("Failed create temporary files for metadata parsing.");
-               ret = -1;
-               goto result;
-       }
-
-       pid_t pid = fork();
-       if (pid) {
-               int status = 0;
-               waitpid(pid, &status, 0);
-               ret = WIFEXITED(status) ? WEXITSTATUS(status) : -1;
-       } else {
-               /* ctf-parser-test expects a metadata string on stdin. */
-               ret = dup2(metadata_fd, STDIN_FILENO);
-               if (ret < 0) {
-                       perror("# dup2 metadata_fd to STDIN");
-                       goto result;
-               }
-
-               ret = dup2(parser_output_fd, STDOUT_FILENO);
-               if (ret < 0) {
-                       perror("# dup2 parser_output_fd to STDOUT");
-                       goto result;
-               }
-
-               ret = dup2(parser_output_fd, STDERR_FILENO);
-               if (ret < 0) {
-                       perror("# dup2 parser_output_fd to STDERR");
-                       goto result;
-               }
-
-               execl(parser_path, "ctf-parser-test", NULL);
-               perror("# Could not launch the ctf metadata parser process");
-               exit(-1);
-       }
-result:
-       ok(ret == 0, "Metadata string is valid");
-
-       if (ret && metadata_fd >= 0 && parser_output_fd >= 0) {
-               char *line;
-               size_t len = METADATA_LINE_SIZE;
-               FILE *metadata_fp = NULL, *parser_output_fp = NULL;
-
-               metadata_fp = fdopen(metadata_fd, "r");
-               if (!metadata_fp) {
-                       perror("fdopen on metadata_fd");
-                       goto close_fp;
-               }
-               metadata_fd = -1;
-
-               parser_output_fp = fdopen(parser_output_fd, "r");
-               if (!parser_output_fp) {
-                       perror("fdopen on parser_output_fd");
-                       goto close_fp;
-               }
-               parser_output_fd = -1;
-
-               line = malloc(len);
-               if (!line) {
-                       diag("malloc failure");
-               }
-
-               rewind(metadata_fp);
-
-               /* Output the metadata and parser output as diagnostic */
-               while (bt_getline(&line, &len, metadata_fp) > 0) {
-                       fprintf(stderr, "# %s", line);
-               }
-
-               rewind(parser_output_fp);
-               while (bt_getline(&line, &len, parser_output_fp) > 0) {
-                       fprintf(stderr, "# %s", line);
-               }
-
-               free(line);
-close_fp:
-               if (metadata_fp) {
-                       if (fclose(metadata_fp)) {
-                               diag("fclose failure");
-                       }
-               }
-               if (parser_output_fp) {
-                       if (fclose(parser_output_fp)) {
-                               diag("fclose failure");
-                       }
-               }
-       }
-
-       if (parser_output_fd >= 0) {
-               if (close(parser_output_fd)) {
-                       diag("close error");
-               }
-       }
-       if (metadata_fd >= 0) {
-               if (close(metadata_fd)) {
-                       diag("close error");
-               }
-       }
-}
-
 static
 void validate_trace(char *parser_path, char *trace_path)
 {
@@ -487,8 +371,6 @@ void append_simple_event(struct bt_ctf_stream_class *stream_class,
                "Add event specific context field");
        ok(bt_ctf_event_class_get_context_type(NULL) == NULL,
                "bt_ctf_event_class_get_context_type handles NULL correctly");
-       ok(bt_ctf_event_class_get_context_type(simple_event_class) == NULL,
-               "bt_ctf_event_class_get_context_type returns NULL when no event context type is set");
 
        ok(bt_ctf_event_class_set_context_type(NULL, event_context_type) < 0,
                "bt_ctf_event_class_set_context_type handles a NULL event class correctly");
@@ -532,11 +414,11 @@ void append_simple_event(struct bt_ctf_stream_class *stream_class,
                "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);
@@ -550,17 +432,6 @@ void append_simple_event(struct bt_ctf_stream_class *stream_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");
@@ -597,8 +468,8 @@ void append_simple_event(struct bt_ctf_stream_class *stream_class,
                "Set signed enumeration container value");
        iter = bt_ctf_field_enumeration_get_mappings(enum_field);
        ok(iter, "bt_ctf_field_enumeration_get_mappings returns an iterator to matching mappings");
-       ret = bt_ctf_field_type_enumeration_mapping_iterator_get_name(iter, &ret_char);
-       ok(!ret && ret_char, "bt_ctf_field_type_enumeration_mapping_iterator_get_name return a mapping name");
+       ret = bt_ctf_field_type_enumeration_mapping_iterator_get_signed(iter, &ret_char, NULL, NULL);
+       ok(!ret && ret_char, "bt_ctf_field_type_enumeration_mapping_iterator_get_signed return a mapping name");
        ok(!strcmp(ret_char, mapping_name_negative_test),
                "bt_ctf_field_enumeration_get_single_mapping_name returns the correct mapping name with an signed container");
        ret = bt_ctf_event_set_payload(simple_event, "enum_field", enum_field);
@@ -617,9 +488,9 @@ void append_simple_event(struct bt_ctf_stream_class *stream_class,
        assert(!ret);
        iter = bt_ctf_field_enumeration_get_mappings(enum_field_unsigned);
        assert(iter);
-       (void) bt_ctf_field_type_enumeration_mapping_iterator_get_name(iter, &ret_char);
+       (void) bt_ctf_field_type_enumeration_mapping_iterator_get_unsigned(iter, &ret_char, NULL, NULL);
        ok(ret_char && !strcmp(ret_char, mapping_name_test),
-               "bt_ctf_field_enumeration_get_single_mapping_name returns the correct mapping name with an unsigned container");
+               "bt_ctf_field_type_enumeration_mapping_iterator_get_unsigned returns the correct mapping name with an unsigned container");
 
        ok(bt_ctf_clock_set_time(clock, current_time) == 0, "Set clock time");
 
@@ -1008,21 +879,22 @@ void append_complex_event(struct bt_ctf_stream_class *stream_class,
                "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")) {
@@ -1070,25 +942,25 @@ void append_complex_event(struct bt_ctf_stream_class *stream_class,
                "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,
@@ -1717,8 +1589,8 @@ void field_copy_tests()
 
        /* validate e copy */
        e_iter = bt_ctf_field_enumeration_get_mappings(e_copy);
-       (void) bt_ctf_field_type_enumeration_mapping_iterator_get_name(e_iter,
-               &str_val);
+       (void) bt_ctf_field_type_enumeration_mapping_iterator_get_signed(e_iter,
+               &str_val, NULL, NULL);
        ok(str_val && !strcmp(str_val, "LABEL2"),
                "bt_ctf_field_copy creates a valid enum field copy");
 
@@ -1917,10 +1789,10 @@ void type_field_tests()
                "bt_ctf_field_type_get_byte_order handles NULL correctly");
 
        ok(bt_ctf_field_type_get_type_id(NULL) ==
-               BT_CTF_TYPE_ID_UNKNOWN,
+               BT_CTF_FIELD_TYPE_ID_UNKNOWN,
                "bt_ctf_field_type_get_type_id handles NULL correctly");
        ok(bt_ctf_field_type_get_type_id(uint_12_type) ==
-               BT_CTF_TYPE_ID_INTEGER,
+               BT_CTF_FIELD_TYPE_ID_INTEGER,
                "bt_ctf_field_type_get_type_id returns a correct value with an integer type");
 
        ok(bt_ctf_field_type_integer_get_base(NULL) ==
@@ -1957,7 +1829,7 @@ void type_field_tests()
                bt_ctf_field_type_sequence_create(int_16_type, "seq_len");
        ok(sequence_type, "Create a sequence of int16_t type");
        ok(bt_ctf_field_type_get_type_id(sequence_type) ==
-               BT_CTF_TYPE_ID_SEQUENCE,
+               BT_CTF_FIELD_TYPE_ID_SEQUENCE,
                "bt_ctf_field_type_get_type_id returns a correct value with a sequence type");
 
        ok(bt_ctf_field_type_sequence_get_length_field_name(NULL) == NULL,
@@ -1995,7 +1867,7 @@ void type_field_tests()
 
        structure_seq_type = bt_ctf_field_type_structure_create();
        ok(bt_ctf_field_type_get_type_id(structure_seq_type) ==
-               BT_CTF_TYPE_ID_STRUCT,
+               BT_CTF_FIELD_TYPE_ID_STRUCT,
                "bt_ctf_field_type_get_type_id returns a correct value with a structure type");
        ok(structure_seq_type, "Create a structure type");
        ok(bt_ctf_field_type_structure_add_field(structure_seq_type,
@@ -2293,6 +2165,11 @@ void test_empty_stream(struct bt_ctf_writer *writer)
                goto end;
        }
 
+       ret = bt_ctf_stream_class_set_packet_context_type(stream_class, NULL);
+       assert(ret == 0);
+       ret = bt_ctf_stream_class_set_event_header_type(stream_class, NULL);
+       assert(ret == 0);
+
        ok(bt_ctf_stream_class_get_trace(NULL) == NULL,
                "bt_ctf_stream_class_get_trace handles NULL correctly");
        ok(bt_ctf_stream_class_get_trace(stream_class) == NULL,
@@ -2615,8 +2492,8 @@ void append_existing_event_class(struct bt_ctf_stream_class *stream_class)
 
        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");
@@ -2683,6 +2560,12 @@ void test_create_writer_vs_non_writer_mode(void)
        /* Create writer, writer stream class, stream, and clock */
        writer = bt_ctf_writer_create(trace_path);
        assert(writer);
+       writer_clock = bt_ctf_clock_create("writer_clock");
+       assert(writer_clock);
+       ret = bt_ctf_writer_add_clock(writer, writer_clock);
+       assert(!ret);
+       ret = bt_ctf_writer_set_byte_order(writer, BT_CTF_BYTE_ORDER_LITTLE_ENDIAN);
+       assert(!ret);
        writer_trace = bt_ctf_writer_get_trace(writer);
        ok(writer_trace, "bt_ctf_writer_get_trace() returns a trace");
        writer_sc = bt_ctf_stream_class_create("writer_sc");
@@ -2690,25 +2573,28 @@ void test_create_writer_vs_non_writer_mode(void)
        ret = bt_ctf_stream_class_set_event_header_type(writer_sc,
                empty_struct_ft);
        assert(!ret);
+       ret = bt_ctf_stream_class_set_clock(writer_sc, writer_clock);
+       assert(!ret);
        ret = bt_ctf_trace_add_stream_class(writer_trace, writer_sc);
        assert(!ret);
        writer_stream = bt_ctf_stream_create(writer_sc, writer_stream_name);
        assert(writer_stream);
        ok(!strcmp(bt_ctf_stream_get_name(writer_stream), writer_stream_name),
                "bt_ctf_stream_get_name() returns the stream's name");
-       writer_clock = bt_ctf_clock_create("writer_clock");
-       assert(writer_clock);
-       ret = bt_ctf_writer_add_clock(writer, writer_clock);
-       assert(!ret);
 
        /* Create non-writer trace, stream class, stream, and clock */
        non_writer_trace = bt_ctf_trace_create();
        assert(non_writer_trace);
+       ret = bt_ctf_trace_set_native_byte_order(non_writer_trace,
+               BT_CTF_BYTE_ORDER_LITTLE_ENDIAN);
+       assert(!ret);
        non_writer_sc = bt_ctf_stream_class_create("nonwriter_sc");
        assert(non_writer_sc);
        ret = bt_ctf_stream_class_set_event_header_type(non_writer_sc,
                empty_struct_ft);
        assert(!ret);
+       ret = bt_ctf_stream_class_set_packet_context_type(non_writer_sc, NULL);
+       assert(!ret);
        ret = bt_ctf_trace_add_stream_class(non_writer_trace, non_writer_sc);
        assert(!ret);
        non_writer_stream = bt_ctf_stream_create(non_writer_sc, NULL);
@@ -2884,6 +2770,84 @@ void test_set_clock_non_writer_stream_class(void)
        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_stream_class_set_packet_context_type(stream_class, NULL);
+       assert(ret == 0);
+       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");
+       assert(ret_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";
@@ -2907,6 +2871,7 @@ int main(int argc, char **argv)
        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 };
@@ -2924,8 +2889,8 @@ int main(int argc, char **argv)
        int64_t ret_int64_t;
        struct bt_value *obj;
 
-       if (argc < 3) {
-               printf("Usage: tests-ctf-writer path_to_ctf_parser_test path_to_babeltrace\n");
+       if (argc < 2) {
+               printf("Usage: tests-ctf-writer path_to_babeltrace\n");
                return -1;
        }
 
@@ -2946,10 +2911,10 @@ int main(int argc, char **argv)
        trace = bt_ctf_writer_get_trace(writer);
        ok(trace,
                "bt_ctf_writer_get_trace returns a bt_ctf_trace object");
-       ok(bt_ctf_trace_set_byte_order(trace, BT_CTF_BYTE_ORDER_BIG_ENDIAN) == 0,
+       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));
@@ -3019,41 +2984,37 @@ int main(int argc, char **argv)
                "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,
-               "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,
-               "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");
@@ -3080,7 +3041,7 @@ int main(int argc, char **argv)
                "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");
@@ -3278,7 +3239,7 @@ int main(int argc, char **argv)
                stream_class);
        ok(ret_field_type,
                "bt_ctf_stream_class_get_event_header_type returns an event header type");
-       ok(bt_ctf_field_type_get_type_id(ret_field_type) == BT_CTF_TYPE_ID_STRUCT,
+       ok(bt_ctf_field_type_get_type_id(ret_field_type) == BT_CTF_FIELD_TYPE_ID_STRUCT,
                "Default event header type is a structure");
        event_header_field_type =
                bt_ctf_field_type_structure_get_field_type_by_name(
@@ -3286,7 +3247,7 @@ int main(int argc, char **argv)
        ok(event_header_field_type,
                "Default event header type contains an \"id\" field");
        ok(bt_ctf_field_type_get_type_id(
-               event_header_field_type) == BT_CTF_TYPE_ID_INTEGER,
+               event_header_field_type) == BT_CTF_FIELD_TYPE_ID_INTEGER,
                "Default event header \"id\" field is an integer");
        bt_put(event_header_field_type);
        event_header_field_type =
@@ -3295,7 +3256,7 @@ int main(int argc, char **argv)
        ok(event_header_field_type,
                "Default event header type contains a \"timestamp\" field");
        ok(bt_ctf_field_type_get_type_id(
-               event_header_field_type) == BT_CTF_TYPE_ID_INTEGER,
+               event_header_field_type) == BT_CTF_FIELD_TYPE_ID_INTEGER,
                "Default event header \"timestamp\" field is an integer");
        bt_put(event_header_field_type);
        bt_put(ret_field_type);
@@ -3306,7 +3267,7 @@ int main(int argc, char **argv)
        packet_header_type = bt_ctf_trace_get_packet_header_type(trace);
        ok(packet_header_type,
                "bt_ctf_trace_get_packet_header_type returns a packet header");
-       ok(bt_ctf_field_type_get_type_id(packet_header_type) == BT_CTF_TYPE_ID_STRUCT,
+       ok(bt_ctf_field_type_get_type_id(packet_header_type) == BT_CTF_FIELD_TYPE_ID_STRUCT,
                "bt_ctf_trace_get_packet_header_type returns a packet header of type struct");
        ret_field_type = bt_ctf_field_type_structure_get_field_type_by_name(
                packet_header_type, "magic");
@@ -3338,7 +3299,7 @@ int main(int argc, char **argv)
        packet_context_type = bt_ctf_stream_class_get_packet_context_type(stream_class);
        ok(packet_context_type,
                "bt_ctf_stream_class_get_packet_context_type returns a packet context type.");
-       ok(bt_ctf_field_type_get_type_id(packet_context_type) == BT_CTF_TYPE_ID_STRUCT,
+       ok(bt_ctf_field_type_get_type_id(packet_context_type) == BT_CTF_FIELD_TYPE_ID_STRUCT,
                "Packet context is a structure");
 
        ok(bt_ctf_stream_class_set_packet_context_type(NULL, packet_context_type),
@@ -3358,9 +3319,6 @@ int main(int argc, char **argv)
        /* Define a stream event context containing a my_integer field. */
        ok(bt_ctf_stream_class_get_event_context_type(NULL) == NULL,
                "bt_ctf_stream_class_get_event_context_type handles NULL correctly");
-       ok(bt_ctf_stream_class_get_event_context_type(
-               stream_class) == NULL,
-               "bt_ctf_stream_class_get_event_context_type returns NULL when no stream event context type was set.");
        stream_event_context_type = bt_ctf_field_type_structure_create();
        bt_ctf_field_type_structure_add_field(stream_event_context_type,
                integer_type, "common_event_context");
@@ -3384,8 +3342,16 @@ int main(int argc, char **argv)
        /* 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
@@ -3396,13 +3362,11 @@ int main(int argc, char **argv)
                "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),
-               "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");
@@ -3528,12 +3492,14 @@ int main(int argc, char **argv)
 
        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");
 
        bt_ctf_writer_flush_metadata(writer);
-       validate_metadata(argv[1], metadata_path);
-       validate_trace(argv[2], trace_path);
 
        bt_put(clock);
        bt_put(ret_stream_class);
@@ -3552,6 +3518,8 @@ int main(int argc, char **argv)
        free(metadata_string);
        bt_put(stream_class);
 
-       recursive_rmdir(trace_path);
+       validate_trace(argv[1], trace_path);
+
+       //recursive_rmdir(trace_path);
        return 0;
 }
This page took 0.039926 seconds and 4 git commands to generate.