#include <babeltrace/ref.h>
#include <babeltrace/ctf/events.h>
#include <babeltrace/values.h>
+#include <glib.h>
#include <unistd.h>
#include <babeltrace/compat/stdlib-internal.h>
#include <stdio.h>
#define METADATA_LINE_SIZE 512
#define SEQUENCE_TEST_LENGTH 10
#define ARRAY_TEST_LENGTH 5
-#define PACKET_RESIZE_TEST_LENGTH 5
+#define PACKET_RESIZE_TEST_DEF_LENGTH 100000
#define DEFAULT_CLOCK_FREQ 1000000000
#define DEFAULT_CLOCK_PRECISION 1
#define DEFAULT_CLOCK_TIME 0
#define DEFAULT_CLOCK_VALUE 0
-#define NR_TESTS 621
+#define NR_TESTS 623
static int64_t current_time = 42;
+static unsigned int packet_resize_test_length = PACKET_RESIZE_TEST_DEF_LENGTH;
/* Return 1 if uuids match, zero if different. */
static
void validate_trace(char *parser_path, char *trace_path)
{
int ret = 0;
- char babeltrace_output_path[] = "/tmp/babeltrace_output_XXXXXX";
+ gchar *babeltrace_output_path;
int babeltrace_output_fd = -1;
if (!trace_path) {
goto result;
}
- babeltrace_output_fd = mkstemp(babeltrace_output_path);
+ babeltrace_output_fd = g_file_open_tmp("babeltrace_output_XXXXXX",
+ &babeltrace_output_path, NULL);
unlink(babeltrace_output_path);
+ g_free(babeltrace_output_path);
if (babeltrace_output_fd == -1) {
diag("Failed to create a temporary file for trace parsing.");
goto result;
}
- execl(parser_path, "babeltrace", trace_path, NULL);
+ execl(parser_path, parser_path, trace_path, NULL);
perror("# Could not launch the babeltrace process");
exit(-1);
}
ok(bt_ctf_field_type_enumeration_add_mapping_unsigned(enum_type_unsigned,
"event clock int float", 5, 22) == 0,
"bt_ctf_field_type_enumeration_add_mapping_unsigned accepts enumeration mapping strings containing reserved keywords");
- bt_ctf_field_type_enumeration_add_mapping_unsigned(enum_type_unsigned, mapping_name_test,
- 42, 42);
+ ok(bt_ctf_field_type_enumeration_add_mapping_unsigned(enum_type_unsigned, mapping_name_test,
+ 42, 42) == 0, "bt_ctf_field_type_enumeration_add_mapping_unsigned accepts single-value ranges");
ok(bt_ctf_field_type_enumeration_add_mapping_unsigned(enum_type_unsigned, mapping_name_test,
43, 51) == 0, "bt_ctf_field_type_enumeration_add_mapping_unsigned accepts duplicate mapping names");
ok(bt_ctf_field_type_enumeration_add_mapping_unsigned(enum_type_unsigned, "something",
"bt_ctf_event_get_payload_by_index handles an invalid index correctly");
bt_put(event);
- for (i = 0; i < PACKET_RESIZE_TEST_LENGTH; i++) {
+ for (i = 0; i < packet_resize_test_length; i++) {
event = bt_ctf_event_create(event_class);
struct bt_ctf_field *integer =
bt_ctf_field_create(ep_field_1_type);
}
}
- events_appended = !!(i == PACKET_RESIZE_TEST_LENGTH);
+ events_appended = !!(i == packet_resize_test_length);
ok(bt_ctf_stream_get_discarded_events_count(NULL, &ret_uint64) < 0,
"bt_ctf_stream_get_discarded_events_count handles a NULL stream correctly");
ok(bt_ctf_stream_get_discarded_events_count(stream, NULL) < 0,
void test_create_writer_vs_non_writer_mode(void)
{
int ret;
- char trace_path[] = "/tmp/ctfwriter_XXXXXX";
+ gchar *trace_path;
const char *writer_stream_name = "writer stream instance";
struct bt_ctf_writer *writer = NULL;
struct bt_ctf_trace *writer_trace = NULL;
struct bt_ctf_packet *packet = NULL;
struct bt_ctf_packet *packet2 = NULL;
+ trace_path = g_build_filename(g_get_tmp_dir(), "ctfwriter_XXXXXX", NULL);
if (!bt_mkdtemp(trace_path)) {
perror("# perror");
}
non_writer_stream = bt_ctf_stream_create(non_writer_sc, NULL);
assert(non_writer_stream);
non_writer_clock_class =
- bt_ctf_clock_class_create("non_writer_clock_class");
+ bt_ctf_clock_class_create("non_writer_clock_class",
+ 1000000000);
assert(non_writer_clock_class);
ret = bt_ctf_trace_add_clock_class(non_writer_trace,
non_writer_clock_class);
bt_put(packet);
bt_put(packet2);
recursive_rmdir(trace_path);
+ g_free(trace_path);
}
static
"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");
+ clock_class = bt_ctf_clock_class_create("yes", 1000000000);
assert(clock_class);
stream_class2 = bt_ctf_stream_class_create(NULL);
assert(stream_class2);
static
void trace_is_static_listener(struct bt_ctf_trace *trace, void *data)
{
- *((int *) data) = 1;
+ *((int *) data) |= 1;
+}
+
+static
+void trace_listener_removed(struct bt_ctf_trace *trace, void *data)
+{
+ *((int *) data) |= 2;
}
static
trace = bt_ctf_trace_create();
assert(trace);
ret = bt_ctf_trace_add_is_static_listener(NULL,
- trace_is_static_listener, &called1);
+ trace_is_static_listener, trace_listener_removed, &called1);
ok(ret < 0, "bt_ctf_trace_add_is_static_listener() handles NULL (trace)");
- ret = bt_ctf_trace_add_is_static_listener(trace, NULL, &called1);
+ ret = bt_ctf_trace_add_is_static_listener(trace, NULL,
+ trace_listener_removed, &called1);
ok(ret < 0, "bt_ctf_trace_add_is_static_listener() handles NULL (listener)");
listener1_id = bt_ctf_trace_add_is_static_listener(trace,
- trace_is_static_listener, &called1);
+ trace_is_static_listener, trace_listener_removed, &called1);
ok(listener1_id >= 0, "bt_ctf_trace_add_is_static_listener() succeeds (1)");
listener2_id = bt_ctf_trace_add_is_static_listener(trace,
- trace_is_static_listener, &called2);
+ trace_is_static_listener, trace_listener_removed, &called2);
ok(listener2_id >= 0, "bt_ctf_trace_add_is_static_listener() succeeds (2)");
listener3_id = bt_ctf_trace_add_is_static_listener(trace,
- trace_is_static_listener, &called3);
+ trace_is_static_listener, trace_listener_removed, &called3);
ok(listener3_id >= 0, "bt_ctf_trace_add_is_static_listener() succeeds (3)");
ret = bt_ctf_trace_remove_is_static_listener(NULL, 0);
ok(ret < 0, "bt_ctf_trace_remove_is_static_listener() handles NULL (trace)");
ok(ret < 0, "bt_ctf_trace_remove_is_static_listener() handles invalid ID (non existing)");
ret = bt_ctf_trace_remove_is_static_listener(trace, listener2_id);
ok(ret == 0, "bt_ctf_trace_remove_is_static_listener() succeeds");
+ ok(called2 == 2, "bt_ctf_trace_remove_is_static_listener() calls the remove listener");
listener4_id = bt_ctf_trace_add_is_static_listener(trace,
- trace_is_static_listener, &called4);
+ trace_is_static_listener, NULL, &called4);
ok(listener4_id >= 0, "bt_ctf_trace_add_is_static_listener() succeeds (4)");
ok(called1 == 0, "\"trace is static\" listener not called before the trace is made static (1)");
- ok(called2 == 0, "\"trace is static\" listener not called before the trace is made static (2)");
+ ok(called2 == 2, "\"trace is static\" listener not called before the trace is made static (2)");
ok(called3 == 0, "\"trace is static\" listener not called before the trace is made static (3)");
ok(called4 == 0, "\"trace is static\" listener not called before the trace is made static (4)");
ret = bt_ctf_trace_set_is_static(trace);
assert(ret == 0);
ret = bt_ctf_trace_add_is_static_listener(trace,
- trace_is_static_listener, &called1);
+ trace_is_static_listener, trace_listener_removed, &called1);
ok(ret < 0,
"bt_ctf_trace_add_is_static_listener() fails when the trace is static");
ok(called1 == 1, "\"trace is static\" listener called when the trace is made static (1)");
- ok(called2 == 0, "\"trace is static\" listener not called when the trace is made static (2)");
+ ok(called2 == 2, "\"trace is static\" listener not called when the trace is made static (2)");
ok(called3 == 1, "\"trace is static\" listener called when the trace is made static (3)");
ok(called4 == 1, "\"trace is static\" listener called when the trace is made static (4)");
called1 = 0;
called3 = 0;
called4 = 0;
bt_put(trace);
- ok(called1 == 0, "\"trace is static\" listener not called after the trace is put (1)");
+ ok(called1 == 2, "\"trace is static\" listener not called after the trace is put (1)");
ok(called2 == 0, "\"trace is static\" listener not called after the trace is put (2)");
- ok(called3 == 0, "\"trace is static\" listener not called after the trace is put (3)");
+ ok(called3 == 2, "\"trace is static\" listener not called after the trace is put (3)");
ok(called4 == 0, "\"trace is static\" listener not called after the trace is put (4)");
}
int main(int argc, char **argv)
{
- char trace_path[] = "/tmp/ctfwriter_XXXXXX";
- char metadata_path[sizeof(trace_path) + 9];
+ const char *env_resize_length;
+ gchar *trace_path;
+ gchar *metadata_path;
const char *clock_name = "test_clock";
const char *clock_description = "This is a test clock";
const char *returned_clock_name;
const char *returned_clock_description;
const uint64_t frequency = 1123456789;
- const int64_t offset_s = 1351530929945824323;
+ const int64_t offset_s = 13515309;
const int64_t offset = 1234567;
int64_t get_offset_s,
get_offset;
return -1;
}
+ env_resize_length = getenv("PACKET_RESIZE_TEST_LENGTH");
+ if (env_resize_length) {
+ packet_resize_test_length =
+ (unsigned int) atoi(env_resize_length);
+ }
+
plan_tests(NR_TESTS);
+ trace_path = g_build_filename(g_get_tmp_dir(), "ctfwriter_XXXXXX", NULL);
if (!bt_mkdtemp(trace_path)) {
perror("# perror");
}
- strcpy(metadata_path, trace_path);
- strcat(metadata_path + sizeof(trace_path) - 1, "/metadata");
+ metadata_path = g_build_filename(trace_path, "metadata", NULL);
writer = bt_ctf_writer_create(trace_path);
ok(writer, "bt_ctf_create succeeds in creating trace with path");
validate_trace(argv[1], trace_path);
- //recursive_rmdir(trace_path);
+ recursive_rmdir(trace_path);
+ g_free(trace_path);
+ g_free(metadata_path);
+
return 0;
}