#include "UnitTestHelper.h"
+#include "OCResource.h"
+
#include "RCSRemoteResourceObject.h"
#include "RCSDiscoveryManager.h"
#include "RCSResourceObject.h"
#include "RCSAddress.h"
+#include "RCSRequest.h"
#include <condition_variable>
#include <mutex>
void getRemoteAttributesCallback(const RCSResourceAttributes&, int) {}
void setRemoteAttributesCallback(const RCSResourceAttributes&, int) {}
+void setRemoteRepresentationCallback(const HeaderOpts&, const RCSRepresentation&, int) {}
void resourceStateChanged(ResourceState) { }
-void cacheUpdatedCallback(const RCSResourceAttributes&) {}
+void cacheUpdatedCallback(const RCSResourceAttributes&, int) {}
class RemoteResourceObjectTest: public TestWithMock
{
{
for (int i=0; i<10 && !object; ++i)
{
- const std::string uri = "/oic/res";
auto discoveryTask = RCSDiscoveryManager::getInstance()->discoverResourceByType(
- RCSAddress::multicast(), uri, RESOURCETYPE,
+ RCSAddress::multicast(), RESOURCETYPE,
std::bind(&RemoteResourceObjectTest::resourceDiscovered, this,
std::placeholders::_1));
Wait(1000);
+ discoveryTask->cancel();
}
}
object->setRemoteAttributes(newAttrs, setRemoteAttributesCallback);
Wait();
- ASSERT_EQ(newValue, server->getAttributeValue(ATTR_KEY));
+ ASSERT_EQ(newValue, server->getAttributeValue(ATTR_KEY).get<int>());
+}
+
+TEST_F(RemoteResourceObjectTest, SetRemoteRepresentationDoesNotAllowEmptyFunction)
+{
+ RCSQueryParams queryParams;
+ RCSRepresentation rcsRep;
+ ASSERT_THROW(object->set(queryParams, rcsRep, {}), RCSInvalidParameterException);
+}
+
+TEST_F(RemoteResourceObjectTest, SetRemoteRepresentationSetsRepresentationOfServer)
+{
+ RCSRepresentation rcsRep;
+ RCSQueryParams queryParams;
+ constexpr int newValue = ATTR_VALUE + 1;
+ RCSResourceAttributes newAttrs;
+ newAttrs[ATTR_KEY] = newValue;
+
+ rcsRep.setAttributes(newAttrs);
+
+ mocks.ExpectCallFunc(setRemoteRepresentationCallback).
+ Do([this](const HeaderOpts&, const RCSRepresentation&, int){ Proceed(); });
+
+ object->set(queryParams, rcsRep, setRemoteRepresentationCallback);
+ Wait();
+
+ ASSERT_EQ(newValue, server->getAttributeValue(ATTR_KEY).get<int>());
+}
+
+TEST_F(RemoteResourceObjectTest, QueryParamsForGetWillBePassedToBase)
+{
+ class CustomHandler
+ {
+ public:
+ virtual RCSGetResponse handle(const RCSRequest&, RCSResourceAttributes&) = 0;
+ virtual ~CustomHandler() {}
+ };
+
+ constexpr char PARAM_KEY[] { "aKey" };
+ constexpr char VALUE[] { "value" };
+
+ object->get(RCSQueryParams().setResourceInterface(RESOURCEINTERFACE).setResourceType(RESOURCETYPE).
+ put(PARAM_KEY, VALUE),
+ [](const HeaderOpts&, const RCSRepresentation&, int){});
+
+ auto mockHandler = mocks.Mock< CustomHandler >();
+
+ mocks.ExpectCall(mockHandler, CustomHandler::handle).
+ Match([](const RCSRequest& request, RCSResourceAttributes&)
+ {
+ return request.getInterface() == RESOURCEINTERFACE &&
+ request.getQueryParams().at(PARAM_KEY) == VALUE;
+ }
+ ).
+ Do([this](const RCSRequest&, RCSResourceAttributes&)
+ {
+ Proceed();
+ return RCSGetResponse::defaultAction();
+ }
+ );
+
+ server->setGetRequestHandler(std::bind(&CustomHandler::handle, mockHandler,
+ std::placeholders::_1, std::placeholders::_2));
+
+ Wait();
}
TEST_F(RemoteResourceObjectTest, MonitoringIsNotStartedByDefault)
TEST_F(RemoteResourceObjectTest, CacheStateIsReadyAfterCacheUpdated)
{
mocks.ExpectCallFunc(cacheUpdatedCallback).
- Do([this](const RCSResourceAttributes&){ Proceed(); });
+ Do([this](const RCSResourceAttributes&, int){ Proceed(); });
object->startCaching(cacheUpdatedCallback);
Wait();
TEST_F(RemoteResourceObjectTest, IsCachedAvailableReturnsTrueWhenCacheIsReady)
{
mocks.ExpectCallFunc(cacheUpdatedCallback).
- Do([this](const RCSResourceAttributes&){ Proceed(); });
+ Do([this](const RCSResourceAttributes&, int){ Proceed(); });
object->startCaching(cacheUpdatedCallback);
Wait();
TEST_F(RemoteResourceObjectTest, DISABLED_CacheUpdatedCallbackBeCalledWheneverCacheUpdated)
{
mocks.OnCallFunc(cacheUpdatedCallback).
- Do([this](const RCSResourceAttributes&){ Proceed(); });
+ Do([this](const RCSResourceAttributes&, int){ Proceed(); });
object->startCaching(cacheUpdatedCallback);
Wait();
mocks.ExpectCallFunc(cacheUpdatedCallback).
- Do([this](const RCSResourceAttributes&){ Proceed(); });
+ Do([this](const RCSResourceAttributes&, int){ Proceed(); });
server->setAttribute(ATTR_KEY, ATTR_VALUE + 1);
constexpr int newValue = ATTR_VALUE + 1;
mocks.OnCallFunc(cacheUpdatedCallback).
- Do([this](const RCSResourceAttributes&){ Proceed(); });
+ Do([this](const RCSResourceAttributes&, int){ Proceed(); });
object->startCaching(cacheUpdatedCallback);
Wait();
mocks.ExpectCallFunc(cacheUpdatedCallback).
- Match([this](const RCSResourceAttributes& attrs){
+ Match([this](const RCSResourceAttributes& attrs, int){
return attrs.at(ATTR_KEY) == newValue;
}).
- Do([this](const RCSResourceAttributes&){ Proceed(); });
+ Do([this](const RCSResourceAttributes&, int){ Proceed(); });
server->setAttribute(ATTR_KEY, newValue);
TEST_F(RemoteResourceObjectTest, CachedAttributesHasSameAttributesWithServer)
{
mocks.OnCallFunc(cacheUpdatedCallback).
- Do([this](const RCSResourceAttributes&){ Proceed(); });
+ Do([this](const RCSResourceAttributes&, int){ Proceed(); });
object->startCaching(cacheUpdatedCallback);
Wait();
TEST_F(RemoteResourceObjectTest, GetCachedAttributeThrowsIfKeyIsInvalid)
{
mocks.OnCallFunc(cacheUpdatedCallback).
- Do([this](const RCSResourceAttributes&){ Proceed(); });
+ Do([this](const RCSResourceAttributes&, int){ Proceed(); });
object->startCaching(cacheUpdatedCallback);
Wait();
EXPECT_EQ(RESOURCEINTERFACE, object->getInterfaces()[0]);
}
+TEST_F(RemoteResourceObjectTest, GetValidOCResourceTest)
+{
+ std::shared_ptr<OC::OCResource> ocRes = RCSRemoteResourceObject::toOCResource(object);
+
+ EXPECT_NE(nullptr, ocRes);
+
+ EXPECT_EQ(RESOURCEURI, ocRes->uri());
+}
+