parent
1200d940ad
commit
652c2aea23
@ -0,0 +1,70 @@
|
||||
#################################################
|
||||
#
|
||||
# (C) 2019 Michele Calgaro
|
||||
# michele (DOT) calgaro (AT) yahoo (DOT) it
|
||||
#
|
||||
# Improvements and feedbacks are welcome
|
||||
#
|
||||
# This file is released under GPL >= 3
|
||||
#
|
||||
#################################################
|
||||
|
||||
include_directories(
|
||||
${TQT_INCLUDE_DIRS}
|
||||
${TDE_INCLUDE_DIR}
|
||||
${CMAKE_SOURCE_DIR}
|
||||
${CMAKE_BINARY_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${CMAKE_SOURCE_DIR}/core
|
||||
${CMAKE_SOURCE_DIR}/gui
|
||||
${CMAKE_SOURCE_DIR}/agent
|
||||
)
|
||||
|
||||
set( link-polkit-tqt-test
|
||||
${TQT_LIBRARIES}
|
||||
polkit-tqt-core-shared
|
||||
polkit-tqt-gui-shared
|
||||
polkit-tqt-agent-shared
|
||||
)
|
||||
|
||||
|
||||
### executable files
|
||||
|
||||
# These tests are executed automatically during build
|
||||
set( _test_auto_executables
|
||||
test_details
|
||||
test_identity
|
||||
test_subject
|
||||
)
|
||||
|
||||
# These executables are built but no automatic test is performed.
|
||||
# To run these tests manually, a full polkit environment is needed
|
||||
# and either the test is run as root or the file
|
||||
# ${CMAKE_SOURCE_DIR}/examples/org.tqt.policykit.examples.policy
|
||||
# needs to be copied to the /usr/share/polkit-1/actions folder first.
|
||||
# If run as root, sudo is also required because the inner part of the
|
||||
# tests need to be run as a non root user. A "testuser" user is created
|
||||
# and removed during the test. To run a test, use the following commands:
|
||||
# cd ${CMAKE_CURRENT_BINARY_DIR}
|
||||
# ${CMAKE_CURRENT_SOURCE_DIR}/run_test.sh <path/to/test_executable_file>
|
||||
set( _test_manual_executables
|
||||
test_check_authorization
|
||||
)
|
||||
|
||||
foreach( _test_name ${_test_auto_executables} )
|
||||
tde_add_check_executable( ${_test_name}
|
||||
SOURCES ${_test_name}.cpp AUTOMOC
|
||||
LINK ${link-polkit-tqt-test}
|
||||
)
|
||||
|
||||
add_test( ${_test_name} ${_test_name} )
|
||||
endforeach( )
|
||||
|
||||
foreach( _test_name ${_test_manual_executables} )
|
||||
tde_add_check_executable( ${_test_name}
|
||||
SOURCES ${_test_name}.cpp AUTOMOC
|
||||
LINK ${link-polkit-tqt-test}
|
||||
)
|
||||
endforeach( )
|
||||
|
@ -0,0 +1,48 @@
|
||||
#!/bin/sh
|
||||
|
||||
SCRIPT_DIR=$(dirname $(readlink -f "$0"))
|
||||
|
||||
# check user
|
||||
USERNAME=`whoami`
|
||||
I_AM_ROOT=n
|
||||
if [ "${USERNAME}" = "root" ]; then
|
||||
I_AM_ROOT=y
|
||||
fi
|
||||
|
||||
# check if polkit files need to be copied
|
||||
DEST_FILE="/usr/share/polkit-1/actions/org.tqt.policykit.examples.policy"
|
||||
FILE_EXISTS='n'
|
||||
if [ -f "${DEST_FILE}" ]; then
|
||||
FILE_EXISTS='y'
|
||||
fi
|
||||
|
||||
if [ "${I_AM_ROOT}" = "y" ]; then
|
||||
if [ "${FILE_EXISTS}" = "n" ]; then
|
||||
cp "${SCRIPT_DIR}/../examples/org.tqt.policykit.examples.policy" "${DEST_FILE}"
|
||||
fi
|
||||
useradd testuser
|
||||
sudo -u testuser $1
|
||||
retval=$?
|
||||
userdel testuser
|
||||
if [ "${FILE_EXISTS}" = "n" ]; then
|
||||
rm "${DEST_FILE}"
|
||||
fi
|
||||
else
|
||||
if [ "${FILE_EXISTS}" = "y" ]; then
|
||||
# Required file already exist, can do the test
|
||||
$1
|
||||
retval=$?
|
||||
else
|
||||
echo "This test requires file ${DEST_FILE} to exists. Skipping test."
|
||||
retval=0
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ${retval} = 0 ]; then
|
||||
echo "Test passed."
|
||||
else
|
||||
echo "Test failed."
|
||||
fi
|
||||
|
||||
exit $retval
|
||||
|
@ -0,0 +1,61 @@
|
||||
|
||||
#include <unistd.h>
|
||||
#include <tqstring.h>
|
||||
#include "core/polkit-tqt-authority.h"
|
||||
|
||||
#define TEST_PASSED 0
|
||||
#define TEST_FAILED 1
|
||||
|
||||
using namespace PolkitTQt;
|
||||
|
||||
int main(void)
|
||||
{
|
||||
// This needs the file org.tqt.policykit.examples.policy from examples to be installed
|
||||
UnixProcessSubject process(getpid());
|
||||
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);
|
||||
if (result != Authority::No)
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
if (authority->hasError())
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
result = authority->checkAuthorizationSync("org.tqt.policykit.examples.cry", process, Authority::None);
|
||||
if (result != Authority::Yes)
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
if (authority->hasError())
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
result = authority->checkAuthorizationSync("org.tqt.policykit.examples.bleed", process, Authority::None);
|
||||
if (result != Authority::Challenge)
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
if (authority->hasError())
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
|
||||
// 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();
|
||||
if (authority->hasError())
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
// But how to test if it was successful?
|
||||
tqWarning("You should see an authentication dialog for a short period.");
|
||||
|
||||
return TEST_PASSED;
|
||||
}
|
||||
|
@ -0,0 +1,57 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <tqstring.h>
|
||||
#include <tqstringlist.h>
|
||||
#include "core/polkit-tqt-details.h"
|
||||
|
||||
#define TEST_PASSED 0
|
||||
#define TEST_FAILED 1
|
||||
|
||||
using namespace PolkitTQt;
|
||||
|
||||
int main(void)
|
||||
{
|
||||
Details details;
|
||||
details.insert("1", "aaa");
|
||||
details.insert("2", "bbb");
|
||||
details.insert("3", "ccc");
|
||||
details.insert("4", "ddd");
|
||||
|
||||
if (details.lookup("1") != TQString("aaa"))
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
if (details.lookup("2") != TQString("bbb"))
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
if (details.lookup("3") != TQString("ccc"))
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
if (details.lookup("4") != TQString("ddd"))
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
|
||||
TQStringList list = details.keys();
|
||||
if (!list.contains("1"))
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
if (!list.contains("2"))
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
if (!list.contains("3"))
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
if (!list.contains("4"))
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
|
||||
return TEST_PASSED;
|
||||
}
|
||||
|
@ -0,0 +1,53 @@
|
||||
|
||||
#include <pwd.h>
|
||||
#include <tqstring.h>
|
||||
#include "core/polkit-tqt-identity.h"
|
||||
|
||||
#define TEST_PASSED 0
|
||||
#define TEST_FAILED 1
|
||||
|
||||
using namespace PolkitTQt;
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int test_result = TEST_PASSED;
|
||||
|
||||
// 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;
|
||||
|
||||
// Create generic Identity from UnixUser via string representation
|
||||
UnixUserIdentity user(userName);
|
||||
if (!user.identity())
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
Identity id = Identity::fromString(user.toString());
|
||||
if (static_cast<UnixUserIdentity*>(&id)->uid() != userId)
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
|
||||
UnixGroupIdentity group(groupId);
|
||||
if (!group.identity())
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
id = Identity::fromString(group.toString());
|
||||
if (static_cast<UnixGroupIdentity*>(&id)->gid() != groupId)
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
|
||||
// Test setting gid to another value
|
||||
group.setGid(9999U);
|
||||
id = Identity::fromString(group.toString());
|
||||
if (static_cast<UnixGroupIdentity*>(&id)->gid() != 9999U)
|
||||
{
|
||||
return TEST_FAILED;
|
||||
}
|
||||
|
||||
return TEST_PASSED;
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
|
||||
#include <unistd.h>
|
||||
#include <tqstring.h>
|
||||
#include "core/polkit-tqt-subject.h"
|
||||
|
||||
#define TEST_PASSED 0
|
||||
#define TEST_FAILED 1
|
||||
|
||||
using namespace PolkitTQt;
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int test_result = TEST_PASSED;
|
||||
|
||||
// Create unix process for current process
|
||||
TQ_LONG pid = getpid();
|
||||
UnixProcessSubject *process = new UnixProcessSubject(pid);
|
||||
if (process->pid() != pid)
|
||||
{
|
||||
test_result = TEST_FAILED;
|
||||
}
|
||||
|
||||
// Serialize and deserialize subject
|
||||
Subject subject = Subject::fromString(process->toString());
|
||||
if (((UnixProcessSubject*)&subject)->pid() != pid)
|
||||
{
|
||||
test_result = TEST_FAILED;
|
||||
}
|
||||
|
||||
delete process;
|
||||
return test_result;
|
||||
}
|
Loading…
Reference in new issue