[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdelibs/ksecretsservice] /: Get some of the unit-tests back into
From: Michael Leupold <lemma () confuego ! org>
Date: 2011-09-04 15:26:47
Message-ID: 20110904152647.8A3CCA60DC () git ! kde ! org
[Download RAW message or body]
Git commit f306a8a4684b17b131bd9af657c45cf1407d5e30 by Michael Leupold.
Committed on 29/10/2010 at 23:32.
Pushed by vrusu into branch 'ksecretsservice'.
Get some of the unit-tests back into shape after the latest commits. Some parts still \
missing unfortunately.
svn path=/trunk/playground/base/ksecretservice/; revision=1191187
M +39 -8 peer.h
M +16 -26 jobinfostructs.h
M +70 -12 peer.cpp
http://commits.kde.org/kdelibs/f306a8a4684b17b131bd9af657c45cf1407d5e30
diff --git a/jobinfostructs.h b/jobinfostructs.h
index 267d668..3b65351 100644
--- a/jobinfostructs.h
+++ b/jobinfostructs.h
@@ -47,35 +47,27 @@
/**
* This is the base class of all the jobs value objects
* It takes ownership of the Peer pointer and deletes it
- * when it's destructor is called
+ * when it's destructor is called.
*/
struct JobBaseInfo
{
/**
* The peer that requested the delete operation.
- * Beware when storing the pointer to the peer outside
- * this class as it's deleting it when destructed
*/
- const Peer* m_peer;
- JobBaseInfo( const Peer* peer ) : m_peer( peer )
+ const Peer m_peer;
+ JobBaseInfo(const Peer &peer) : m_peer(peer)
{ /* nothing */ }
-
- virtual ~JobBaseInfo()
- {
- if (m_peer != 0)
- delete m_peer, m_peer = 0;
- }
};
class BackendCollection;
/**
* This job value object holds information needed when creating
- * a new collection.auto.
+ * a new collection.
*/
struct CollectionCreateInfo : public JobBaseInfo
{
- const QString &m_label; /*!< new collection label */
+ const QString m_label; /*!< new collection label */
bool m_locked; /*!< if true, the collection will be locked after creation */
/**
@@ -84,8 +76,8 @@ struct CollectionCreateInfo : public JobBaseInfo
* @param label New collection's label
* @param peer Information about the d-bus peer which requests collection \
creation
*/
- CollectionCreateInfo( const QString& label, const Peer* peer ) :
- JobBaseInfo(peer), m_label( label ), m_locked(false)
+ CollectionCreateInfo(const QString& label, const Peer &peer) :
+ JobBaseInfo(peer), m_label(label), m_locked(false)
{ /* nothing */ }
};
@@ -101,8 +93,7 @@ struct CollectionDeleteInfo : public JobBaseInfo
* @param peer Information about the d-bus peer which requests collection delete
* @param collection The collection to be deleted. If NULL, it must be specified \
later
*/
- CollectionDeleteInfo( const Peer* peer, BackendCollection *collection =0) : \
JobBaseInfo( peer ),
- m_collection(collection)
+ CollectionDeleteInfo(const Peer &peer) : JobBaseInfo(peer), m_collection(0)
{ /* nothing */ }
};
@@ -118,8 +109,7 @@ struct CollectionUnlockInfo : public JobBaseInfo
* @param peer Information about the d-bus peer which requests collection \
unlocking
* @param collection The collection to be unkocked. If NULL, it must be specified \
later.
*/
- CollectionUnlockInfo( const Peer* peer, BackendCollection *collection =0) : \
JobBaseInfo( peer ),
- m_collection(collection)
+ CollectionUnlockInfo(const Peer &peer) : JobBaseInfo(peer), m_collection(0)
{ /* nothing */ }
};
@@ -127,9 +117,9 @@ class BackendItem;
struct ItemCreateInfo : public JobBaseInfo
{
- const QString &m_label; /*!< Item label */
- const QMap<QString, QString> &m_attributes; /*!< Collection of attributes to set \
for the new item */
- const QCA::SecureArray &m_secret; /*!< The secret to store */
+ const QString m_label; /*!< Item label */
+ const QMap<QString, QString> m_attributes; /*!< Collection of attributes to set \
for the new item */ + const QCA::SecureArray m_secret; /*!< The secret to store */
bool m_replace; /*!< If true, replace an item with the same attributes if it \
already exists */ bool m_locked; /*!< true if the item should be locked after \
creation, false else */
@@ -146,8 +136,8 @@ struct ItemCreateInfo : public JobBaseInfo
const QCA::SecureArray &secret,
bool replace,
bool locked,
- const Peer* peer) :
- JobBaseInfo( peer ),
+ const Peer &peer) :
+ JobBaseInfo(peer),
m_label(label), m_attributes(attributes), m_secret(secret),
m_replace(replace), m_locked(locked)
{ /* nothing */ }
@@ -164,7 +154,7 @@ struct ItemDeleteInfo : public JobBaseInfo
* @param peer the d-bus peer that initiated the item delete operation
* @param item the item to be deleted. If NULL, it must be specified later.
*/
- ItemDeleteInfo( const Peer* peer, BackendItem *item =0) : JobBaseInfo( peer ), \
m_item( item ) + ItemDeleteInfo( const Peer &peer) : JobBaseInfo(peer), m_item(0)
{ /* nothing */ }
};
@@ -179,7 +169,7 @@ struct ItemUnlockInfo : public JobBaseInfo
* @param peer the d-bus peer that initiated the item delete operation
* @param item the item to be deleted. If NULL, it must be specified later.
*/
- ItemUnlockInfo( const Peer *peer, BackendItem *item =0) : JobBaseInfo( peer ), \
m_item( item ) + ItemUnlockInfo( const Peer &peer) : JobBaseInfo(peer), m_item(0)
{ /* nothing */ }
};
diff --git a/peer.cpp b/peer.cpp
index 2f11768..e235b70 100644
--- a/peer.cpp
+++ b/peer.cpp
@@ -20,38 +20,96 @@
#include "peer.h"
-#include <QFile>
+#include <QtCore/QFile>
+#include <QtCore/QSharedData>
#include <kdebug.h>
-Peer::Peer( uint pid ) :
- m_pid( pid )
+class PeerData : public QSharedData
{
+public:
+ PeerData() : m_valid(false), m_pid(0) {}
+ PeerData(const PeerData &other) : QSharedData(other), m_pid(other.m_pid) {}
+ ~PeerData() {}
+
+ // designates whether this Peer is valid as it's not certain that
+ // a pid of 0 can always denote an invalid peer.
+ bool m_valid;
+
+ // peer process pid
+ uint m_pid;
+};
+
+Peer::Peer() : d(new PeerData)
+{
+}
+
+Peer::Peer(const Peer &other) : d(other.d)
+{
+}
+
+Peer &Peer::operator=(const Peer &other)
+{
+ d = other.d;
+ return *this;
+}
+
+Peer::Peer(uint pid) : d(new PeerData)
+{
+ d->m_valid = true;
+ d->m_pid = pid;
+
kDebug() << "Peer " << pid;
kDebug() << " cmdLine = " << cmdLine();
kDebug() << " exePath = " << exePath();
}
+Peer::~Peer()
+{
+}
+
QString Peer::procFileName() const
{
- return QString("/proc/%1").arg( m_pid );
+ Q_ASSERT(d->m_valid);
+ return QString("/proc/%1").arg(d->m_pid);
+}
+
+QByteArray Peer::cmdLine() const
+{
+ if (!d->m_valid) {
+ return QByteArray();
+ } else {
+ QFile procFile(QString("%1/cmd").arg(procFileName()));
+ if (!procFile.open(QIODevice::ReadOnly | QIODevice::Text) ||
+ procFile.atEnd()) {
+ // file doesn't exist or is empty
+ return QByteArray();
+ } else {
+ return procFile.readLine();
+ }
+ }
}
-QString Peer::cmdLine() const
+bool Peer::isValid() const
{
- QFile procFile( QString("%s/cmd").arg( procFileName() ) );
- return procFile.readLine();
+ return d->m_valid;
}
bool Peer::isStillRunning() const
{
- QFile procFile( procFileName() );
- return procFile.exists();
+ if (!d->m_valid) {
+ return false;
+ } else {
+ return QFile::exists(procFileName());
+ }
}
QString Peer::exePath() const
{
- QFile procFile( QString("%s/exe").arg( procFileName() )) ;
- // TODO: add a watch an trigger signal when the peer process ends
- return procFile.symLinkTarget();
+ if (!d->m_valid) {
+ return QString();
+ } else {
+ // TODO: add a watch an trigger signal when the peer process ends
+ QFile::symLinkTarget(QString("%1/exe").arg(procFileName()));
+ }
}
diff --git a/peer.h b/peer.h
index 2e3a6e7..a16adaf 100644
--- a/peer.h
+++ b/peer.h
@@ -21,7 +21,10 @@
#ifndef DEAMON_PEER_H
#define DEAMON_PEER_H
-#include <QtGlobal>
+#include <QtCore/QtGlobal>
+#include <QtCore/QSharedDataPointer>
+
+class PeerData;
/**
* Representation of a daemon peer, wich is typically a client application.
@@ -31,7 +34,30 @@
class Peer
{
public:
- Peer( uint pid );
+ /**
+ * Construct an invalid (non-existant) Peer.
+ */
+ Peer();
+
+ /**
+ * Copy constructor.
+ */
+ Peer(const Peer &other);
+
+ /**
+ * Copy operator.
+ */
+ Peer &operator=(const Peer &other);
+
+ /**
+ * Construct a valid Peer representing the process with the given pid.
+ */
+ explicit Peer(uint pid);
+
+ /**
+ * Destructor.
+ */
+ ~Peer();
/**
* Get the running state of the peer process
@@ -46,19 +72,24 @@ public:
/**
* Get the command line used to launch the running process
*/
- QString cmdLine() const;
+ QByteArray cmdLine() const;
+
+ /**
+ * Check if the peer is valid. An invalid peer identifies test applications
+ * or requests sent in-process.
+ */
+ bool isValid() const;
private:
/**
* Helper method witch returns the /proc/pid path for the
- * peer process
+ * peer process.
+ *
+ * @note Must only be called on valid peers.
*/
QString procFileName() const;
- /**
- * Peer process PID
- */
- uint m_pid;
+ QSharedDataPointer<PeerData> d;
};
#endif // DEAMON_PEER_H
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic