*
* *****************************************************************/
-
#include <stdio.h>
#include <stdbool.h>
#include <sqlite3.h>
#define ASCENDING_ORDER(id1, id2) do{if( (id1) > (id2) )\
{ int temp; temp = id1; id1 = id2; id2 = temp; }}while(0)
+#define CHECK_PDM_INIT(tag) do{if(true != gInit)\
+ { OC_LOG(ERROR, (tag), PCF("PDB is not initialized")); \
+ return OC_STACK_PDM_IS_NOT_INITIALIZED; }}while(0)
+
static sqlite3 *g_db = NULL;
+static bool gInit = false; /* Only if we can open sqlite db successfully, gInit is true. */
/**
* function to create DB in case DB doesn't exists
PDM_VERIFY_SQLITE_OK(TAG, result, ERROR, OC_STACK_ERROR);
OC_LOG(INFO, TAG, "Created T_DEVICE_LINK_STATE");
+ gInit = true;
return OC_STACK_OK;
}
OC_LOG_V(INFO, TAG, "ERROR: Can't open database: %s", sqlite3_errmsg(g_db));
return createDB(dbPath);
}
+ gInit = true;
return OC_STACK_OK;
}
OCStackResult PDMAddDevice(const OicUuid_t *UUID)
{
+ CHECK_PDM_INIT(TAG);
if (NULL == UUID)
{
return OC_STACK_INVALID_PARAM;
*/
bool PDMIsDuplicateDevice(const OicUuid_t* UUID)
{
- if (NULL == UUID)
+ if(gInit)
{
- OC_LOG(ERROR, TAG, "UUID is NULL");
- return true;
- }
+ if (NULL == UUID)
+ {
+ OC_LOG(ERROR, TAG, "UUID is NULL");
+ return true;
+ }
- sqlite3_stmt *stmt = 0;
- int res = 0;
- res = sqlite3_prepare_v2(g_db, PDM_SQLITE_GET_ID, strlen(PDM_SQLITE_GET_ID) + 1, &stmt, NULL);
- PDM_VERIFY_SQLITE_OK(TAG, res, ERROR, OC_STACK_ERROR);
+ sqlite3_stmt *stmt = 0;
+ int res = 0;
+ res = sqlite3_prepare_v2(g_db, PDM_SQLITE_GET_ID, strlen(PDM_SQLITE_GET_ID) + 1, &stmt, NULL);
+ PDM_VERIFY_SQLITE_OK(TAG, res, ERROR, OC_STACK_ERROR);
- res = sqlite3_bind_blob(stmt, PDM_BIND_INDEX_FIRST, UUID, UUID_LENGTH, SQLITE_STATIC);
- PDM_VERIFY_SQLITE_OK(TAG, res, ERROR, OC_STACK_ERROR);
+ res = sqlite3_bind_blob(stmt, PDM_BIND_INDEX_FIRST, UUID, UUID_LENGTH, SQLITE_STATIC);
+ PDM_VERIFY_SQLITE_OK(TAG, res, ERROR, OC_STACK_ERROR);
- OC_LOG(DEBUG, TAG, "Binding Done");
+ OC_LOG(DEBUG, TAG, "Binding Done");
- while (SQLITE_ROW == sqlite3_step(stmt))
- {
- OC_LOG(ERROR, TAG, "UUID is duplicated");
+ while (SQLITE_ROW == sqlite3_step(stmt))
+ {
+ OC_LOG(ERROR, TAG, "UUID is duplicated");
+ sqlite3_finalize(stmt);
+ return true;
+ }
sqlite3_finalize(stmt);
- return true;
+ return false;
}
- sqlite3_finalize(stmt);
- return false;
+ OC_LOG(ERROR, TAG, PCF("PDB is not initialized"));
+ return true; // return true will stop futher process.
}
/**
OCStackResult PDMLinkDevices(const OicUuid_t *UUID1, const OicUuid_t *UUID2)
{
-
+ CHECK_PDM_INIT(TAG);
if (NULL == UUID1 || NULL == UUID2)
{
OC_LOG(ERROR, TAG, "Invalid PARAM");
OCStackResult PDMUnlinkDevices(const OicUuid_t *UUID1, const OicUuid_t *UUID2)
{
+ CHECK_PDM_INIT(TAG);
if (NULL == UUID1 || NULL == UUID2)
{
OC_LOG(ERROR, TAG, "Invalid PARAM");
OCStackResult PDMDeleteDevice(const OicUuid_t *UUID)
{
+ CHECK_PDM_INIT(TAG);
if (NULL == UUID)
{
return OC_STACK_INVALID_PARAM;
}
-OCStackResult updateLinkState(int id1, int id2, int state)
+static OCStackResult updateLinkState(int id1, int id2, int state)
{
sqlite3_stmt *stmt = 0;
int res = 0 ;
OCStackResult PDMSetLinkStale(const OicUuid_t* uuidOfDevice1, const OicUuid_t* uuidOfDevice2)
{
+ CHECK_PDM_INIT(TAG);
if (NULL == uuidOfDevice1 || NULL == uuidOfDevice2)
{
OC_LOG(ERROR, TAG, "Invalid PARAM");
OCStackResult PDMGetOwnedDevices(OCUuidList_t **uuidList, size_t *numOfDevices)
{
+ CHECK_PDM_INIT(TAG);
if (NULL != *uuidList)
{
OC_LOG(ERROR, TAG, "Not null list will cause memory leak");
OCStackResult PDMGetLinkedDevices(const OicUuid_t *UUID, OCUuidList_t **UUIDLIST, size_t *numOfDevices)
{
+ CHECK_PDM_INIT(TAG);
if (NULL != *UUIDLIST)
{
OC_LOG(ERROR, TAG, "Not null list will cause memory leak");
OCStackResult PDMGetToBeUnlinkedDevices(OCPairList_t **staleDevList, size_t *numOfDevices)
{
+ CHECK_PDM_INIT(TAG);
if (NULL != *staleDevList)
{
OC_LOG(ERROR, TAG, "Not null list will cause memory leak");
OCStackResult PDMClose()
{
+ CHECK_PDM_INIT(TAG);
int res = 0;
res = sqlite3_close(g_db);
PDM_VERIFY_SQLITE_OK(TAG, res, ERROR, OC_STACK_ERROR);
const char ID_5[] = "5111111111111111";
const char ID_6[] = "6111111111111111";
+TEST(CallPDMAPIbeforeInit, BeforeInit)
+{
+ EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMAddDevice(NULL));
+ EXPECT_EQ(true, PDMIsDuplicateDevice(NULL)); // return type is not OCStackResult
+ EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMLinkDevices(NULL, NULL));
+ EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMUnlinkDevices(NULL, NULL));
+ EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMDeleteDevice(NULL));
+ EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMGetOwnedDevices(NULL, NULL));
+ EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMGetLinkedDevices(NULL, NULL, NULL));
+ EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMSetLinkStale(NULL, NULL));
+ EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMGetToBeUnlinkedDevices(NULL, NULL));
+}
+
TEST(PDMInitTest, PDMInitWithNULL)
{
EXPECT_EQ(OC_STACK_OK, PDMInit(NULL));