PolicyKit: Branch 'master'
David Zeuthen
david at kemper.freedesktop.org
Sat Nov 3 17:41:49 PDT 2007
polkit/polkit-policy-default.c | 186 ++++++++++++++++++++++++++++++++++++++---
polkit/polkit-test.c | 1
polkit/polkit-test.h | 1
3 files changed, 176 insertions(+), 12 deletions(-)
New commits:
commit 652fa4cda342a8f6e35045e45cfe325db1e71a4c
Author: David Zeuthen <davidz at redhat.com>
Date: Sat Nov 3 20:39:23 2007 -0400
add unit tests for PolKitPolicyDefault
diff --git a/polkit/polkit-policy-default.c b/polkit/polkit-policy-default.c
index f51a966..ed689e5 100644
--- a/polkit/polkit-policy-default.c
+++ b/polkit/polkit-policy-default.c
@@ -41,6 +41,8 @@
#include "polkit-error.h"
#include "polkit-policy-default.h"
#include "polkit-private.h"
+#include "polkit-test.h"
+#include "polkit-memory.h"
/**
* SECTION:polkit-policy-default
@@ -71,11 +73,14 @@ _polkit_policy_default_new (PolKitResult defaults_allow_any,
{
PolKitPolicyDefault *pd;
- pd = g_new0 (PolKitPolicyDefault, 1);
+ pd = p_new0 (PolKitPolicyDefault, 1);
+ if (pd == NULL)
+ goto out;
pd->refcount = 1;
pd->default_any = defaults_allow_any;
pd->default_inactive = defaults_allow_inactive;
pd->default_active = defaults_allow_active;
+out:
return pd;
}
@@ -110,7 +115,7 @@ polkit_policy_default_unref (PolKitPolicyDefault *policy_default)
policy_default->refcount--;
if (policy_default->refcount > 0)
return;
- g_free (policy_default);
+ p_free (policy_default);
}
/**
@@ -163,10 +168,8 @@ polkit_policy_default_can_session_do_action (PolKitPolicyDefault *policy_default
ret = policy_default->default_any;
- if (!polkit_session_get_ck_is_local (session, &is_local))
- goto out;
- if (!polkit_session_get_ck_is_active (session, &is_active))
- goto out;
+ polkit_session_get_ck_is_local (session, &is_local);
+ polkit_session_get_ck_is_active (session, &is_active);
if (!is_local)
goto out;
@@ -210,15 +213,12 @@ polkit_policy_default_can_caller_do_action (PolKitPolicyDefault *policy_default,
ret = policy_default->default_any;
- if (!polkit_caller_get_ck_session (caller, &session))
- goto out;
+ polkit_caller_get_ck_session (caller, &session);
if (session == NULL)
goto out;
- if (!polkit_session_get_ck_is_local (session, &is_local))
- goto out;
- if (!polkit_session_get_ck_is_active (session, &is_active))
- goto out;
+ polkit_session_get_ck_is_local (session, &is_local);
+ polkit_session_get_ck_is_active (session, &is_active);
if (!is_local)
goto out;
@@ -278,3 +278,165 @@ polkit_policy_default_get_allow_active (PolKitPolicyDefault *policy_default)
return policy_default->default_active;
}
+
+#ifdef POLKIT_BUILD_TESTS
+
+static polkit_bool_t
+_ts (PolKitSession *s, PolKitResult any, PolKitResult inactive, PolKitResult active, PolKitResult *ret)
+{
+ PolKitAction *a;
+ PolKitPolicyDefault *d;
+ polkit_bool_t oom;
+
+ oom = TRUE;
+
+ if (s == NULL)
+ goto out;
+
+ if ((a = polkit_action_new ()) != NULL) {
+ if (polkit_action_set_action_id (a, "org.dummy")) {
+ if ((d = _polkit_policy_default_new (any,
+ inactive,
+ active)) != NULL) {
+ PolKitCaller *c;
+
+ *ret = polkit_policy_default_can_session_do_action (d, a, s);
+ oom = FALSE;
+
+ if ((c = polkit_caller_new ()) != NULL) {
+ g_assert (polkit_policy_default_can_caller_do_action (d, a, c) == any);
+
+ g_assert (polkit_caller_set_ck_session (c, s));
+ g_assert (polkit_policy_default_can_caller_do_action (d, a, c) == *ret);
+ polkit_caller_unref (c);
+ }
+
+ polkit_policy_default_ref (d);
+ polkit_policy_default_get_allow_any (d);
+ polkit_policy_default_get_allow_inactive (d);
+ polkit_policy_default_get_allow_active (d);
+ polkit_policy_default_unref (d);
+ polkit_policy_default_debug (d);
+ polkit_policy_default_unref (d);
+ }
+ }
+ polkit_action_unref (a);
+ }
+
+out:
+ return oom;
+}
+
+static polkit_bool_t
+_run_test (void)
+{
+ PolKitResult ret;
+ PolKitSession *s_active;
+ PolKitSession *s_inactive;
+ PolKitSession *s_active_remote;
+ PolKitSession *s_inactive_remote;
+
+ if ((s_active = polkit_session_new ()) != NULL) {
+ if (!polkit_session_set_ck_objref (s_active, "/session1")) {
+ polkit_session_unref (s_active);
+ s_active = NULL;
+ } else {
+ g_assert (polkit_session_set_ck_is_local (s_active, TRUE));
+ g_assert (polkit_session_set_ck_is_active (s_active, TRUE));
+ }
+ }
+
+ if ((s_inactive = polkit_session_new ()) != NULL) {
+ if (!polkit_session_set_ck_objref (s_inactive, "/session2")) {
+ polkit_session_unref (s_inactive);
+ s_inactive = NULL;
+ } else {
+ g_assert (polkit_session_set_ck_is_local (s_inactive, TRUE));
+ g_assert (polkit_session_set_ck_is_active (s_inactive, FALSE));
+ }
+ }
+
+ if ((s_active_remote = polkit_session_new ()) != NULL) {
+ if (!polkit_session_set_ck_objref (s_active_remote, "/session3") ||
+ !polkit_session_set_ck_remote_host (s_active_remote, "remotehost.com")) {
+ polkit_session_unref (s_active_remote);
+ s_active_remote = NULL;
+ } else {
+ g_assert (polkit_session_set_ck_is_local (s_active_remote, FALSE));
+ g_assert (polkit_session_set_ck_is_active (s_active_remote, TRUE));
+ }
+ }
+
+ if ((s_inactive_remote = polkit_session_new ()) != NULL) {
+ if (!polkit_session_set_ck_objref (s_inactive_remote, "/session4") ||
+ !polkit_session_set_ck_remote_host (s_inactive_remote, "remotehost.com")) {
+ polkit_session_unref (s_inactive_remote);
+ s_inactive_remote = NULL;
+ } else {
+ g_assert (polkit_session_set_ck_is_local (s_inactive_remote, FALSE));
+ g_assert (polkit_session_set_ck_is_active (s_inactive_remote, FALSE));
+ }
+ }
+
+ g_assert (_ts (s_active,
+ POLKIT_RESULT_NO, POLKIT_RESULT_NO, POLKIT_RESULT_YES, &ret) ||
+ ret == POLKIT_RESULT_YES);
+ g_assert (_ts (s_inactive,
+ POLKIT_RESULT_NO, POLKIT_RESULT_NO, POLKIT_RESULT_YES, &ret) ||
+ ret == POLKIT_RESULT_NO);
+ g_assert (_ts (s_active_remote,
+ POLKIT_RESULT_NO, POLKIT_RESULT_NO, POLKIT_RESULT_YES, &ret) ||
+ ret == POLKIT_RESULT_NO);
+ g_assert (_ts (s_inactive_remote,
+ POLKIT_RESULT_NO, POLKIT_RESULT_NO, POLKIT_RESULT_YES, &ret) ||
+ ret == POLKIT_RESULT_NO);
+
+ g_assert (_ts (s_active,
+ POLKIT_RESULT_NO, POLKIT_RESULT_YES, POLKIT_RESULT_YES, &ret) ||
+ ret == POLKIT_RESULT_YES);
+ g_assert (_ts (s_inactive,
+ POLKIT_RESULT_NO, POLKIT_RESULT_YES, POLKIT_RESULT_YES, &ret) ||
+ ret == POLKIT_RESULT_YES);
+ g_assert (_ts (s_active_remote,
+ POLKIT_RESULT_NO, POLKIT_RESULT_YES, POLKIT_RESULT_YES, &ret) ||
+ ret == POLKIT_RESULT_NO);
+ g_assert (_ts (s_inactive_remote,
+ POLKIT_RESULT_NO, POLKIT_RESULT_YES, POLKIT_RESULT_YES, &ret) ||
+ ret == POLKIT_RESULT_NO);
+
+ g_assert (_ts (s_active,
+ POLKIT_RESULT_YES, POLKIT_RESULT_YES, POLKIT_RESULT_YES, &ret) ||
+ ret == POLKIT_RESULT_YES);
+ g_assert (_ts (s_inactive,
+ POLKIT_RESULT_YES, POLKIT_RESULT_YES, POLKIT_RESULT_YES, &ret) ||
+ ret == POLKIT_RESULT_YES);
+ g_assert (_ts (s_active_remote,
+ POLKIT_RESULT_YES, POLKIT_RESULT_YES, POLKIT_RESULT_YES, &ret) ||
+ ret == POLKIT_RESULT_YES);
+ g_assert (_ts (s_inactive_remote,
+ POLKIT_RESULT_YES, POLKIT_RESULT_YES, POLKIT_RESULT_YES, &ret) ||
+ ret == POLKIT_RESULT_YES);
+
+ if (s_active != NULL)
+ polkit_session_unref (s_active);
+
+ if (s_inactive != NULL)
+ polkit_session_unref (s_inactive);
+
+ if (s_active_remote != NULL)
+ polkit_session_unref (s_active_remote);
+
+ if (s_inactive_remote != NULL)
+ polkit_session_unref (s_inactive_remote);
+
+ return TRUE;
+}
+
+PolKitTest _test_policy_default = {
+ "polkit_policy_default",
+ NULL,
+ NULL,
+ _run_test
+};
+
+#endif /* POLKIT_BUILD_TESTS */
diff --git a/polkit/polkit-test.c b/polkit/polkit-test.c
index 21e292b..071b7e3 100644
--- a/polkit/polkit-test.c
+++ b/polkit/polkit-test.c
@@ -37,6 +37,7 @@ static PolKitTest *tests[] = {
&_test_seat,
&_test_session,
&_test_caller,
+ &_test_policy_default,
};
int
diff --git a/polkit/polkit-test.h b/polkit/polkit-test.h
index 880cace..7683441 100644
--- a/polkit/polkit-test.h
+++ b/polkit/polkit-test.h
@@ -50,6 +50,7 @@ extern PolKitTest _test_result;
extern PolKitTest _test_seat;
extern PolKitTest _test_session;
extern PolKitTest _test_caller;
+extern PolKitTest _test_policy_default;
POLKIT_END_DECLS
More information about the hal-commit
mailing list