#include "RCSResourceObject.h"
#include "RCSRemoteResourceObject.h"
#include "OCPlatform.h"
+#include "RCSDiscoveryManager.h"
+#include "RCSAddress.h"
using namespace std;
using namespace OIC::Service;
static int lightNum = 0;
+SceneList* g_sceneList = SceneList::getInstance();
+RCSRemoteResourceObject::Ptr pListResource = nullptr;
+RemoteSceneList::Ptr pSceneList = nullptr;
+RemoteSceneCollection::Ptr pSceneCollection = nullptr;
+RemoteScene::Ptr pScene = nullptr;
+RemoteSceneAction::Ptr pSceneAction = nullptr;
+RCSRemoteResourceObject::Ptr pLightResource = nullptr;
+
+void discoverSceneListServer()
+{
+ if(pListResource == nullptr)
+ {
+ std::vector< std::string > vecRT{ SCENE_LIST_RT };
+ std::vector< std::string > vecIF{ OC_RSRVD_INTERFACE_DEFAULT, OC::BATCH_INTERFACE };
+
+ pListResource = SceneUtils::createRCSResourceObject(
+ "coap://" + SceneUtils::getNetAddress() + SCENE_LIST_URI,
+ SCENE_CONNECTIVITY, vecRT, vecIF);
+ }
+}
+
class RemoteSceneTest : public TestWithMock
{
protected:
TestWithMock::SetUp();
executionSucceeded = false;
- SceneList::getInstance()->getName();
- createListServer();
+ g_sceneList->getName();
+ discoverSceneListServer();
- RemoteSceneList::createInstance(pListResource, std::bind(
- &RemoteSceneTest::onRemoteSceneListCreated, this,
- placeholders::_1, placeholders::_2));
+ if(pSceneList == nullptr)
+ {
+ RemoteSceneList::createInstance(pListResource, std::bind(
+ &RemoteSceneTest::onRemoteSceneListCreated, this,
+ placeholders::_1, placeholders::_2));
- waitForCallback();
+ waitForCallback();
+ }
- pSceneList->addNewSceneCollection(std::bind(
- &RemoteSceneTest::onRemoteSceneCollectionCreated, this,
- placeholders::_1, placeholders::_2));
-
- waitForCallback();
+ if(pSceneCollection == nullptr)
+ {
+ pSceneList->addNewSceneCollection(std::bind(
+ &RemoteSceneTest::onRemoteSceneCollectionCreated, this,
+ placeholders::_1, placeholders::_2));
- pSceneCollection->addNewScene("Default", std::bind(
- &RemoteSceneTest::onRemoteSceneCreated, this,
- placeholders::_1, placeholders::_2));
-
- waitForCallback();
- }
-
- void createListServer()
- {
- std::vector< std::string > vecRT{ SCENE_LIST_RT };
- std::vector< std::string > vecIF{ OC_RSRVD_INTERFACE_DEFAULT, OC::BATCH_INTERFACE };
-
- pListResource = SceneUtils::createRCSResourceObject(
- "coap://" + SceneUtils::getNetAddress() + SCENE_LIST_URI,
- SCENE_CONNECTIVITY, vecRT, vecIF);
+ waitForCallback();
+ }
}
void createLightServer()
{
+ if(pLightResource != nullptr)
+ {
+ return ;
+ }
+
RCSResourceObject::Ptr pResource = RCSResourceObject::Builder(
RESOURCE_URI, RESOURCE_TYPE, DEFAULT_INTERFACE).build();
pResource->setAttribute(KEY, RCSResourceAttributes::Value(VALUE));
= SceneUtils::createRCSResourceObject(
"coap://" + SceneUtils::getNetAddress() + RESOURCE_URI
+ "/" + std::to_string(lightNum++),
- SCENE_CONNECTIVITY, pResource->getTypes(), pResource->getInterfaces());
+ (OCConnectivityType)(CT_ADAPTER_IP|CT_IP_USE_V4),
+ pResource->getTypes(), pResource->getInterfaces());
+
}
void waitForCallback(int waitingTime = DEFAULT_WAITTIME)
}
public:
- RCSRemoteResourceObject::Ptr pListResource;
- RemoteSceneList::Ptr pSceneList;
- RemoteSceneCollection::Ptr pSceneCollection;
- RemoteScene::Ptr pScene;
- RCSRemoteResourceObject::Ptr pLightResource;
bool executionSucceeded;
std::condition_variable cond;
std::mutex mutex;
TEST_F(RemoteSceneTest, addNewRemoteScene)
{
- pSceneCollection->addNewScene("Test Scene", std::bind(
- &RemoteSceneTest::onRemoteSceneCreated, this,
- placeholders::_1, placeholders::_2));
-
- waitForCallback();
+ if(pScene == nullptr)
+ {
+ pSceneCollection->addNewScene("Test Scene", std::bind(
+ &RemoteSceneTest::onRemoteSceneCreated, this,
+ placeholders::_1, placeholders::_2));
+ waitForCallback();
+ }
ASSERT_NE(nullptr, pScene);
ASSERT_EQ("Test Scene", pScene->getName());
TEST_F(RemoteSceneTest, getRemoteSceneBySceneName)
{
- pSceneCollection->addNewScene("Test Scene", std::bind(
- &RemoteSceneTest::onRemoteSceneCreated, this,
- placeholders::_1, placeholders::_2));
-
- waitForCallback();
+ if(pScene == nullptr)
+ {
+ pSceneCollection->addNewScene("Test Scene", std::bind(
+ &RemoteSceneTest::onRemoteSceneCreated, this,
+ placeholders::_1, placeholders::_2));
+ waitForCallback();
+ }
auto scene = pSceneCollection->getRemoteScene("Test Scene");
TEST_F(RemoteSceneTest, getAllRemoteScenes)
{
- pSceneCollection->addNewScene("Test Scene", std::bind(
- &RemoteSceneTest::onRemoteSceneCreated, this,
- placeholders::_1, placeholders::_2));
-
- waitForCallback();
+ if(pScene == nullptr)
+ {
+ pSceneCollection->addNewScene("Test Scene", std::bind(
+ &RemoteSceneTest::onRemoteSceneCreated, this,
+ placeholders::_1, placeholders::_2));
+ waitForCallback();
+ }
auto scenes = pSceneCollection->getRemoteScenes();
- ASSERT_EQ((unsigned int)2, scenes.size());
+ ASSERT_EQ((unsigned int)1, scenes.size());
ASSERT_NE(scenes.end(), scenes.find("Test Scene"));
}
{
createLightServer();
- pScene->addNewSceneAction(pLightResource, KEY, RCSResourceAttributes::Value(VALUE),
- std::bind(&RemoteSceneTest::onRemoteSceneActionCreated, this,
- placeholders::_1, placeholders::_2));
-
- waitForCallback();
+ if(pSceneAction == nullptr)
+ {
+ pScene->addNewSceneAction(pLightResource, KEY, RCSResourceAttributes::Value(VALUE),
+ std::bind(&RemoteSceneTest::onRemoteSceneActionCreated, this,
+ placeholders::_1, placeholders::_2));
+ waitForCallback();
+ }
pScene->execute(std::bind(
&RemoteSceneTest::onRemoteSceneExecuted, this, placeholders::_1, placeholders::_2));