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)); }
TEST(PDMIsLinkExistsTest, DuplicateID) { EXPECT_EQ(OC_STACK_OK, PDMInit(NULL)); OicUuid_t uid1 = {{0,}}; memcpy(&uid1.id, ID_7, sizeof(uid1.id)); EXPECT_EQ(OC_STACK_OK, PDMAddDevice(&uid1)); OicUuid_t uid2 = {{0,}}; memcpy(&uid2.id, ID_8, sizeof(uid2.id)); EXPECT_EQ(OC_STACK_OK, PDMAddDevice(&uid2)); bool linkExisits = true; OCStackResult res = PDMIsLinkExists(&uid1, &uid2, &linkExisits); EXPECT_EQ(OC_STACK_OK, res); EXPECT_FALSE(linkExisits); }
/** * function to provision credentials between two devices and ACLs for the devices who act as a server. * * @param[in] ctx Application context would be returned in result callback. * @param[in] type Type of credentials to be provisioned to the device. * @param[in] pDev1 Pointer to OCProvisionDev_t instance,respresenting resource to be provsioned. * @param[in] acl ACL for device 1. If this is not required set NULL. * @param[in] pDev2 Pointer to OCProvisionDev_t instance,respresenting resource to be provsioned. * @param[in] acl ACL for device 2. If this is not required set NULL. * @param[in] resultCallback callback provided by API user, callback will be called when * provisioning request recieves a response from first resource server. * @return OC_STACK_OK in case of success and other value otherwise. */ OCStackResult OCProvisionPairwiseDevices(void* ctx, OicSecCredType_t type, size_t keySize, const OCProvisionDev_t *pDev1, OicSecAcl_t *pDev1Acl, const OCProvisionDev_t *pDev2, OicSecAcl_t *pDev2Acl, OCProvisionResultCB resultCallback) { if (!pDev1 || !pDev2 || !pDev1->doxm || !pDev2->doxm) { OIC_LOG(ERROR, TAG, "OCProvisionPairwiseDevices : Invalid parameters"); return OC_STACK_INVALID_PARAM; } if (!resultCallback) { OIC_LOG(INFO, TAG, "OCProvisionPairwiseDevices : NULL Callback"); return OC_STACK_INVALID_CALLBACK; } if (!(keySize == OWNER_PSK_LENGTH_128 || keySize == OWNER_PSK_LENGTH_256)) { OIC_LOG(INFO, TAG, "OCProvisionPairwiseDevices : Invalid key size"); return OC_STACK_INVALID_PARAM; } if (0 == memcmp(&pDev1->doxm->deviceID, &pDev2->doxm->deviceID, sizeof(OicUuid_t))) { OIC_LOG(INFO, TAG, "OCProvisionPairwiseDevices : Same device ID"); return OC_STACK_INVALID_PARAM; } OIC_LOG(DEBUG, TAG, "Checking link in DB"); bool linkExists = true; OCStackResult res = PDMIsLinkExists(&pDev1->doxm->deviceID, &pDev2->doxm->deviceID, &linkExists); if(res != OC_STACK_OK) { OIC_LOG(ERROR, TAG, "Internal Error Occured"); return res; } if (linkExists) { OIC_LOG(ERROR, TAG, "Link already exists"); return OC_STACK_INVALID_PARAM; } int noOfResults = 2; // Initial Value if (NULL != pDev1Acl) { ++noOfResults; } if (NULL != pDev2Acl) { ++noOfResults; } Linkdata_t *link = (Linkdata_t*) OICMalloc(sizeof(Linkdata_t)); if (!link) { OIC_LOG(ERROR, TAG, "Failed to memory allocation"); return OC_STACK_NO_MEMORY; } OIC_LOG_V(INFO,TAG, "Maximum no od results %d",noOfResults); link->pDev1 = pDev1; link->pDev1Acl = pDev1Acl; link->pDev2 = pDev2; link->pDev2Acl = pDev2Acl; link->ctx = ctx; // 1 call for each device for credential provisioning. implict call by SRPProvisioning credential // 1 call for ACL provisioning for device 1 and 1 call for ACL provisioning for device 2. link->numOfResults = noOfResults; link->resultCallback = resultCallback; link->currentCountResults = 0; link->resArr = (OCProvisionResult_t*) OICMalloc(sizeof(OCProvisionResult_t)*noOfResults); res = SRPProvisionCredentials(link, type, keySize, pDev1, pDev2, &ProvisionCredsCB); if (res != OC_STACK_OK) { OICFree(link->resArr); OICFree(link); } return res; }