TEST(PDMSetDeviceStaleTest, StaleDeviceNotinLinkedDevice) { EXPECT_EQ(OC_STACK_OK, PDMInit(NULL)); OicUuid_t uid1 = {{0,}}; memcpy(&uid1.id, ID_11, sizeof(uid1.id)); OicUuid_t uid2 = {{0,}}; memcpy(&uid2.id, ID_12, sizeof(uid2.id)); OicUuid_t uid3 = {{0,}}; memcpy(&uid3.id, ID_13, sizeof(uid3.id)); EXPECT_EQ(OC_STACK_OK, PDMAddDevice(&uid1)); EXPECT_EQ(OC_STACK_OK, PDMAddDevice(&uid2)); EXPECT_EQ(OC_STACK_OK, PDMAddDevice(&uid3)); EXPECT_EQ(OC_STACK_OK, PDMLinkDevices(&uid1, &uid2)); EXPECT_EQ(OC_STACK_OK, PDMLinkDevices(&uid2, &uid3)); EXPECT_EQ(OC_STACK_OK, PDMLinkDevices(&uid1, &uid3)); EXPECT_EQ(OC_STACK_OK,PDMSetDeviceStale(&uid1)); OCUuidList_t *list1 = NULL; size_t noOfDevices1 = 0; EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMGetLinkedDevices(&uid1, &list1, &noOfDevices1)); OCUuidList_t *list2 = NULL; size_t noOfDevices2 = 0; EXPECT_EQ(OC_STACK_OK, PDMGetLinkedDevices(&uid2, &list2, &noOfDevices2)); OCUuidList_t *ptr = list2; while(ptr) { EXPECT_FALSE(0 == memcmp(ptr->dev.id, uid1.id,sizeof(uid1.id))); ptr = ptr->next; } ptr = list2; while(ptr) { EXPECT_TRUE(0 == memcmp(ptr->dev.id, uid3.id,sizeof(uid3.id))); ptr = ptr->next; } OCUuidList_t *list3 = NULL; size_t noOfDevices3 = 0; EXPECT_EQ(OC_STACK_OK, PDMGetLinkedDevices(&uid3, &list3, &noOfDevices3)); ptr = list3; while(ptr) { EXPECT_FALSE(0 == memcmp(ptr->dev.id, uid1.id,sizeof(uid1.id))); ptr = ptr->next; } ptr = list3; while(ptr) { EXPECT_TRUE(0 == memcmp(ptr->dev.id, uid2.id,sizeof(uid2.id))); ptr = ptr->next; } }
TEST(PDMGetLinkedDevices, InvalidCase) { OicUuid_t uid = {{0,}}; memcpy(&uid.id, ID_6, sizeof(uid.id)); OCUuidList_t *list = NULL; size_t noOfDevices = 0; EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMGetLinkedDevices(&uid, &list, &noOfDevices)); }
TEST(CallPDMAPIbeforeInit, BeforeInit) { EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMAddDevice(NULL)); EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMIsDuplicateDevice(NULL,NULL)); 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)); EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMIsLinkExists(NULL, NULL, NULL)); }
OCStackResult OCGetLinkedStatus(const OicUuid_t* uuidOfDevice, OCUuidList_t** uuidList, size_t* numOfDevices) { return PDMGetLinkedDevices(uuidOfDevice, uuidList, numOfDevices); }
/* * Function to unlink devices. * This function will remove the credential & relationship between the two devices. * * @param[in] ctx Application context would be returned in result callback * @param[in] pTargetDev1 first device information to be unlinked. * @param[in] pTargetDev2 second device information to be unlinked. * @param[in] resultCallback callback provided by API user, callback will be called when * device unlink is finished. * @return OC_STACK_OK in case of success and other value otherwise. */ OCStackResult OCUnlinkDevices(void* ctx, const OCProvisionDev_t* pTargetDev1, const OCProvisionDev_t* pTargetDev2, OCProvisionResultCB resultCallback) { OIC_LOG(INFO, TAG, "IN OCUnlinkDevices"); OCUuidList_t* idList = NULL; size_t numOfDev = 0; if (!pTargetDev1 || !pTargetDev2 || !pTargetDev1->doxm || !pTargetDev2->doxm) { OIC_LOG(ERROR, TAG, "OCUnlinkDevices : NULL parameters"); return OC_STACK_INVALID_PARAM; } if (!resultCallback) { OIC_LOG(INFO, TAG, "OCUnlinkDevices : NULL Callback"); return OC_STACK_INVALID_CALLBACK; } if (0 == memcmp(&pTargetDev1->doxm->deviceID, &pTargetDev2->doxm->deviceID, sizeof(OicUuid_t))) { OIC_LOG(INFO, TAG, "OCUnlinkDevices : Same device ID"); return OC_STACK_INVALID_PARAM; } // Get linked devices with the first device. OCStackResult res = PDMGetLinkedDevices(&(pTargetDev1->doxm->deviceID), &idList, &numOfDev); if (OC_STACK_OK != res) { OIC_LOG(ERROR, TAG, "OCUnlinkDevices : PDMgetOwnedDevices failed"); goto error; } if (1 > numOfDev) { OIC_LOG(DEBUG, TAG, "OCUnlinkDevices : Can not find linked devices"); res = OC_STACK_INVALID_PARAM; // Input devices are not linked, No request is made goto error; } // Check the linked devices contains the second device. If yes send credential DELETE request. OCUuidList_t* curDev = idList; while (NULL != curDev) { if (memcmp(pTargetDev2->doxm->deviceID.id, curDev->dev.id, sizeof(curDev->dev.id)) == 0) { res = SRPUnlinkDevices(ctx, pTargetDev1, pTargetDev2, resultCallback); if (OC_STACK_OK != res) { OIC_LOG(ERROR, TAG, "OCUnlinkDevices : Failed to unlink devices."); } goto error; } curDev = curDev->next; } OIC_LOG(DEBUG, TAG, "No matched pair found from provisioning database"); res = OC_STACK_INVALID_PARAM; // Input devices are not linked, No request is made error: OIC_LOG(INFO, TAG, "OUT OCUnlinkDevices"); PDMDestoryOicUuidLinkList(idList); return res; }
TEST(PDMGetLinkedDevices, NULLDeviceID) { OCUuidList_t *list = NULL; size_t noOfDevices = 0; EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMGetLinkedDevices(NULL, &list, &noOfDevices)); }