save_data(alias, data, len, nullptr, expected_err, exportable);
}
+PidBound::PidBound() : m_pid(getpid()) {}
+
+bool PidBound::SamePid() const
+{
+ return getpid() == m_pid;
+}
+
ScopedSaveData::ScopedSaveData(const char* alias, const char *data, int expected_err) : m_alias(alias)
{
save_data(alias, data, expected_err);
ScopedSaveData::~ScopedSaveData()
{
+ if (!SamePid())
+ return;
+
/*
* Let it throw. If we can't remove data then remaining tests results will be
* unreliable anyway.
}
ScopedDBUnlock::~ScopedDBUnlock()
{
+ if (!SamePid())
+ return;
+
int temp;
RUNNER_ASSERT_MSG(CKMC_ERROR_NONE == (temp = ckmc_lock_user_key(m_uid)), CKMCErrorToString(temp));
}
void save_data(const char* alias, const char *data, size_t len,
int expected_err = CKMC_ERROR_NONE, bool exportable = true);
-class ScopedSaveData
+class PidBound
+{
+public:
+ PidBound();
+
+protected:
+ bool SamePid() const;
+
+private:
+ pid_t m_pid;
+};
+
+class ScopedSaveData : public PidBound
{
public:
ScopedSaveData(const char* alias, const char *data, int expected_err = CKMC_ERROR_NONE);
- virtual ~ScopedSaveData();
+ ~ScopedSaveData();
private:
std::string m_alias;
};
-class ScopedDBUnlock
+class ScopedDBUnlock : public PidBound
{
public:
ScopedDBUnlock(uid_t user_id, const char* passwd);
- virtual ~ScopedDBUnlock();
+ ~ScopedDBUnlock();
private:
uid_t m_uid;