finish:
return ret;
}
+TEST_ENTRY_POINT(deserialize_ae_event);
static void ae_event_release(struct faultd_event *ev)
{
finish:
return ret;
}
+TEST_ENTRY_POINT(deserialize_dm_event);
static void dm_event_release(struct faultd_event *ev)
{
finish:
return ret;
}
+TEST_ENTRY_POINT(deserialize_fs_event);
static void fs_event_release(struct faultd_event *ev)
{
finish:
return ret;
}
+TEST_ENTRY_POINT(deserialize_rv_event);
static void rv_event_release(struct faultd_event *ev)
{
finish:
return ret;
}
+TEST_ENTRY_POINT(deserialize_sf_event);
static void sf_event_release(struct faultd_event *ev)
{
finish:
return ret;
}
+TEST_ENTRY_POINT(deserialize_sb_event);
static void sb_event_release(struct faultd_event *ev)
{
#include "action_executed_event.h"
#include "helpers.h"
+#include "database.h"
#define TESTED_MOD action_executed_event
DECLARE_TEST_ENTRY_POINT(TESTED_MOD, ae_event_serialize, void);
+DECLARE_TEST_ENTRY_POINT(TESTED_MOD, deserialize_ae_event, int);
static struct faultd_event *alloc_event()
{
NULL);
}
+static int setup_deserialization(void **state)
+{
+ return setup_event_serialization(state, alloc_event, generate_test_attrs,
+ (serialize_func_t)CALL_TEST_ENTRY_POINT(
+ TESTED_MOD, ae_event_serialize),
+ (deserialize_func_t)CALL_TEST_ENTRY_POINT(
+ TESTED_MOD, deserialize_ae_event));
+}
+
static int teardown(void **state)
{
struct serialize_test_data *td = *state;
FAULTD_TEST_GROUP(
FAULTD_TEST_CASE_NST("ae_ev_serialize_test", test_event_serialization,
- setup, teardown)
+ setup, teardown),
+ FAULTD_TEST_CASE_NST("ae_ev_deserialize_test", test_event_deserialization,
+ setup_deserialization, teardown)
)
#define TESTED_MOD decision_made_event
DECLARE_TEST_ENTRY_POINT(TESTED_MOD, dm_event_serialize, void);
+DECLARE_TEST_ENTRY_POINT(TESTED_MOD, deserialize_dm_event, int);
static struct faultd_event *alloc_event()
{
{
return setup_event_serialization(state, alloc_event, generate_test_attrs,
(serialize_func_t)CALL_TEST_ENTRY_POINT(
- TESTED_MOD, dm_event_serialize));
+ TESTED_MOD, dm_event_serialize),
+ NULL);
+}
+
+static int setup_deserialization(void **state)
+{
+ return setup_event_serialization(state, alloc_event, generate_test_attrs,
+ (serialize_func_t)CALL_TEST_ENTRY_POINT(
+ TESTED_MOD, dm_event_serialize),
+ (deserialize_func_t)CALL_TEST_ENTRY_POINT(
+ TESTED_MOD, deserialize_dm_event));
}
static int teardown(void **state)
FAULTD_TEST_GROUP(
FAULTD_TEST_CASE_NST("dm_ev_serialize_test", test_event_serialization,
- setup, teardown)
+ setup, teardown),
+ FAULTD_TEST_CASE_NST("dm_ev_deserialize_test", test_event_deserialization,
+ setup_deserialization, teardown)
)
#define TESTED_MOD faultd_started_event
DECLARE_TEST_ENTRY_POINT(TESTED_MOD, fs_event_serialize, void);
+DECLARE_TEST_ENTRY_POINT(TESTED_MOD, deserialize_fs_event, int);
static struct faultd_event *alloc_event()
{
NULL);
}
+static int setup_deserialization(void **state)
+{
+ return setup_event_serialization(state, alloc_event, generate_test_attrs,
+ (serialize_func_t)CALL_TEST_ENTRY_POINT(
+ TESTED_MOD, fs_event_serialize),
+ (deserialize_func_t)CALL_TEST_ENTRY_POINT(
+ TESTED_MOD, deserialize_fs_event));
+}
+
static int teardown(void **state)
{
struct serialize_test_data *td = *state;
FAULTD_TEST_GROUP(
FAULTD_TEST_CASE_NST("fs_ev_serialize_test", test_event_serialization,
- setup, teardown)
+ setup, teardown),
+ FAULTD_TEST_CASE_NST("fs_ev_deserialize_test", test_event_deserialization,
+ setup_deserialization, teardown)
)
assert_int_equal(faultd_object_count_children(parent), size);
}
+void assert_test_attrs_equal(struct serialized_element *actual,
+ struct serialized_element *desired, int size)
+{
+ for (int i = 0; i < size; i++) {
+ assert_int_equal(actual[i].type, desired[i].type);
+
+ switch (actual[i].type) {
+ case TYPE_OBJECT:
+ assert_test_attrs_equal(actual[i].child, desired[i].child, actual[i].children_num);
+ break;
+ default:
+ assert_data_equal(actual[i].type, actual[i].desired, desired[i].desired);
+ break;
+ }
+ }
+}
+
void assert_faultd_object_equal(struct faultd_object *actual,
struct faultd_object *desired)
{
test_serialization(td->test_data, td->size, td->fd_obj);
}
+void test_event_deserialization(void **state)
+{
+ struct serialize_test_data *td = *state;
+ struct serialize_test_data td_out;
+ int ret;
+
+ td->serialize_func(td->ev, td->fd_obj);
+
+ ret = td->deserialize_func(td->ev->type, td->fd_obj, &td_out.ev);
+ assert_int_equal(ret, 0);
+
+ td->generate_attrs_func(&td_out);
+
+ /*
+ * generate_test_attrs function stores only pointers to
+ * serialized/deserialized variables in test_data structure array,
+ * so it's enough to compare td->test_data and td_out.test_data
+ */
+
+ assert_test_attrs_equal(td->test_data, td_out.test_data, td->size);
+
+ serialized_elems_free(td_out.test_data, td_out.size);
+}
+
struct serialized_element *serialized_elems_dup(
struct serialized_element *elems, size_t size)
{
int setup_event_serialization(void **state,
struct faultd_event *(*alloc_event)(),
generate_attrs_func_t generate_attrs,
- serialize_func_t serialize_func)
+ serialize_func_t serialize_func,
+ deserialize_func_t deserialize_func)
{
struct serialize_test_data *td;
int ret;
/* store generate_attrs function pointer for further use */
td->generate_attrs_func = generate_attrs;
td->serialize_func = serialize_func;
+ td->deserialize_func = deserialize_func;
*state = td;
return 0;
struct faultd_object *parent);
int faultd_object_count_children(struct faultd_object *obj);
+void assert_test_attrs_equal(struct serialized_element *actual,
+ struct serialized_element *desired, int size);
void assert_faultd_object_equal(struct faultd_object *actual,
struct faultd_object *desired);
void assert_data_equal(int type, void *actual, void *desired);
struct serialize_test_data;
typedef void (*serialize_func_t)(struct faultd_event *, struct faultd_object *);
+typedef int (*deserialize_func_t)(struct faultd_event_type *,
+ struct faultd_object *, struct faultd_event **);
typedef void (*generate_attrs_func_t)(struct serialize_test_data *);
struct serialize_test_data {
struct serialized_element *test_data;
size_t size;
serialize_func_t serialize_func;
+ deserialize_func_t deserialize_func;
generate_attrs_func_t generate_attrs_func;
};
void test_event_serialization(void **state);
+void test_event_deserialization(void **state);
struct serialized_element *serialized_elems_dup(
struct serialized_element *elems, size_t size);
int setup_event_serialization(void **state,
struct faultd_event *(*alloc_event)(),
generate_attrs_func_t generate_attrs,
- serialize_func_t serialize_func);
+ serialize_func_t serialize_func,
+ deserialize_func_t deserialize_func);
static inline void allocate_boot_event()
{
#define TESTED_MOD resource_violation_event
DECLARE_TEST_ENTRY_POINT(TESTED_MOD, rv_event_serialize, void);
+DECLARE_TEST_ENTRY_POINT(TESTED_MOD, deserialize_rv_event, int);
static struct faultd_event *alloc_event()
{
{
return setup_event_serialization(state, alloc_event, generate_test_attrs,
(serialize_func_t)CALL_TEST_ENTRY_POINT(
- TESTED_MOD, rv_event_serialize));
+ TESTED_MOD, rv_event_serialize),
+ NULL);
+}
+
+static int setup_deserialization(void **state)
+{
+ return setup_event_serialization(state, alloc_event, generate_test_attrs,
+ (serialize_func_t)CALL_TEST_ENTRY_POINT(
+ TESTED_MOD, rv_event_serialize),
+ (deserialize_func_t)CALL_TEST_ENTRY_POINT(
+ TESTED_MOD, deserialize_rv_event));
}
static int teardown(void **state)
FAULTD_TEST_GROUP(
FAULTD_TEST_CASE_NST("rv_ev_serialize_test", test_event_serialization,
- setup, teardown)
+ setup, teardown),
+ FAULTD_TEST_CASE_NST("rv_ev_deserialize_test", test_event_deserialization,
+ setup_deserialization, teardown)
)
#define TESTED_MOD service_failed_event
DECLARE_TEST_ENTRY_POINT(TESTED_MOD, sf_event_serialize, void);
+DECLARE_TEST_ENTRY_POINT(TESTED_MOD, deserialize_sf_event, int);
static struct faultd_event *alloc_event()
{
{
return setup_event_serialization(state, alloc_event, generate_test_attrs,
(serialize_func_t)CALL_TEST_ENTRY_POINT(
- TESTED_MOD, sf_event_serialize));
+ TESTED_MOD, sf_event_serialize),
+ NULL);
+}
+
+static int setup_deserialization(void **state)
+{
+ return setup_event_serialization(state, alloc_event, generate_test_attrs,
+ (serialize_func_t)CALL_TEST_ENTRY_POINT(
+ TESTED_MOD, sf_event_serialize),
+ (deserialize_func_t)CALL_TEST_ENTRY_POINT(
+ TESTED_MOD, deserialize_sf_event));
}
static int teardown(void **state)
FAULTD_TEST_GROUP(
FAULTD_TEST_CASE_NST("sf_ev_serialize_test", test_event_serialization,
- setup, teardown)
+ setup, teardown),
+ FAULTD_TEST_CASE_NST("sf_ev_deserialize_test", test_event_deserialization,
+ setup_deserialization, teardown)
)
#define TESTED_MOD system_booted_event
DECLARE_TEST_ENTRY_POINT(TESTED_MOD, sb_event_serialize, void);
+DECLARE_TEST_ENTRY_POINT(TESTED_MOD, deserialize_sb_event, int);
static struct faultd_event *alloc_event()
{
{
return setup_event_serialization(state, alloc_event, generate_test_attrs,
(serialize_func_t)CALL_TEST_ENTRY_POINT(
- TESTED_MOD, sb_event_serialize));
+ TESTED_MOD, sb_event_serialize),
+ NULL);
+}
+
+static int setup_deserialization(void **state)
+{
+ return setup_event_serialization(state, alloc_event, generate_test_attrs,
+ (serialize_func_t)CALL_TEST_ENTRY_POINT(
+ TESTED_MOD, sb_event_serialize),
+ (deserialize_func_t)CALL_TEST_ENTRY_POINT(
+ TESTED_MOD, deserialize_sb_event));
}
static int teardown(void **state)
FAULTD_TEST_GROUP(
FAULTD_TEST_CASE_NST("sb_ev_serialize_test", test_event_serialization,
- setup, teardown)
+ setup, teardown),
+ FAULTD_TEST_CASE_NST("sb_ev_deserialize_test", test_event_deserialization,
+ setup_deserialization, teardown)
)
return true;
}
+static int testdb_get_event(faultd_oid_t *oid, struct faultd_event **ev)
+{
+ *ev = calloc(1, sizeof(struct faultd_event));
+ if (*ev == NULL)
+ return 1;
+
+ (*ev)->uref.refcnt = 1;
+ (*ev)->oid = *oid;
+
+ return 0;
+}
+
static struct testdb_adapter testdb_adapter = {
.database_adapter = {
.module = {
.load = testdb_load,
.new_oid = testdb_new_oid,
.is_oid_valid = testdb_is_oid_valid,
+ .get_event = testdb_get_event,
}
};