+//******************************************************************
+//
// Copyright 2015 Intel Mobile Communications GmbH All Rights Reserved.
//
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#include "gtest/gtest.h"
#include "ocstack.h"
+#include "ocserverrequest.h"
+#include "oic_string.h"
+#include "oic_malloc.h"
#include "resourcemanager.h"
#include "securevirtualresourcetypes.h"
#include "srmresourcestrings.h"
#include "doxmresource.h"
-#include "ocserverrequest.h"
-#include "oic_string.h"
-#include "oic_malloc.h"
-#include "logger.h"
+#include "security_internals.h"
#define TAG "SRM-DOXM"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-//Declare Doxm resource methods for testing
-OCStackResult CreateDoxmResource();
-OCEntityHandlerResult DoxmEntityHandler (OCEntityHandlerFlag flag,
- OCEntityHandlerRequest * ehRequest);
-char * BinToDoxmJSON(const OicSecDoxm_t * doxm);
-OicSecDoxm_t * JSONToDoxmBin(const char * jsonStr);
-void InitSecDoxmInstance(OicSecDoxm_t * doxm);
-OCEntityHandlerResult HandleDoxmPostRequest (const OCEntityHandlerRequest * ehRequest);
-void DeleteDoxmBinData(OicSecDoxm_t* doxm);
-OCEntityHandlerResult HandleDoxmGetRequest (const OCEntityHandlerRequest * ehRequest);
-#ifdef __cplusplus
-}
-#endif
-
-
OicSecDoxm_t * getBinDoxm()
{
- OicSecDoxm_t * doxm = (OicSecDoxm_t*)OICCalloc(1, sizeof(OicSecDoxm_t));
- if(!doxm)
+ OicSecDoxm_t *doxm = (OicSecDoxm_t *)OICCalloc(1, sizeof(*doxm));
+ if (!doxm)
{
return NULL;
}
doxm->oxmTypeLen = 1;
- doxm->oxmType = (OicUrn_t *)OICCalloc(doxm->oxmTypeLen, sizeof(char *));
- if(!doxm->oxmType)
+ doxm->oxmType = (OicUrn_t *)OICCalloc(doxm->oxmTypeLen, sizeof(*doxm->oxmType));
+ if (!doxm->oxmType)
{
OICFree(doxm);
return NULL;
}
- doxm->oxmType[0] = (char*)OICMalloc(strlen(OXM_JUST_WORKS) + 1);
- if(!doxm->oxmType[0])
+ doxm->oxmType[0] = (char *) OICMalloc(strlen(OXM_JUST_WORKS) + 1);
+ if (!doxm->oxmType[0])
{
OICFree(doxm->oxmType);
OICFree(doxm);
return NULL;
}
- strcpy(doxm->oxmType[0], OXM_JUST_WORKS);
+ OICStrcpy(doxm->oxmType[0], strlen(OXM_JUST_WORKS) + 1, OXM_JUST_WORKS);
doxm->oxmLen = 1;
doxm->oxm = (OicSecOxm_t *)OICCalloc(doxm->oxmLen, sizeof(OicSecOxm_t));
if(!doxm->oxm)
doxm->oxm[0] = OIC_JUST_WORKS;
doxm->oxmSel = OIC_JUST_WORKS;
+ doxm->sct = SYMMETRIC_PAIR_WISE_KEY;
doxm->owned = true;
//TODO: Need more clarification on deviceIDFormat field type.
//doxm.deviceIDFormat = URN;
- strcpy((char *) doxm->deviceID.id, "deviceId");
- strcpy((char *)doxm->owner.id, "ownersId");
+
+ uint8_t deviceId[] = {0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64};
+ memcpy(doxm->deviceID.id, deviceId, sizeof(deviceId));
+ uint8_t ownerId[] = {0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x49, 0x64};
+ memcpy(doxm->owner.id, ownerId, sizeof(ownerId));
return doxm;
}
//InitDoxmResource Tests
-TEST(InitDoxmResourceTest, InitDoxmResource)
+TEST(DoxmResourceTest, InitDoxmResource)
{
EXPECT_EQ(OC_STACK_INVALID_PARAM, InitDoxmResource());
}
//DeInitDoxmResource Tests
-TEST(DeInitDoxmResourceTest, DeInitDoxmResource)
+TEST(DoxmResourceTest, DeInitDoxmResource)
{
EXPECT_EQ(OC_STACK_ERROR, DeInitDoxmResource());
}
//CreateDoxmResource Tests
-TEST(CreateDoxmResourceTest, CreateDoxmResource)
+TEST(DoxmResourceTest, CreateDoxmResource)
{
EXPECT_EQ(OC_STACK_INVALID_PARAM, CreateDoxmResource());
}
//DoxmEntityHandler Tests
-TEST(DoxmEntityHandlerTest, DoxmEntityHandlerWithDummyRequest)
+TEST(DoxmResourceTest, DoxmEntityHandlerWithDummyRequest)
{
- OCEntityHandlerRequest req;
- EXPECT_EQ(OC_EH_ERROR, DoxmEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, &req));
+ OCEntityHandlerRequest req = OCEntityHandlerRequest();
+ EXPECT_EQ(OC_EH_ERROR, DoxmEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, &req, NULL));
}
-TEST(DoxmEntityHandlerTest, DoxmEntityHandlerWithNULLRequest)
+TEST(DoxmResourceTest, DoxmEntityHandlerWithNULLRequest)
{
- EXPECT_EQ(OC_EH_ERROR, DoxmEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, NULL));
+ EXPECT_EQ(OC_EH_ERROR, DoxmEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, NULL, NULL));
}
-TEST(DoxmEntityHandlerTest, DoxmEntityHandlerInvalidFlag)
+TEST(DoxmResourceTest, DoxmEntityHandlerInvalidFlag)
{
- OCEntityHandlerRequest req;
- EXPECT_EQ(OC_EH_ERROR, DoxmEntityHandler(OCEntityHandlerFlag::OC_OBSERVE_FLAG, &req));
+ OCEntityHandlerRequest req = OCEntityHandlerRequest();
+ EXPECT_EQ(OC_EH_ERROR, DoxmEntityHandler(OCEntityHandlerFlag::OC_OBSERVE_FLAG, &req, NULL));
}
-TEST(DoxmEntityHandlerTest, DoxmEntityHandlerValidRequest)
+TEST(DoxmResourceTest, DoxmEntityHandlerValidRequest)
{
EXPECT_EQ(OC_STACK_INVALID_PARAM, InitDoxmResource());
char query[] = "oxm=0;owned=false;owner=owner1";
OCEntityHandlerRequest req = OCEntityHandlerRequest();
req.method = OC_REST_GET;
req.query = OICStrdup(query);
- EXPECT_EQ(OC_EH_ERROR, DoxmEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, &req));
+ EXPECT_EQ(OC_EH_ERROR, DoxmEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, &req, NULL));
OICFree(req.query);
}
-//BinToDoxmJSON Tests
-TEST(BinToDoxmJSONTest, BinToDoxmJSONNullDoxm)
+TEST(DoxmResourceTest, DoxmEntityHandlerDeviceIdQuery)
{
- char* value = BinToDoxmJSON(NULL);
- EXPECT_TRUE(value == NULL);
+ EXPECT_EQ(OC_STACK_INVALID_PARAM, InitDoxmResource());
+ char query[] = "deviceuuid=2222222222222222";
+ OCEntityHandlerRequest req = OCEntityHandlerRequest();
+ req.method = OC_REST_GET;
+ req.query = OICStrdup(query);
+ EXPECT_EQ(OC_EH_ERROR, DoxmEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, &req, NULL));
+
+ OICFree(req.query);
}
-TEST(BinToDoxmJSONTest, BinToDoxmJSONValidDoxm)
+TEST(DoxmResourceTest, DoxmToCBORPayloadNULL)
{
- OicSecDoxm_t * doxm = getBinDoxm();
-
- char * json = BinToDoxmJSON(doxm);
- OC_LOG_V(INFO, TAG, "BinToDoxmJSON:%s", json);
- EXPECT_TRUE(json != NULL);
-
+ OicSecDoxm_t *doxm = getBinDoxm();
+ size_t size = 10;
+ uint8_t *payload = NULL;
+ EXPECT_EQ(OC_STACK_INVALID_PARAM, DoxmToCBORPayload(NULL, NULL, 0, false));
+ EXPECT_EQ(OC_STACK_INVALID_PARAM, DoxmToCBORPayload(doxm, NULL, &size, false));
+ EXPECT_EQ(OC_STACK_INVALID_PARAM, DoxmToCBORPayload(doxm, &payload, 0, false));
+ EXPECT_EQ(OC_STACK_INVALID_PARAM, DoxmToCBORPayload(NULL, &payload, &size, false));
DeleteDoxmBinData(doxm);
- OICFree(json);
}
-//JSONToDoxmBin Tests
-TEST(JSONToDoxmBinTest, JSONToDoxmBinValidJSON)
+TEST(DoxmResourceTest, DoxmToCBORPayloadVALID)
{
- OicSecDoxm_t * doxm1 = getBinDoxm();
- char * json = BinToDoxmJSON(doxm1);
- EXPECT_TRUE(json != NULL);
+ OicSecDoxm_t *doxm = getBinDoxm();
- OicSecDoxm_t *doxm2 = JSONToDoxmBin(json);
- EXPECT_TRUE(doxm2 != NULL);
+ uint8_t *payload = NULL;
+ size_t size = 0;
+ EXPECT_EQ(OC_STACK_OK, DoxmToCBORPayload(doxm, &payload, &size, false));
+ EXPECT_TRUE(payload != NULL);
- DeleteDoxmBinData(doxm1);
- DeleteDoxmBinData(doxm2);
- OICFree(json);
+ DeleteDoxmBinData(doxm);
+ OICFree(payload);
}
-TEST(JSONToDoxmBinTest, JSONToDoxmBinNullJSON)
+//CBORPayloadToDoxm Tests
+TEST(DoxmResourceTest, CBORPayloadToDoxmNULL)
{
- OicSecDoxm_t *doxm = JSONToDoxmBin(NULL);
- EXPECT_TRUE(doxm == NULL);
+ OicSecDoxm_t *doxm = NULL;
+ uint8_t *cborPayload = (uint8_t *)OICCalloc(1, sizeof(uint8_t));
+ size_t size = 10;
+ ASSERT_TRUE(NULL != cborPayload);
+ EXPECT_EQ(OC_STACK_INVALID_PARAM, CBORPayloadToDoxm(NULL, 0, NULL));
+ EXPECT_EQ(OC_STACK_INVALID_PARAM, CBORPayloadToDoxm(NULL, size, &doxm));
+ EXPECT_EQ(OC_STACK_INVALID_PARAM, CBORPayloadToDoxm(cborPayload, size, NULL));
+ OICFree(cborPayload);
}
-#if 0
-//HandleDoxmPostRequest Test
-TEST(HandleDoxmPostRequestTest, HandleDoxmPostRequestValidInput)
+TEST(DoxmResourceTest, CBORPayloadToDoxmVALID)
{
- OCEntityHandlerRequest ehRequest = {};
- OCServerRequest svRequest = {};
-
- OicSecDoxm_t * doxm = getBinDoxm();
-
- strcpy(svRequest.addressInfo.IP.ipAddress, "10.10.10.10");
- svRequest.addressInfo.IP.port = 2345;
- svRequest.connectivityType = CA_ETHERNET;
-
- ehRequest.reqJSONPayload = (unsigned char *) BinToDoxmJSON(doxm);
- ehRequest.requestHandle = (OCRequestHandle) &svRequest;
-
- EXPECT_EQ(OC_EH_ERROR, HandleDoxmPostRequest(&ehRequest));
+ OicSecDoxm_t *doxm = getBinDoxm();
+ uint8_t *payload = NULL;
+ size_t size = 0;
+ EXPECT_EQ(OC_STACK_OK, DoxmToCBORPayload(doxm, &payload, &size, false));
+ EXPECT_TRUE(payload != NULL);
+
+ OicSecDoxm_t *doxmSec = NULL;
+ EXPECT_EQ(OC_STACK_OK, CBORPayloadToDoxm(payload, size, &doxmSec));
+ ASSERT_TRUE(doxmSec != NULL);
+ EXPECT_EQ(doxmSec->oxmTypeLen, doxm->oxmTypeLen);
+ EXPECT_STREQ(doxmSec->oxmType[0], doxm->oxmType[0]);
+ EXPECT_EQ(doxmSec->oxmLen, doxm->oxmLen);
+ EXPECT_EQ(doxmSec->oxm[0], doxm->oxm[0]);
+ EXPECT_EQ(doxmSec->oxmSel, doxm->oxmSel);
+ EXPECT_EQ(doxmSec->sct, doxm->sct);
+ EXPECT_EQ(doxmSec->owned, doxm->owned);
+
+ DeleteDoxmBinData(doxmSec);
DeleteDoxmBinData(doxm);
- OICFree(ehRequest.reqJSONPayload);
+ OICFree(payload);
}
-#endif