Files
allhaileris afb81b8278
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Close stale issues and PRs / stale (push) Has been cancelled
init
2026-02-16 15:50:16 +03:00

206 lines
6.4 KiB
C

#include "config.h"
#include <glib.h>
#include "xdp-app-info-private.h"
#include "xdp-app-info-snap-private.h"
#include "xdp-app-info-host-private.h"
#include "xdp-utils.h"
#define snap_parse_cgroup _xdp_app_info_snap_parse_cgroup_file
#define host_parse_app_id _xdp_app_info_host_parse_app_id_from_unit_name
static void
test_parse_cgroup_unified (void)
{
char data[] = "0::/user.slice/user-1000.slice/user@1000.service/apps.slice/snap.something.scope\n";
FILE *f;
int res;
gboolean is_snap = FALSE;
f = fmemopen(data, sizeof(data), "r");
res = snap_parse_cgroup (f, &is_snap);
g_assert_cmpint (res, ==, 0);
g_assert_true (is_snap);
fclose(f);
}
static void
test_parse_cgroup_freezer (void)
{
char data[] =
"12:pids:/user.slice/user-1000.slice/user@1000.service\n"
"11:perf_event:/\n"
"10:net_cls,net_prio:/\n"
"9:cpuset:/\n"
"8:memory:/user.slice/user-1000.slice/user@1000.service/apps.slice/apps-org.gnome.Terminal.slice/vte-spawn-228ae109-a869-4533-8988-65ea4c10b492.scope\n"
"7:rdma:/\n"
"6:devices:/user.slice\n"
"5:blkio:/user.slice\n"
"4:hugetlb:/\n"
"3:freezer:/snap.portal-test\n"
"2:cpu,cpuacct:/user.slice\n"
"1:name=systemd:/user.slice/user-1000.slice/user@1000.service/apps.slice/apps-org.gnome.Terminal.slice/vte-spawn-228ae109-a869-4533-8988-65ea4c10b492.scope\n"
"0::/user.slice/user-1000.slice/user@1000.service/apps.slice/apps-org.gnome.Terminal.slice/vte-spawn-228ae109-a869-4533-8988-65ea4c10b492.scope\n";
FILE *f;
int res;
gboolean is_snap = FALSE;
f = fmemopen(data, sizeof(data), "r");
res = snap_parse_cgroup (f, &is_snap);
g_assert_cmpint (res, ==, 0);
g_assert_true (is_snap);
fclose(f);
}
static void
test_parse_cgroup_systemd (void)
{
char data[] = "1:name=systemd:/user.slice/user-1000.slice/user@1000.service/apps.slice/snap.something.scope\n";
FILE *f;
int res;
gboolean is_snap = FALSE;
f = fmemopen(data, sizeof(data), "r");
res = snap_parse_cgroup (f, &is_snap);
g_assert_cmpint (res, ==, 0);
g_assert_true (is_snap);
fclose(f);
}
static void
test_parse_cgroup_not_snap (void)
{
char data[] =
"12:pids:/\n"
"11:perf_event:/\n"
"10:net_cls,net_prio:/\n"
"9:cpuset:/\n"
"8:memory:/\n"
"7:rdma:/\n"
"6:devices:/\n"
"5:blkio:/\n"
"4:hugetlb:/\n"
"3:freezer:/\n"
"2:cpu,cpuacct:/\n"
"1:name=systemd:/\n"
"0::/\n";
FILE *f;
int res;
gboolean is_snap = FALSE;
f = fmemopen(data, sizeof(data), "r");
res = snap_parse_cgroup (f, &is_snap);
g_assert_cmpint (res, ==, 0);
g_assert_false (is_snap);
fclose(f);
}
static void
test_alternate_doc_path (void)
{
g_autofree char *path = NULL;
xdp_set_documents_mountpoint (NULL);
/* If no documents mount point is set, there is no alternate path */
path = xdp_get_alternate_document_path ("/whatever", "app-id");
g_assert_cmpstr (path, ==, NULL);
xdp_set_documents_mountpoint ("/doc/portal");
/* Paths outside of the document portal do not have an alternate path */
path = xdp_get_alternate_document_path ("/whatever", "app-id");
g_assert_cmpstr (path, ==, NULL);
/* The doc portal mount point itself does not have an alternate path */
path = xdp_get_alternate_document_path ("/doc/portal", "app-id");
g_assert_cmpstr (path, ==, NULL);
/* Paths under the doc portal mount point have an alternate path */
path = xdp_get_alternate_document_path ("/doc/portal/foo/bar", "app-id");
g_assert_cmpstr (path, ==, "/doc/portal/by-app/app-id/foo/bar");
g_clear_pointer (&path, g_free);
path = xdp_get_alternate_document_path ("/doc/portal/foo/bar", "second-app");
g_assert_cmpstr (path, ==, "/doc/portal/by-app/second-app/foo/bar");
xdp_set_documents_mountpoint (NULL);
}
#ifdef HAVE_LIBSYSTEMD
static void
test_app_id_via_systemd_unit (void)
{
g_autofree char *app_id = NULL;
app_id = host_parse_app_id ("app-not-a-well-formed-unit-name");
g_assert_cmpstr (app_id, ==, "");
g_clear_pointer (&app_id, g_free);
app_id = host_parse_app_id ("app-gnome-org.gnome.Evolution\\x2dalarm\\x2dnotify-2437.scope");
/* Note, this is not Evolution's app ID, because the scope is for a background service */
g_assert_cmpstr (app_id, ==, "org.gnome.Evolution-alarm-notify");
g_clear_pointer (&app_id, g_free);
app_id = host_parse_app_id ("app-gnome-org.gnome.Epiphany-182352.scope");
g_assert_cmpstr (app_id, ==, "org.gnome.Epiphany");
g_clear_pointer (&app_id, g_free);
app_id = host_parse_app_id ("app-glib-spice\\x2dvdagent-1839.scope");
g_assert_cmpstr (app_id, ==, "spice-vdagent");
g_clear_pointer (&app_id, g_free);
app_id = host_parse_app_id ("app-KDE-org.kde.okular@12345.service");
g_assert_cmpstr (app_id, ==, "org.kde.okular");
g_clear_pointer (&app_id, g_free);
app_id = host_parse_app_id ("app-firefox.service");
g_assert_cmpstr (app_id, ==, "firefox");
g_clear_pointer (&app_id, g_free);
app_id = host_parse_app_id ("app-org.kde.amarok.service");
g_assert_cmpstr (app_id, ==, "org.kde.amarok");
g_clear_pointer (&app_id, g_free);
app_id = host_parse_app_id ("app-gnome-org.gnome.SettingsDaemon.DiskUtilityNotify-autostart.service");
g_assert_cmpstr (app_id, ==, "org.gnome.SettingsDaemon.DiskUtilityNotify");
g_clear_pointer (&app_id, g_free);
app_id = host_parse_app_id ("app-gnome-org.gnome.Terminal-92502.slice");
g_assert_cmpstr (app_id, ==, "org.gnome.Terminal");
g_clear_pointer (&app_id, g_free);
app_id = host_parse_app_id ("app-com.obsproject.Studio-d70acc38b5154a3a8b4a60accc4b15f4.scope");
g_assert_cmpstr (app_id, ==, "com.obsproject.Studio");
g_clear_pointer (&app_id, g_free);
app_id = host_parse_app_id ("app-firefox-jcfppqx.scope");
g_assert_cmpstr (app_id, ==, "firefox");
g_clear_pointer (&app_id, g_free);
app_id = host_parse_app_id ("app-gnome-firefox.service");
g_assert_cmpstr (app_id, ==, "firefox");
g_clear_pointer (&app_id, g_free);
}
#endif /* HAVE_LIBSYSTEMD */
int main (int argc, char **argv)
{
g_test_init (&argc, &argv, NULL);
g_test_add_func ("/parse-cgroup/unified", test_parse_cgroup_unified);
g_test_add_func ("/parse-cgroup/freezer", test_parse_cgroup_freezer);
g_test_add_func ("/parse-cgroup/systemd", test_parse_cgroup_systemd);
g_test_add_func ("/parse-cgroup/not-snap", test_parse_cgroup_not_snap);
g_test_add_func ("/alternate-doc-path", test_alternate_doc_path);
#ifdef HAVE_LIBSYSTEMD
g_test_add_func ("/app-id-via-systemd-unit", test_app_id_via_systemd_unit);
#endif
return g_test_run ();
}