Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>pull/1/head
parent
652c2aea23
commit
26fc60d303
@ -1,20 +0,0 @@
|
|||||||
enable_testing()
|
|
||||||
|
|
||||||
include_directories(
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
${CMAKE_SOURCE_DIR}/agent
|
|
||||||
)
|
|
||||||
|
|
||||||
automoc4_add_executable(polkit-tqt-test
|
|
||||||
test.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
target_link_libraries(polkit-tqt-test
|
|
||||||
${TQT_TQTCORE_LIBRARY}
|
|
||||||
${TQT_TQTTEST_LIBRARY}
|
|
||||||
${TQT_TQTGUI_LIBRARY}
|
|
||||||
polkit-tqt-core-1
|
|
||||||
)
|
|
||||||
|
|
||||||
add_test(BaseTest ${CMAKE_CURRENT_BINARY_DIR}/polkit-tqt-test)
|
|
@ -1,235 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "test.h"
|
|
||||||
#include "core/polkittqt1-authority.h"
|
|
||||||
#include "agent/polkittqt1-agent-session.h"
|
|
||||||
#include "core/polkittqt1-details.h"
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <pwd.h>
|
|
||||||
#include <TQtDBus/TQDBusMessage>
|
|
||||||
#include <TQtDBus/TQDBusConnection>
|
|
||||||
using namespace PolkitTQt;
|
|
||||||
using namespace PolkitTQt::Agent;
|
|
||||||
|
|
||||||
void wait()
|
|
||||||
{
|
|
||||||
for (int i = 0; i < 100; i++) {
|
|
||||||
usleep(100);
|
|
||||||
TQCoreApplication::processEvents();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void TestAuth::test_Auth_checkAuthorization()
|
|
||||||
{
|
|
||||||
// This needs the file org.tqt.policykit.examples.policy from examples to be installed
|
|
||||||
UnixProcessSubject process(TQCoreApplication::applicationPid());
|
|
||||||
Authority::Result result;
|
|
||||||
// Check if this method returns good authorization results
|
|
||||||
Authority *authority = Authority::instance();
|
|
||||||
result = authority->checkAuthorizationSync("org.tqt.policykit.examples.kick", process, Authority::None);
|
|
||||||
TQCOMPARE(result, Authority::No);
|
|
||||||
TQVERIFY(!authority->hasError());
|
|
||||||
result = authority->checkAuthorizationSync("org.tqt.policykit.examples.cry", process, Authority::None);
|
|
||||||
TQCOMPARE(result, Authority::Yes);
|
|
||||||
TQVERIFY(!authority->hasError());
|
|
||||||
result = authority->checkAuthorizationSync("org.tqt.policykit.examples.bleed", process, Authority::None);
|
|
||||||
TQCOMPARE(result, Authority::Challenge);
|
|
||||||
TQVERIFY(!authority->hasError());
|
|
||||||
|
|
||||||
// Now we try async methods
|
|
||||||
TQSignalSpy spy(authority, SIGNAL(checkAuthorizationFinished(PolkitTQt::Authority::Result)));
|
|
||||||
// Call asynchronous checkAuthorization
|
|
||||||
authority->checkAuthorization("org.tqt.policykit.examples.kick", process, Authority::None);
|
|
||||||
// Give the polkit time to obtain the result and emit the signal with it
|
|
||||||
wait();
|
|
||||||
// Test if the signal was emitted
|
|
||||||
TQCOMPARE(spy.count(), 1);
|
|
||||||
// Test the result
|
|
||||||
result = qVariantValue<PolkitTQt::Authority::Result> (spy.takeFirst()[0]);
|
|
||||||
TQCOMPARE(result, Authority::No);
|
|
||||||
TQVERIFY(!authority->hasError());
|
|
||||||
spy.clear();
|
|
||||||
|
|
||||||
// Let's test the cancellability
|
|
||||||
authority->checkAuthorization("org.tqt.policykit.examples.kick", process, Authority::None);
|
|
||||||
authority->checkAuthorizationCancel();
|
|
||||||
// Wait and check if the signal arrieved
|
|
||||||
wait();
|
|
||||||
TQCOMPARE(spy.count(), 0);
|
|
||||||
|
|
||||||
// Check if it can cancel user authentication dialog
|
|
||||||
authority->checkAuthorization("org.tqt.policykit.examples.bleed", process, Authority::AllowUserInteraction);
|
|
||||||
// Show it for second
|
|
||||||
sleep(1);
|
|
||||||
// And now kill it
|
|
||||||
authority->checkAuthorizationCancel();
|
|
||||||
TQVERIFY(!authority->hasError());
|
|
||||||
// But how to test if it was successful?
|
|
||||||
tqWarning() << "You should see an authentication dialog for a short period.";
|
|
||||||
}
|
|
||||||
|
|
||||||
void TestAuth::test_Auth_enumerateActions()
|
|
||||||
{
|
|
||||||
// This needs the file org.tqt.policykit.examples.policy from examples to be installed
|
|
||||||
ActionDescription::List list = Authority::instance()->enumerateActionsSync();
|
|
||||||
TQVERIFY(!Authority::instance()->hasError());
|
|
||||||
// Check whether enumerateAction returns at least example actions
|
|
||||||
int count = 0;
|
|
||||||
Q_FOREACH(const ActionDescription &ad, list) {
|
|
||||||
if ((ad.actionId() == "org.tqt.policykit.examples.kick") ||
|
|
||||||
(ad.actionId() == "org.tqt.policykit.examples.cry") ||
|
|
||||||
(ad.actionId() == "org.tqt.policykit.examples.bleed"))
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
TQCOMPARE(count, 3);
|
|
||||||
|
|
||||||
|
|
||||||
// Test asynchronous version as well
|
|
||||||
list.clear();
|
|
||||||
count = 0;
|
|
||||||
TQSignalSpy spy(Authority::instance(), SIGNAL(enumerateActionsFinished(PolkitTQt::ActionDescription::List)));
|
|
||||||
Authority::instance()->enumerateActions();
|
|
||||||
wait();
|
|
||||||
TQCOMPARE(spy.count(), 1);
|
|
||||||
list = qVariantValue<PolkitTQt::ActionDescription::List> (spy.takeFirst()[0]);
|
|
||||||
TQVERIFY(!Authority::instance()->hasError());
|
|
||||||
Q_FOREACH(const ActionDescription &ad, list) {
|
|
||||||
if ((ad.actionId() == "org.tqt.policykit.examples.kick") ||
|
|
||||||
(ad.actionId() == "org.tqt.policykit.examples.cry") ||
|
|
||||||
(ad.actionId() == "org.tqt.policykit.examples.bleed"))
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
TQCOMPARE(count, 3);
|
|
||||||
|
|
||||||
// Test cancelling the enumeration
|
|
||||||
spy.clear();
|
|
||||||
Authority::instance()->enumerateActions();
|
|
||||||
Authority::instance()->enumerateActionsCancel();
|
|
||||||
wait();
|
|
||||||
TQCOMPARE(spy.count(), 0);
|
|
||||||
TQVERIFY(!Authority::instance()->hasError());
|
|
||||||
}
|
|
||||||
|
|
||||||
void TestAuth::test_Identity()
|
|
||||||
{
|
|
||||||
// Get real name and id of current user and group
|
|
||||||
struct passwd *userinfo = getpwuid(getuid());
|
|
||||||
TQString userName = userinfo->pw_name;
|
|
||||||
unsigned int userId = userinfo->pw_uid;
|
|
||||||
unsigned int groupId = userinfo->pw_gid;
|
|
||||||
|
|
||||||
// Try to create UnixUser from username
|
|
||||||
UnixUserIdentity user(userName);
|
|
||||||
TQVERIFY(user.identity());
|
|
||||||
|
|
||||||
// Create generic Identity from UnixUser via string representation
|
|
||||||
Identity id = Identity::fromString(user.toString());
|
|
||||||
// Compare obtained uid with real uid
|
|
||||||
TQCOMPARE(id.toUnixUserIdentity().uid(), userId);
|
|
||||||
|
|
||||||
// Create generic Identity from UnixGroup via string representation
|
|
||||||
UnixGroupIdentity group(groupId);
|
|
||||||
TQVERIFY(group.identity());
|
|
||||||
id = Identity::fromString(group.toString());
|
|
||||||
TQCOMPARE(id.toUnixGroupIdentity().gid(), groupId);
|
|
||||||
|
|
||||||
// Test setting gid to another value
|
|
||||||
group.setGid(9999U);
|
|
||||||
id = Identity::fromString(group.toString());
|
|
||||||
TQCOMPARE(id.toUnixGroupIdentity().gid(), 9999U);
|
|
||||||
}
|
|
||||||
|
|
||||||
void TestAuth::test_Authority()
|
|
||||||
{
|
|
||||||
Authority *authority = Authority::instance();
|
|
||||||
TQVERIFY(authority);
|
|
||||||
TQVERIFY(!authority->hasError());
|
|
||||||
|
|
||||||
// Verify emiting of the signals
|
|
||||||
TQSignalSpy spy(authority, SIGNAL(consoleKitDBChanged()));
|
|
||||||
TQDBusMessage msg = TQDBusMessage::createMethodCall("org.freedesktop.ConsoleKit",
|
|
||||||
"/org/freedesktop/ConsoleKit/Manager",
|
|
||||||
"org.freedesktop.ConsoleKit.Manager",
|
|
||||||
"OpenSession");
|
|
||||||
TQDBusMessage reply = TQDBusConnection::systemBus().call(msg);
|
|
||||||
TQString cookie;
|
|
||||||
cookie = qVariantValue<TQString> (reply.arguments()[0]);
|
|
||||||
|
|
||||||
|
|
||||||
msg = TQDBusMessage::createMethodCall("org.freedesktop.ConsoleKit",
|
|
||||||
"/org/freedesktop/ConsoleKit/Manager",
|
|
||||||
"org.freedesktop.ConsoleKit.Manager",
|
|
||||||
"CloseSession");
|
|
||||||
msg.setArguments(TQList<TQVariant> () << cookie);
|
|
||||||
TQDBusConnection::systemBus().call(msg);
|
|
||||||
// FIXME: Emitting consoleKitDBChanged is not working now
|
|
||||||
tqWarning() << "Emitting consoleKitDBChanged is not working now, test will be skipped";
|
|
||||||
//TQVERIFY(spy.count() > 0);
|
|
||||||
TQVERIFY(!authority->hasError());
|
|
||||||
|
|
||||||
// configChanged signal from authority requires changing some policy files
|
|
||||||
// and it would require user interaction (typing the password)
|
|
||||||
// so this is not covered by this test
|
|
||||||
}
|
|
||||||
|
|
||||||
void TestAuth::test_Subject()
|
|
||||||
{
|
|
||||||
// Get pid of this appication
|
|
||||||
TQ_LONG pid = TQCoreApplication::applicationPid();
|
|
||||||
// Create unix process for it
|
|
||||||
UnixProcessSubject *process = new UnixProcessSubject(pid);
|
|
||||||
// Test if pid doesn't differ
|
|
||||||
TQCOMPARE(process->pid(), pid);
|
|
||||||
|
|
||||||
// Serialize and deserialize subject
|
|
||||||
//Subject *subject = Subject::fromString(process->toString());
|
|
||||||
// and try it
|
|
||||||
//TQCOMPARE(((UnixProcess *) subject)->pid(), pid);
|
|
||||||
delete process;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TestAuth::test_Session()
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
UnixUser user(getuid());
|
|
||||||
Session *session = new Session(&user, "/org/freedesktop/ConsoleKit/Session2");
|
|
||||||
TQSignalSpy spy_completed(session, SIGNAL(completed(bool)));
|
|
||||||
TQSignalSpy spy_request(session, SIGNAL(request(TQString,bool)));
|
|
||||||
TQSignalSpy spy_error(session, SIGNAL(showError(TQString)));
|
|
||||||
TQSignalSpy spy_info(session, SIGNAL(showInfo(TQString)));
|
|
||||||
session->initiate();
|
|
||||||
session->response("aaa");
|
|
||||||
// Canceling should emit the "completed" signal
|
|
||||||
session->cancel();
|
|
||||||
TQCOMPARE(spy_completed.count(), 1);
|
|
||||||
|
|
||||||
//UnixProcess *process = new UnixProcess(TQCoreApplication::applicationPid());
|
|
||||||
//Authority::instance()->checkAuthorization("org.tqt.policykit.examples.kick", process, Authority::None);
|
|
||||||
|
|
||||||
tqDebug() << "COMPLETED:" << spy_completed.count();
|
|
||||||
tqDebug() << "REQUEST:" << spy_request.count();
|
|
||||||
tqDebug() << "ERROR:" << spy_error.count();
|
|
||||||
tqDebug() << "INFO:" << spy_info.count();
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
void TestAuth::test_Details()
|
|
||||||
{
|
|
||||||
Details details;
|
|
||||||
details.insert("1", "aaa");
|
|
||||||
details.insert("2", "bbb");
|
|
||||||
details.insert("3", "ccc");
|
|
||||||
details.insert("4", "ddd");
|
|
||||||
TQCOMPARE(details.lookup("1"), TQString("aaa"));
|
|
||||||
TQCOMPARE(details.lookup("2"), TQString("bbb"));
|
|
||||||
TQCOMPARE(details.lookup("3"), TQString("ccc"));
|
|
||||||
TQCOMPARE(details.lookup("4"), TQString("ddd"));
|
|
||||||
TQList<TQString> list = details.keys();
|
|
||||||
TQVERIFY(list.contains("1"));
|
|
||||||
TQVERIFY(list.contains("2"));
|
|
||||||
TQVERIFY(list.contains("3"));
|
|
||||||
TQVERIFY(list.contains("4"));
|
|
||||||
}
|
|
||||||
|
|
||||||
TQTEST_MAIN(TestAuth)
|
|
@ -1,20 +0,0 @@
|
|||||||
#ifndef TEST_H
|
|
||||||
#define TEST_H
|
|
||||||
|
|
||||||
#include <TQtCore/TQObject>
|
|
||||||
#include <TQtTest/TQtTest>
|
|
||||||
|
|
||||||
class TestAuth : public TQObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
private Q_SLOTS:
|
|
||||||
void test_Auth_checkAuthorization();
|
|
||||||
void test_Auth_enumerateActions();
|
|
||||||
void test_Identity();
|
|
||||||
void test_Authority();
|
|
||||||
void test_Subject();
|
|
||||||
void test_Session();
|
|
||||||
void test_Details();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // TEST_H
|
|
@ -0,0 +1,56 @@
|
|||||||
|
|
||||||
|
#include <tqstring.h>
|
||||||
|
|
||||||
|
#include "core/polkit-tqt-authority.h"
|
||||||
|
#include "core/polkit-tqt-details.h"
|
||||||
|
|
||||||
|
#define TEST_PASSED 0
|
||||||
|
#define TEST_FAILED 1
|
||||||
|
|
||||||
|
using namespace PolkitTQt;
|
||||||
|
|
||||||
|
void wait()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 100; i++)
|
||||||
|
{
|
||||||
|
usleep(100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
// This needs the file org.tqt.policykit.examples.policy from examples to be installed
|
||||||
|
ActionDescription::List list = Authority::instance()->enumerateActionsSync();
|
||||||
|
if (Authority::instance()->hasError())
|
||||||
|
{
|
||||||
|
return TEST_FAILED;
|
||||||
|
}
|
||||||
|
// Check whether enumerateAction returns at least example actions
|
||||||
|
int count = 0;
|
||||||
|
ActionDescription::List::const_iterator adIt;
|
||||||
|
for (adIt = list.begin(); adIt != list.end(); ++adIt)
|
||||||
|
{
|
||||||
|
if (((*adIt).actionId() == "org.tqt.policykit.examples.kick") ||
|
||||||
|
((*adIt).actionId() == "org.tqt.policykit.examples.cry") ||
|
||||||
|
((*adIt).actionId() == "org.tqt.policykit.examples.bleed"))
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (count != 3)
|
||||||
|
{
|
||||||
|
return TEST_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test cancelling the enumeration
|
||||||
|
Authority::instance()->enumerateActions();
|
||||||
|
Authority::instance()->enumerateActionsCancel();
|
||||||
|
wait();
|
||||||
|
if (Authority::instance()->hasError())
|
||||||
|
{
|
||||||
|
return TEST_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TEST_PASSED;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in new issue