g_assert(error);
- if (error->domain == G_DBUS_ERROR)
- if (error->code == G_DBUS_ERROR_NAME_HAS_NO_OWNER || error->code == G_DBUS_ERROR_SERVICE_UNKNOWN)
+ if (error->domain == G_DBUS_ERROR) {
+ if (error->code == G_DBUS_ERROR_NAME_HAS_NO_OWNER || error->code == G_DBUS_ERROR_SERVICE_UNKNOWN) {
return SUBSESSION_ERROR_NOT_SUPPORTED;
+ }
+ if (error->code == G_DBUS_ERROR_ACCESS_DENIED) {
+ return SUBSESSION_ERROR_PERMISSION_DENIED;
+ }
+ }
- if (error->domain == G_IO_ERROR && error->code == G_IO_ERROR_DBUS_ERROR)
+ if (error->domain == G_IO_ERROR && error->code == G_IO_ERROR_DBUS_ERROR) {
return get_dbus_error_mapping_to_subsession_error(error->message);
+ }
return SUBSESSION_ERROR_IO_ERROR;
}
signal_client_data_t *signal_client_data = (signal_client_data_t*)client_data;
+ maybe_not_comparable_if(
+ client_data_are_null(client_data)
+ )
+
int client_session_uid = 0;
int client_user = 0;
maybe_g_variant_get_int_(signal_client_data->params, "(ii)", &client_session_uid, &client_user);
-
- maybe_not_compared_if(
- not_valid(client_session_uid,
- not_valid(client_user)))
+ maybe_not_comparable_if(
+ session_uid_is_not_valid(client_session_uid,
+ user_id_is_not_valid(client_user))
+ )
GVariant *params = (GVariant *)parameters;
int params_session_uid = 0;
int params_user = 0;
maybe_g_variant_get_int_(params, "(ii)", ¶ms_session_uid, ¶ms_user);
-
- maybe_not_compared_if(
- not_valid(params_session_uid,
- not_valid(params_user)))
+ maybe_not_comparable_if(
+ session_uid_is_not_valid(client_session_uid,
+ user_id_is_not_valid(client_user))
+ )
if( client_session_uid == params_session_uid &&
client_user == params_user) {
gint g_compare_session_uid_params ( gconstpointer client_data, gconstpointer parameters) {
+ maybe_not_comparable_if(
+ client_data_are_null(client_data,
+ parameters_are_null(parameters))
+ )
+
signal_client_data_t *signal_client_data = (signal_client_data_t*)client_data;
+ maybe_not_comparable_if(
+ client_data_are_null(client_data,
+ parameters_are_null(parameters))
+ )
+
int client_session_uid = 0;
maybe_g_variant_get_int_(signal_client_data->params, "(i)", &client_session_uid);
-
- maybe_not_compared_if(
- not_valid(client_session_uid))
+ maybe_not_comparable_if(
+ session_uid_is_not_valid(client_session_uid)
+ )
GVariant *params = (GVariant *)parameters;
int params_session_uid = 0;
maybe_g_variant_get_int_(params, "(i)", ¶ms_session_uid);
-
- maybe_not_compared_if(
- not_valid(params_session_uid))
+ maybe_not_comparable_if(
+ int_not_valid(params_session_uid)
+ )
if( client_session_uid == params_session_uid) {
return COMPARATOR_RESULT_SAME_;
gint g_compare_session_uid_params_switch_wait ( gconstpointer client_data, gconstpointer parameters) {
+ maybe_not_comparable_if(
+ client_data_are_null(client_data,
+ parameters_are_null(parameters))
+ )
+
signal_client_data_t *signal_client_data = (signal_client_data_t*)client_data;
int client_session_uid = 0;
maybe_g_variant_get_int_(signal_client_data->params, "(i)", &client_session_uid);
-
- maybe_not_compared_if(
- not_valid(client_session_uid))
+ maybe_not_comparable_if(
+ user_id_is_not_valid(client_session_uid)
+ )
GVariant *params = (GVariant *)parameters;
¶ms_next_user
);
- maybe_not_compared_if(
- not_valid(params_session_uid,
- not_valid(params_switch_id,
- not_valid(params_prev_user,
- not_valid(params_next_user)))))
+ maybe_not_comparable_if(
+ session_uid_is_not_valid(params_session_uid,
+ switch_id_is_not_valid(params_switch_id,
+ switched_user_id_is_not_valid(params_prev_user,
+ switched_user_id_is_not_valid(params_next_user))))
+ )
if( client_session_uid == params_session_uid) {
return COMPARATOR_RESULT_SAME_;
gint g_compare_session_uid_params_wait (gconstpointer client_data, gconstpointer parameters) {
+ maybe_not_comparable_if(
+ client_data_are_null(client_data,
+ parameters_are_null(parameters))
+ )
+
signal_client_data_t *signal_client_data = (signal_client_data_t*)client_data;
int client_session_uid = 0;
maybe_g_variant_get_int_(signal_client_data->params, "(i)", &client_session_uid);
-
- maybe_not_compared_if(
- not_valid(client_session_uid))
+ maybe_not_comparable_if(
+ session_uid_is_not_valid(client_session_uid)
+ )
GVariant *params = (GVariant *)parameters;
int user_id = 0;
maybe_g_variant_get_int_(params, "(ii)", ¶ms_session_uid, &user_id);
-
- maybe_not_compared_if(
- not_valid(params_session_uid,
- not_valid(user_id)))
+ maybe_not_comparable_if(
+ session_uid_is_not_valid(params_session_uid,
+ user_id_is_not_valid(user_id))
+ )
if( client_session_uid == params_session_uid) {
return COMPARATOR_RESULT_SAME_;
gint g_compare_switch_user_params ( gconstpointer client_data, gconstpointer parameters) {
+ maybe_not_comparable_if(
+ client_data_are_null(client_data,
+ parameters_are_null(parameters))
+ )
+
signal_client_data_t *signal_client_data = (signal_client_data_t*)client_data;
int client_session_uid = 0;
int client_next_user = 0;
maybe_g_variant_get_int_(signal_client_data->params, "(ii)", &client_session_uid, &client_next_user);
-
- maybe_not_compared_if(
- not_valid(client_session_uid,
- not_valid(client_next_user)))
+ maybe_not_comparable_if(
+ session_uid_is_not_valid(client_session_uid,
+ switched_user_id_is_not_valid(client_next_user))
+ )
GVariant *params = (GVariant *)parameters;
int params_next_user = 0;
maybe_g_variant_get_int_(params, "(ixii)", ¶ms_session_uid, ¶ms_switch_id, ¶ms_prev_user, ¶ms_next_user);
-
- maybe_not_compared_if(
- not_valid(params_session_uid,
- not_valid(params_switch_id,
- not_valid(params_prev_user,
- not_valid(params_next_user)))))
+ maybe_not_comparable_if(
+ session_uid_is_not_valid(params_session_uid,
+ switch_id_is_not_valid(params_switch_id,
+ switched_user_id_is_not_valid(params_prev_user,
+ switched_user_id_is_not_valid(params_next_user))))
+ )
gboolean all_ok = (client_session_uid == params_session_uid) &&
(client_next_user == params_next_user);
&event_info.switch_user.prev_user,
&event_info.switch_user.next_user);
+
subsession_event_callback event_callback = signal_data->client_callback;
event_callback(event_info, signal_data->client_callback_data);
}
#define callbacks_data_append_to_list(callback_data, data) \
callback_data.list = g_list_append(callback_data.list, data)
-#define return_invalid_param_if(a) error_if(a, SUBSESSION_ERROR_INVALID_PARAMETER)
-
-#define return_invalid_if_input_params_are_wrong \
- return_invalid_param_if( \
- not_valid(session_uid, \
- not_valid(user, \
- not_valid(cb, \
- not_valid(cb_data)))))
EXPORT_API int subsession_add_user(int session_uid, int user, subsession_reply_callback cb, void *cb_data) {
- return_invalid_if_input_params_are_wrong
+ return_if(
+ session_uid_is_not_valid(session_uid,
+ user_id_is_not_valid(user,
+ callback_is_null(cb,
+ callbacks_data_are_null(cb_data))))
+ )
g_mutex_lock (&add_user_callbacks_data_mt.mutex);
EXPORT_API int subsession_remove_user(int session_uid, int user, subsession_reply_callback cb, void *cb_data) {
- return_invalid_if_input_params_are_wrong
+ return_if(
+ int_not_valid(session_uid,
+ int_not_valid(user,
+ callback_is_null(cb,
+ callbacks_data_are_null(cb_data))))
+ )
g_mutex_lock (&remove_user_callbacks_data_mt.mutex);
EXPORT_API int subsession_switch_user(int session_uid, int next_user, subsession_reply_callback cb, void *cb_data) {
- return_invalid_param_if(
- not_valid(session_uid,
- not_valid(next_user,
- not_valid(cb,
- not_valid(cb_data)))))
+ return_if(
+ int_not_valid_on_switch(session_uid,
+ int_not_valid_on_switch(next_user,
+ callback_is_null(cb,
+ callbacks_data_are_null(cb_data))))
+ )
g_mutex_lock (&switch_user_callbacks_data_mt.mutex);
int unregister_event_callback(client_callbacks_data_t *callbacks_data, int session_uid) {
+ return_if(
+ callbacks_data_are_null(callbacks_data,
+ session_uid_is_not_valid(session_uid))
+ )
+
GVariant * gv_session_uid = g_variant_new("(i)", session_uid);
signal_client_data_t *signal_data = take_from_callbacks_data_and_remove_from_list(callbacks_data, gv_session_uid, g_compare_session_uid_params);
return SUBSESSION_ERROR_NONE;
}
-EXPORT_API int subsession_add_user_wait_done(int session_uid, int user) {
+int subsession_add_user_wait_done(int session_uid, int user) {
GVariant * params = g_variant_new("(ii)", session_uid, user);
return method_call_no_signal(dbus_method_call.AddUserDone, params);
}
-EXPORT_API int subsession_remove_user_wait_done(int session_uid, int user) {
+int subsession_remove_user_wait_done(int session_uid, int user) {
GVariant * params = g_variant_new("(ii)", session_uid, user);
return method_call_no_signal(dbus_method_call.RemoveUserDone, params);
}
-EXPORT_API int subsession_switch_wait_done(int session_uid, uint64_t switch_id) {
+int subsession_switch_wait_done(int session_uid, uint64_t switch_id) {
GVariant * params = g_variant_new("(ix)", session_uid, (gint64)switch_id);
return method_call_no_signal(dbus_method_call.SwitchUserDone, params);
}
+EXPORT_API int subsession_event_wait_done(int session_uid, subsession_event_type_e event, subsession_event_info info) {
+ return_if(
+ session_uid_is_not_valid(session_uid)
+ )
+ switch (event) {
+ case SUBSESSION_ADD_USER_WAIT:
+ return_if(
+ user_id_is_not_valid(info.add_user.user)
+ )
+ return subsession_add_user_wait_done(session_uid, info.add_user.user);
+ break;
+
+ case SUBSESSION_REMOVE_USER_WAIT:
+ return_if(
+ user_id_is_not_valid(info.remove_user.user)
+ )
+ return subsession_remove_user_wait_done(session_uid, info.remove_user.user);
+ break;
+
+ case SUBSESSION_SWITCH_USER_WAIT:
+ return_if(
+ switched_user_id_is_not_valid(info.switch_user.switch_id)
+ )
+ return subsession_switch_wait_done(session_uid, info.switch_user.switch_id);
+ break;
+
+ default:
+ return SUBSESSION_ERROR_INVALID_PARAMETER;
+ }
+ return SUBSESSION_ERROR_NOT_SUPPORTED;
+}
+
+
EXPORT_API int subsession_get_user_list(int session_uid, int **user_list, int *user_count) {
g_autoptr(GVariant) out = NULL;
--- /dev/null
+#include<iostream>
+#include <gtest/gtest.h>
+#include <gio/gio.h>
+#include <pthread.h>
+#include "sessiond.h"
+#include "test_hlp.hpp"
+
+//subsession_event_wait_done(int session_uid, subsession_event_type_e event, subsession_event_info info);
+ /*SUBSESSION_ADD_USER_WAIT = 1 << 0,
+ SUBSESSION_REMOVE_USER_WAIT = 1 << 1,
+ SUBSESSION_SWITCH_USER_WAIT = 1 << 2,
+ SUBSESSION_SWITCH_USER_COMPLETION = 1 << 3,
+*/
+const int test_actions = 9;
+
+TEST(subsession_event_wait_err_test, FailAtEventWaitBadMask) {
+
+ subsession_event_info e_info = { .switch_user = {.event = SUBSESSION_EVENT_ALL,
+ .session_uid = subsession_5001::subsession_uid(),
+ .switch_id = 1,
+ .prev_user = TestUser::user_1,
+ .next_user = TestUser::user_2 },
+ };
+
+ std::array<res_t, test_actions> results {
+ res_t {
+ subsession_event_wait_done(
+ subsession_5001::subsession_uid(),
+ subsession_event_type_e(SUBSESSION_EVENT_ALL),
+ e_info),
+ SUBSESSION_ERROR_INVALID_PARAMETER,
+ "Check if subsession_event_wait_done with SUBSESSION_EVENT_ALL returns error" },
+ res_t {
+ subsession_event_wait_done(
+ subsession_5001::subsession_uid(),
+ subsession_event_type_e(SUBSESSION_ADD_USER_WAIT | SUBSESSION_REMOVE_USER_WAIT),
+ e_info),
+ SUBSESSION_ERROR_INVALID_PARAMETER,
+ "Check if subsession_event_wait_done with SUBSESSION_ADD_USER_WAIT | SUBSESSION_REMOVE_USER_WAIT returns error" },
+
+ res_t { subsession_event_wait_done(
+ subsession_5001::subsession_uid(),
+ subsession_event_type_e(SUBSESSION_ADD_USER_WAIT | SUBSESSION_SWITCH_USER_WAIT),
+ e_info),
+ SUBSESSION_ERROR_INVALID_PARAMETER,
+ "Check if subsession_event_wait_done with SUBSESSION_ADD_USER_WAIT | SUBSESSION_SWITCH_USER_WAIT returns error" },
+ res_t { subsession_event_wait_done(
+ subsession_5001::subsession_uid(),
+ subsession_event_type_e(SUBSESSION_ADD_USER_WAIT | SUBSESSION_SWITCH_USER_COMPLETION),
+ e_info),
+ SUBSESSION_ERROR_INVALID_PARAMETER,
+ "Check if subsession_event_wait_done with SUBSESSION_ADD_USER_WAIT | SUBSESSION_SWITCH_USER_COMPLETION returns error" },
+ res_t { subsession_event_wait_done(
+ subsession_5001::subsession_uid(),
+ subsession_event_type_e(SUBSESSION_ADD_USER_WAIT | SUBSESSION_REMOVE_USER_WAIT | SUBSESSION_SWITCH_USER_WAIT),
+ e_info),
+ SUBSESSION_ERROR_INVALID_PARAMETER,
+ "Check if subsession_event_wait_done with SUBSESSION_ADD_USER_WAIT | SUBSESSION_REMOVE_USER_WAIT | SUBSESSION_SWITCH_USER_WAIT returns error" },
+ res_t { subsession_event_wait_done(
+ subsession_5001::subsession_uid(),
+ subsession_event_type_e(SUBSESSION_ADD_USER_WAIT | SUBSESSION_REMOVE_USER_WAIT | SUBSESSION_SWITCH_USER_COMPLETION),
+ e_info),
+ SUBSESSION_ERROR_INVALID_PARAMETER,
+ "Check if subsession_event_wait_done with SUBSESSION_ADD_USER_WAIT | SUBSESSION_REMOVE_USER_WAIT | SUBSESSION_SWITCH_USER_COMPLETION returns error" },
+ res_t { subsession_event_wait_done(
+ subsession_5001::subsession_uid(),
+ subsession_event_type_e(SUBSESSION_ADD_USER_WAIT | SUBSESSION_SWITCH_USER_WAIT | SUBSESSION_SWITCH_USER_COMPLETION),
+ e_info),
+ SUBSESSION_ERROR_INVALID_PARAMETER,
+ "Check if subsession_event_wait_done with SUBSESSION_ADD_USER_WAIT | SUBSESSION_SWITCH_USER_WAIT | SUBSESSION_SWITCH_USER_COMPLETION returns error" },
+ res_t { subsession_event_wait_done(
+ -(subsession_5001::subsession_uid()),
+ subsession_event_type_e(SUBSESSION_SWITCH_USER_WAIT),
+ e_info),
+ SUBSESSION_ERROR_INVALID_PARAMETER,
+ "Check if subsession_event_wait_done with bad session_uid < 0 value" },
+ res_t { subsession_event_wait_done(
+ 0,
+ subsession_event_type_e(SUBSESSION_SWITCH_USER_WAIT),
+ e_info),
+ SUBSESSION_ERROR_INVALID_PARAMETER,
+ "Check if subsession_event_wait_done with bad session_uid = 0 value" },
+ };
+
+ summarize_results<test_actions>(results);
+ EXPECT_EQ(0,0);
+}