X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=tests%2Flib%2Ftest_ctf_writer.c;h=4ea02bccb0eadf8abf15024732f690611e738cf4;hb=37566b71e5598181de2ecdb390a8cab19786f4e1;hp=8c168edbe06dd6b58927f0002ff20edf4af739ea;hpb=e1d776cd53da3f4caa6eacb3ca836fa5b3a598bd;p=babeltrace.git diff --git a/tests/lib/test_ctf_writer.c b/tests/lib/test_ctf_writer.c index 8c168edb..4ea02bcc 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,16 +27,16 @@ #include #include #include -#include +#include #include #include -#include +#include #include #include #include #include #include -#include +#include #include "tap/tap.h" #define METADATA_LINE_SIZE 512 @@ -100,7 +99,7 @@ void validate_metadata(char *parser_path, char *metadata_path) result: ok(ret == 0, "Metadata string is valid"); - if (ret && metadata_fd > 0 && parser_output_fd > 0) { + 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; @@ -150,12 +149,12 @@ close_fp: } } - if (parser_output_fd > 0) { + if (parser_output_fd >= 0) { if (close(parser_output_fd)) { diag("close error"); } } - if (metadata_fd > 0) { + if (metadata_fd >= 0) { if (close(metadata_fd)) { diag("close error"); } @@ -207,7 +206,7 @@ void validate_trace(char *parser_path, char *trace_path) result: ok(ret == 0, "Babeltrace could read the resulting trace"); - if (ret && babeltrace_output_fd > 0) { + if (ret && babeltrace_output_fd >= 0) { char *line; size_t len = METADATA_LINE_SIZE; FILE *babeltrace_output_fp = NULL; @@ -237,7 +236,7 @@ close_fp: } } - if (babeltrace_output_fd > 0) { + if (babeltrace_output_fd >= 0) { if (close(babeltrace_output_fd)) { diag("close error"); } @@ -254,13 +253,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 +297,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 +317,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, @@ -469,6 +495,7 @@ void type_field_tests() struct bt_ctf_field *uint_12; struct bt_ctf_field *int_16; struct bt_ctf_field *string; + struct bt_ctf_field *enumeration; struct bt_ctf_field_type *composite_structure_type; struct bt_ctf_field_type *structure_seq_type; struct bt_ctf_field_type *string_type; @@ -477,6 +504,9 @@ void type_field_tests() struct bt_ctf_field_type *int_16_type; struct bt_ctf_field_type *uint_12_type = bt_ctf_field_type_integer_create(12); + struct bt_ctf_field_type *enumeration_type; + struct bt_ctf_field_type *enumeration_sequence_type; + struct bt_ctf_field_type *enumeration_array_type; ok(uint_12_type, "Create an unsigned integer type"); ok(bt_ctf_field_type_integer_set_base(uint_12_type, @@ -578,9 +608,28 @@ void type_field_tests() ok(bt_ctf_field_string_set_value(string, "A value") == 0, "Set a string's value"); + enumeration_type = bt_ctf_field_type_enumeration_create(uint_12_type); + ok(enumeration_type, + "Create an enumeration type with an unsigned 12-bit integer as container"); + enumeration_sequence_type = bt_ctf_field_type_sequence_create( + enumeration_type, "count"); + ok(!enumeration_sequence_type, + "Check enumeration types are validated when creating a sequence"); + enumeration_array_type = bt_ctf_field_type_array_create( + enumeration_type, 10); + 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"), + "Check enumeration types are validated when adding them as structure members"); + enumeration = bt_ctf_field_create(enumeration_type); + ok(!enumeration, + "Check enumeration types are validated before instantiation"); + bt_ctf_field_put(string); bt_ctf_field_put(uint_12); bt_ctf_field_put(int_16); + bt_ctf_field_put(enumeration); bt_ctf_field_type_put(composite_structure_type); bt_ctf_field_type_put(structure_seq_type); bt_ctf_field_type_put(string_type); @@ -588,6 +637,9 @@ void type_field_tests() bt_ctf_field_type_put(uint_8_type); bt_ctf_field_type_put(int_16_type); bt_ctf_field_type_put(uint_12_type); + bt_ctf_field_type_put(enumeration_type); + bt_ctf_field_type_put(enumeration_sequence_type); + bt_ctf_field_type_put(enumeration_array_type); } void packet_resize_test(struct bt_ctf_stream_class *stream_class, @@ -662,10 +714,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"); @@ -674,7 +727,7 @@ int main(int argc, char **argv) plan_no_plan(); - if (!mkdtemp(trace_path)) { + if (!bt_mkdtemp(trace_path)) { perror("# perror"); } @@ -685,7 +738,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); @@ -699,7 +755,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; } @@ -789,7 +846,7 @@ 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); + unlinkat(bt_dirfd(trace_dir), entry->d_name, 0); } }