📄 test-names.c
字号:
dbus_message_get_args (msg, &error, DBUS_TYPE_STRING, &n, DBUS_TYPE_STRING, &ln, DBUS_TYPE_STRING, &an, DBUS_TYPE_INVALID); if (dbus_error_is_set (&error)) { fprintf (stderr, "Error getting args: %s\n", error.message); dbus_error_free (&error); dbus_message_unref (msg); return FALSE; } if (strcmp (n, bus_name) == 0) { if ((lost_name == NULL && strcmp (ln, "") == 0) || strcmp (lost_name, ln) == 0) { if ((acquired_name == NULL && strcmp (an, "") == 0) || strcmp (acquired_name, an) == 0) { dbus_message_unref (msg); break; } else { fprintf (stderr, "Error: name %s was expected to be acquired but we got %s instead\n", acquired_name, an); dbus_message_unref (msg); return FALSE; } } else { fprintf (stderr, "Error: name %s was expected to be lost but we got %s instead\n", lost_name, ln); dbus_message_unref (msg); return FALSE; } } } dbus_message_unref (msg); } } if (tries == NUM_TRIES_TIL_FAIL) { fprintf (stderr, "Did not recive the expected NameOwnerChanged signal!!!\n"); return FALSE; } return TRUE;}static dbus_bool_t check_signals (DBusConnection *monitor, int iteration, DBusConnection *conn[NUM_CONN]){ DBusConnection *lost_conn = NULL; DBusConnection *acquired_conn = NULL; const char *lost_name; const char *acquired_name; if (iteration == 0) { int i; i = test_data[iteration].expected_queue[0]; if (i >= 0) acquired_conn = conn[i]; } else { int i; i = test_data[iteration - 1].expected_queue[0]; if (i >= 0) lost_conn = conn[i]; i = test_data[iteration].expected_queue[0]; if (i >= 0) acquired_conn = conn[i]; if (acquired_conn == lost_conn) acquired_conn = lost_conn = NULL; } lost_name = lost_conn == NULL? NULL : dbus_bus_get_unique_name (lost_conn); acquired_name = acquired_conn == NULL? NULL : dbus_bus_get_unique_name (acquired_conn); if (lost_name != NULL) if (!match_acquired_or_lost_signal (lost_conn, "NameLost", TEST_NAME)) return FALSE; if (acquired_name != NULL) if (!match_acquired_or_lost_signal (acquired_conn, "NameAcquired", TEST_NAME)) return FALSE; if (acquired_name != NULL || lost_name != NULL) if (!match_name_owner_changed_signal (monitor, TEST_NAME, lost_name, acquired_name)) return FALSE; return TRUE;}intmain (int argc, char *argv[]){ DBusConnection *conn[NUM_CONN]; DBusConnection *monitor; DBusError error; int i; int test_data_len; test_data_len = sizeof (test_data) / sizeof (CommandAndResult); dbus_error_init (&error); conn[0] = dbus_bus_get_private (DBUS_BUS_SESSION, &error); if (dbus_error_is_set (&error)) { fprintf (stderr, "*** Failed to open connection 0 to session bus: %s\n", error.message); dbus_error_free (&error); return 1; } if (!match_acquired_or_lost_signal (conn[0], "NameAcquired", dbus_bus_get_unique_name (conn[0]))) return 1; conn[1] = dbus_bus_get_private (DBUS_BUS_SESSION, &error); if (dbus_error_is_set (&error)) { fprintf (stderr, "*** Failed to open connection 1 to session bus: %s\n", error.message); dbus_error_free (&error); return 1; } if (!match_acquired_or_lost_signal (conn[1], "NameAcquired", dbus_bus_get_unique_name (conn[1]))) return 1; conn[2] = dbus_bus_get_private (DBUS_BUS_SESSION, &error); if (dbus_error_is_set (&error)) { fprintf (stderr, "*** Failed to open connection 2 to session bus: %s\n", error.message); dbus_error_free (&error); return 1; } if (!match_acquired_or_lost_signal (conn[2], "NameAcquired", dbus_bus_get_unique_name (conn[2]))) return 1; conn[3] = dbus_bus_get_private (DBUS_BUS_SESSION, &error); if (dbus_error_is_set (&error)) { fprintf (stderr, "*** Failed to open connection 3 to session bus: %s\n", error.message); dbus_error_free (&error); return 1; } if (!match_acquired_or_lost_signal (conn[3], "NameAcquired", dbus_bus_get_unique_name (conn[3]))) return 1; monitor = dbus_bus_get (DBUS_BUS_SESSION, &error); if (dbus_error_is_set (&error)) { fprintf (stderr, "*** Failed to open monitoring connection to session bus: %s\n", error.message); dbus_error_free (&error); return 1; } if (!match_acquired_or_lost_signal (monitor, "NameAcquired", dbus_bus_get_unique_name (monitor))) return 1; dbus_bus_add_match (monitor, "", &error); if (dbus_error_is_set (&error)) { fprintf (stderr, "*** Failed to set filter on monitoring connection: %s\n", error.message); dbus_error_free (&error); return 1; } for (i = 0; i < NUM_CONN; i++) dbus_connection_set_exit_on_disconnect (conn[i], FALSE); for (i = 0; i < test_data_len; i++) { dbus_uint32_t result; result = 0; if (test_data[i].command == ADD_CONNECTION) { result = dbus_bus_request_name (conn[test_data[i].connection_number], TEST_NAME, test_data[i].flags, &error); if (dbus_error_is_set (&error)) { fprintf (stderr, "Error on addition in iteration %i: %s\n", i, error.message); dbus_error_free (&error); return 1; } } else if (test_data[i].command == REMOVE_CONNECTION) { result = dbus_bus_release_name (conn[test_data[i].connection_number], TEST_NAME, &error); if (dbus_error_is_set (&error)) { fprintf (stderr, "*** Failed to remove connection %i in iteration %i: %s\n", test_data[i].connection_number, i, error.message); dbus_error_free (&error); return 1; } } else { fprintf (stderr, "Command #%i not a valid command!\n", test_data[i].command); return 1; } if (result != test_data[i].expected_result) { fprintf (stderr, "Results recived (%i) are not the expected results (%i) in iteration %i\n", result, test_data[i].expected_result, i); return 1; } if (!check_connection (monitor, i, conn)) { fprintf (stderr, "Failed at iteration %i\n", i); return 1; } if (!check_signals (monitor, i, conn)) { fprintf (stderr, "Failed at iteration %i\n", i); return 1; } } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -