X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=tests%2Flib%2Ftest_ctf_writer.c;h=e0236a380e3aa563762354d144ea20096496e0dc;hp=d7f7db7bcdd8f687bb04d8b7faf4d7a6c482af07;hb=5606034769d535dcc6aed8cfe66f9fdce42fb6dc;hpb=0abce37efb1cdc6a34a5844dae45992f7055f6a3 diff --git a/tests/lib/test_ctf_writer.c b/tests/lib/test_ctf_writer.c index d7f7db7b..e0236a38 100644 --- a/tests/lib/test_ctf_writer.c +++ b/tests/lib/test_ctf_writer.c @@ -19,7 +19,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#define _GNU_SOURCE #include #include #include @@ -28,17 +27,18 @@ #include #include #include -#include +#include #include #include -#include +#include #include #include #include #include #include -#include +#include #include "tap/tap.h" +#include #define METADATA_LINE_SIZE 512 #define SEQUENCE_TEST_LENGTH 10 @@ -254,13 +254,30 @@ void append_simple_event(struct bt_ctf_stream_class *stream_class, bt_ctf_field_type_integer_create(12); struct bt_ctf_field_type *float_type = bt_ctf_field_type_floating_point_create(); + struct bt_ctf_field_type *enum_type = + bt_ctf_field_type_enumeration_create(uint_12_type); struct bt_ctf_event *simple_event; struct bt_ctf_field *integer_field; struct bt_ctf_field *float_field; + struct bt_ctf_field *enum_field; + struct bt_ctf_field *enum_container_field; bt_ctf_field_type_set_alignment(float_type, 32); bt_ctf_field_type_floating_point_set_exponent_digits(float_type, 11); bt_ctf_field_type_floating_point_set_mantissa_digits(float_type, 53); + + ok(bt_ctf_field_type_enumeration_add_mapping(enum_type, + "escaping; \"test\"", 0, 0) == 0, + "Accept enumeration mapping strings containing quotes"); + ok(bt_ctf_field_type_enumeration_add_mapping(enum_type, + "\tanother \'escaping\'\n test\"", 1, 4) == 0, + "Accept enumeration mapping strings containing special characters"); + ok(bt_ctf_field_type_enumeration_add_mapping(enum_type, + "event clock int float", 5, 22) == 0, + "Accept enumeration mapping strings containing reserved keywords"); + ok(bt_ctf_event_class_add_field(simple_event_class, enum_type, + "enum_field") == 0, "Add enumeration field to event"); + ok(uint_12_type, "Create an unsigned integer type"); bt_ctf_event_class_add_field(simple_event_class, uint_12_type, "integer_field"); @@ -281,6 +298,13 @@ void append_simple_event(struct bt_ctf_stream_class *stream_class, float_field = bt_ctf_event_get_payload(simple_event, "float_field"); bt_ctf_field_floating_point_set_value(float_field, 3.1415); + enum_field = bt_ctf_field_create(enum_type); + enum_container_field = bt_ctf_field_enumeration_get_container( + enum_field); + ok(bt_ctf_field_unsigned_integer_set_value( + enum_container_field, 1) == 0, + "Set enumeration container value"); + bt_ctf_event_set_payload(simple_event, "enum_field", enum_field); ok(bt_ctf_clock_set_time(clock, current_time) == 0, "Set clock time"); @@ -294,8 +318,11 @@ void append_simple_event(struct bt_ctf_stream_class *stream_class, bt_ctf_event_put(simple_event); bt_ctf_field_type_put(uint_12_type); bt_ctf_field_type_put(float_type); + bt_ctf_field_type_put(enum_type); bt_ctf_field_put(integer_field); bt_ctf_field_put(float_field); + bt_ctf_field_put(enum_field); + bt_ctf_field_put(enum_container_field); } void append_complex_event(struct bt_ctf_stream_class *stream_class, @@ -594,7 +621,7 @@ void type_field_tests() ok(!enumeration_array_type, "Check enumeration types are validated when creating an array"); ok(bt_ctf_field_type_structure_add_field(composite_structure_type, - enumeration_type, "enumeration") == 0, + enumeration_type, "enumeration"), "Check enumeration types are validated when adding them as structure members"); enumeration = bt_ctf_field_create(enumeration_type); ok(!enumeration, @@ -688,10 +715,11 @@ int main(int argc, char **argv) char *metadata_string; struct bt_ctf_writer *writer; struct utsname name; - char hostname[HOST_NAME_MAX]; + char hostname[BABELTRACE_HOST_NAME_MAX]; struct bt_ctf_clock *clock; struct bt_ctf_stream_class *stream_class; struct bt_ctf_stream *stream1; + int ret; if (argc < 3) { printf("Usage: tests-ctf-writer path_to_ctf_parser_test path_to_babeltrace\n"); @@ -700,7 +728,7 @@ int main(int argc, char **argv) plan_no_plan(); - if (!mkdtemp(trace_path)) { + if (!bt_mkdtemp(trace_path)) { perror("# perror"); } @@ -711,7 +739,10 @@ int main(int argc, char **argv) ok(writer, "bt_ctf_create succeeds in creating trace with path"); /* Add environment context to the trace */ - gethostname(hostname, HOST_NAME_MAX); + ret = gethostname(hostname, sizeof(hostname)); + if (ret < 0) { + return ret; + } ok(bt_ctf_writer_add_environment_field(writer, "host", hostname) == 0, "Add host (%s) environment field to writer instance", hostname); @@ -725,7 +756,8 @@ int main(int argc, char **argv) NULL), "bt_ctf_writer_add_environment_field error with NULL field value"); - if (uname(&name)) { + /* On Solaris, uname() can return any positive value on success */ + if (uname(&name) < 0) { perror("uname"); return -1; } @@ -814,8 +846,20 @@ int main(int argc, char **argv) struct dirent *entry; while ((entry = readdir(trace_dir))) { - if (entry->d_type == DT_REG) { - unlinkat(dirfd(trace_dir), entry->d_name, 0); + struct stat st; + char filename[PATH_MAX]; + + if (snprintf(filename, sizeof(filename), "%s/%s", + trace_path, entry->d_name) <= 0) { + continue; + } + + if (stat(entry->d_name, &st)) { + continue; + } + + if (S_ISREG(st.st_mode)) { + unlinkat(bt_dirfd(trace_dir), entry->d_name, 0); } }