--- /dev/null
+/* ****************************************************************
+ *
+ * Copyright 2020 Samsung Electronics All Rights Reserved.
+ *
+ *
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************/
+#include <gtest/gtest.h>
+#include <stdio.h>
+#include <string.h>
+#include "ocserverrequest.h"
+#include "oickeepalive.h"
+#include "oickeepaliveinternal.h"
+#include "oic_malloc.h"
+#include "oic_string.h"
+#include "oic_time.h"
+#include "ocstackinternal.h"
+#include "ocpayloadcbor.h"
+#include "ocpayload.h"
+#include "ocresourcehandler.h"
+#include "gtest_helper.h"
+
+OCStackApplicationResult callbackFunc(void* ctx,
+ OCDoHandle handle, OCClientResponse * clientResponse)
+{
+
+}
+TEST(KeepAliveInitialiseTest, OCInitializeKeepAlive)
+{
+ EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, OC_SERVER));
+}
+TEST(KeepAliveTerminateTest, OCTerminateKeepAlive)
+{
+ EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, OC_SERVER));
+ EXPECT_EQ(OC_STACK_OK, OCTerminateKeepAlive(OC_SERVER));
+}
+TEST(FindKeepAliveResourceTest, OCFindKeepAliveResource)
+{
+ EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, OC_SERVER));
+ OCDoHandle handle;
+ char *remoteAddr = "coaps+tcp://[fe80::224:54ff:fe98:80d2%25enp6s0]:59384";
+ OCCallbackData cbData;
+ cbData.cb = callbackFunc;
+ EXPECT_EQ(OC_STACK_OK, OCFindKeepAliveResource(&handle, remoteAddr, &cbData));
+}
+TEST(OCHandleKeepAliveResponseTest, OCHandleKeepAliveResponse)
+{
+ EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, OC_SERVER));
+ CAEndpoint_t* tempRep = NULL;
+ CACreateEndpoint(CA_IPV4, CA_ADAPTER_TCP, "127.0.0.1", 5683, &tempRep);
+ OCPayload payload;
+ payload.type = PAYLOAD_TYPE_REPRESENTATION;
+ EXPECT_EQ(OC_STACK_OK, OCHandleKeepAliveResponse(tempRep, &payload));
+}
+TEST(OCProcessKeepAliveTest, OCProcessKeepAlive)
+{
+ EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, OC_SERVER));
+ char query[] = "?rt=core.light";
+ char address[] = "127.0.0.1";
+ OCServerRequest *request;
+ OCResource resource;
+ const char devicename1[] = "device name";
+ OCRepPayload *device = OCRepPayloadCreate();
+ OCRepPayloadAddResourceType(device, "oic.d.tv");
+ OCRepPayloadSetPropString(device, OC_RSRVD_SPEC_VERSION, OC_SPEC_VERSION);
+ OCRepPayloadSetPropInt(device, "in", 0);
+ OCRepPayloadSetPropString(device, "x.org.iotivity.newproperty", "value");
+ size_t dim[MAX_REP_ARRAY_DEPTH] = {1, 0, 0};
+ char **dt = (char **)OICMalloc(sizeof(char *) * 1);
+ dt[0] = OICStrdup(OC_DATA_MODEL_VERSION);
+ OCRepPayloadSetStringArray(device, OC_RSRVD_DATA_MODEL_VERSION, (const char **)dt, dim);
+ OICFree(dt[0]);
+ OICFree(dt);
+ uint8_t* cborData;
+ size_t cborSize;
+ OCPayload* parsedDevice;
+ OCConvertPayload((OCPayload*)device, &cborData, &cborSize);
+ request = (OCServerRequest *) OICCalloc(1, sizeof(OCServerRequest) +
+ (cborSize ? cborSize : 1) - 1);
+ request->method = OC_REST_PUT;
+ strncpy(request->query, query, sizeof(query));
+ request->devAddr.flags = OC_DEFAULT_FLAGS;
+ request->devAddr.adapter = OC_DEFAULT_ADAPTER;
+ strncpy(request->devAddr.addr, address, sizeof(query));
+ request->devAddr.port = 5364;
+ request->qos = OC_LOW_QOS;
+ request->coapID = 0;
+ request->delayedResNeeded = 0;
+ request->requestId = 0x1234;
+ request->payloadSize = cborSize;
+ memcpy(request->payload, cborData, cborSize);
+ OCHandleKeepAliveRequest(request, &resource);
+ EXPECT_EQ(OC_STACK_OK, OCProcess());
+}
+TEST(HandleKeepAliveGetRequestErrorWithObservation, OCHandleKeepAliveRequest)
+{
+ EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, OC_SERVER));
+ EXPECT_EQ(OC_STACK_OK, OCInitializeKeepAlive(OC_SERVER));
+ char query[] = "?rt=core.light";
+ char address[] = "127.0.0.1";
+ char uri[] = "/oic/ping";
+ OCServerRequest request;
+ request.method = OC_REST_GET;
+ strncpy(request.query, query, sizeof(query)+1);
+ strncpy(request.resourceUrl, uri, 63);
+ request.devAddr.flags = OC_IP_USE_V4;
+ request.devAddr.adapter = OC_ADAPTER_TCP;
+ strncpy(request.devAddr.addr, address, sizeof(query)+1);
+ request.devAddr.port = 5364;
+ request.qos = OC_LOW_QOS;
+ request.coapID = 0;
+ request.delayedResNeeded = 0;
+ request.requestId = 0x1234;
+ request.observationOption = 1;
+ OCResource resource;
+ OCServerRequest *ActualRequest;
+ EXPECT_EQ(OC_STACK_ERROR,OCHandleKeepAliveRequest(&request, &resource));
+}
+TEST(HandleKeepAliveGetRequestWithoutObservation, OCHandleKeepAliveRequest)
+{
+ EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, OC_SERVER));
+ char query[] = "?rt=core.light";
+ char address[] = "127.0.0.1";
+ OCServerRequest request;
+ request.method = OC_REST_GET;
+ strncpy(request.query, query, sizeof(query));
+ request.devAddr.flags = OC_DEFAULT_FLAGS;
+ request.devAddr.adapter = OC_DEFAULT_ADAPTER;
+ strncpy(request.devAddr.addr, address, sizeof(query));
+ request.devAddr.port = 5364;
+ request.qos = OC_LOW_QOS;
+ request.coapID = 0;
+ request.delayedResNeeded = 0;
+ request.observationOption = 6;
+ request.requestId = 0x1234;
+ OCResource resource;
+ EXPECT_EQ(OC_STACK_ERROR, OCHandleKeepAliveRequest(&request, &resource));
+}
+TEST(HandleKeepAlivePutRequestError, OCHandleKeepAliveRequest)
+{
+
+ EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, OC_SERVER));
+ char query[] = "?rt=core.light";
+ char address[] = "127.0.0.1";
+ OCServerRequest *request;
+ OCResource resource;
+ const char devicename1[] = "device name";
+ OCRepPayload *device = OCRepPayloadCreate();
+ OCRepPayloadAddResourceType(device, "oic.d.tv");
+ OCRepPayloadSetPropString(device, OC_RSRVD_SPEC_VERSION, OC_SPEC_VERSION);
+ OCRepPayloadSetPropInt(device, "in", 0);
+ OCRepPayloadSetPropString(device, "x.org.iotivity.newproperty", "value");
+ size_t dim[MAX_REP_ARRAY_DEPTH] = {1, 0, 0};
+ char **dt = (char **)OICMalloc(sizeof(char *) * 1);
+ dt[0] = OICStrdup(OC_DATA_MODEL_VERSION);
+ OCRepPayloadSetStringArray(device, OC_RSRVD_DATA_MODEL_VERSION, (const char **)dt, dim);
+ OICFree(dt[0]);
+ OICFree(dt);
+ uint8_t* cborData;
+ size_t cborSize;
+ OCPayload* parsedDevice;
+ OCConvertPayload((OCPayload*)device, &cborData, &cborSize);
+ request = (OCServerRequest *) OICCalloc(1, sizeof(OCServerRequest) +
+ (cborSize ? cborSize : 1) - 1);
+ request->method = OC_REST_PUT;
+ strncpy(request->query, query, sizeof(query));
+ request->devAddr.flags = OC_DEFAULT_FLAGS;
+ request->devAddr.adapter = OC_DEFAULT_ADAPTER;
+ strncpy(request->devAddr.addr, address, sizeof(query));
+ request->devAddr.port = 5364;
+ request->qos = OC_LOW_QOS;
+ request->coapID = 0;
+ request->delayedResNeeded = 0;
+ request->requestId = 0x1234;
+ request->payloadSize = cborSize;
+ memcpy(request->payload, cborData, cborSize);
+ EXPECT_EQ(OC_STACK_ERROR, OCHandleKeepAliveRequest(request, &resource));
+}
+TEST(HandleKeepAliveInvalidRequest, OCHandleKeepAliveRequest)
+{
+ EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, OC_SERVER));
+ char query[] = "?rt=core.light";
+ char address[] = "127.0.0.1";
+ OCServerRequest request;
+ request.method = OC_REST_DELETE;
+ strncpy(request.query, query, sizeof(query));
+ request.devAddr.flags = OC_DEFAULT_FLAGS;
+ request.devAddr.adapter = OC_DEFAULT_ADAPTER;
+ strncpy(request.devAddr.addr, address, sizeof(query));
+ request.devAddr.port = 5364;
+ request.qos = OC_LOW_QOS;
+ request.coapID = 0;
+ request.delayedResNeeded = 0;
+ request.requestId = 0x1234;
+ OCResource resource;
+ EXPECT_EQ(OC_STACK_ERROR, OCHandleKeepAliveRequest(&request,&resource));
+}
+
+TEST(SendKeepAliveRequestTest, OCSendKeepAliveRequest)
+{
+ EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, OC_SERVER));
+ OCDoHandle handle;
+ char *remoteAddr = "coaps+tcp://[fe80::224:54ff:fe98:80d2%25enp6s0]:59384";
+ OCCallbackData cbData;
+ cbData.cd = NULL;
+ OCRepPayload p;
+ p.base.type = PAYLOAD_TYPE_REPRESENTATION;
+ p.uri = NULL;
+ p.types = NULL;
+ p.interfaces = NULL;
+ p.values = NULL;
+ p.next = NULL;
+ OCPayload *payload = (OCPayload*)&p;
+ EXPECT_EQ(OC_STACK_OK, OCSendKeepAliveRequest(&handle, remoteAddr, payload, &cbData));
+}
+TEST(SendKeepAliveRequestTestWithInvalidParam, OCSendKeepAliveRequest)
+{
+ EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, OC_SERVER));
+ OCDoHandle handle;
+ char *remoteAddr = "";
+ OCCallbackData cbData;
+ cbData.cd = NULL;
+ OCRepPayload p;
+ p.base.type = PAYLOAD_TYPE_REPRESENTATION;
+ p.uri = NULL;
+ p.types = NULL;
+ p.interfaces = NULL;
+ p.values = NULL;
+ p.next = NULL;
+ OCPayload *payload = (OCPayload*)&p;
+ EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSendKeepAliveRequest(&handle, remoteAddr, payload, &cbData));
+}
+TEST(SendKeepAliveRequestTestWithoutCallback, OCSendKeepAliveRequest)
+{
+ EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, OC_SERVER));
+ OCDoHandle handle;
+ char *remoteAddr = "coaps://[fe80::224:54ff:fe98:80d2%25enp6s0]:59384";
+ OCCallbackData cbData;
+ cbData.cd = NULL;
+ OCRepPayload p;
+ p.base.type=PAYLOAD_TYPE_REPRESENTATION;
+ p.uri = NULL;
+ p.types = NULL;
+ p.interfaces = NULL;
+ p.values = NULL;
+ p.next = NULL;
+ OCPayload *payload = (OCPayload*)&p;
+ EXPECT_EQ(OC_STACK_ERROR, OCSendKeepAliveRequest(&handle, remoteAddr, payload, &cbData));
+}
+