1 //******************************************************************
3 // Copyright 2015 Samsung Electronics All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21 #include <UnitTestHelper.h>
23 #include <PrimitiveResourceImpl.h>
24 #include <AssertUtils.h>
26 #include <OCResource.h>
27 #include <OCPlatform.h>
29 using namespace OIC::Service;
31 const std::string KEY{ "key" };
36 virtual ~FakeOCResource() {};
38 virtual OCStackResult get(const OC::QueryParamsMap&, OC::GetCallback) = 0;
40 virtual OCStackResult put(
41 const OC::OCRepresentation&, const OC::QueryParamsMap&, OC::PutCallback) = 0;
43 virtual OCStackResult post(
44 const OC::OCRepresentation&, const OC::QueryParamsMap&, OC::PostCallback) = 0;
46 virtual OCStackResult observe(
47 OC::ObserveType, const OC::QueryParamsMap&, OC::ObserveCallback) = 0;
49 virtual OCStackResult cancelObserve() = 0;
51 virtual std::string sid() const = 0;
52 virtual std::string uri() const = 0;
53 virtual std::string host() const = 0;
54 virtual std::vector<std::string> getResourceTypes() const = 0;
55 virtual std::vector<std::string> getResourceInterfaces() const = 0;
57 virtual bool isObservable() const = 0;
60 class PrimitiveResourceTest: public TestWithMock
63 PrimitiveResource::Ptr resource;
64 FakeOCResource* fakeResource;
68 TestWithMock::SetUp();
70 fakeResource = mocks.Mock< FakeOCResource >();
72 resource.reset(new PrimitiveResourceImpl< FakeOCResource >{
73 std::shared_ptr< FakeOCResource >(fakeResource, [](FakeOCResource*) {}) });
77 TEST_F(PrimitiveResourceTest, RequestGetInvokesOCResourceGet)
79 mocks.ExpectCall(fakeResource, FakeOCResource::get).Return(OC_STACK_OK);
81 resource->requestGet(PrimitiveResource::GetCallback());
84 TEST_F(PrimitiveResourceTest, RequestGetThrowsOCResourceGetReturnsNotOK)
86 mocks.OnCall(fakeResource, FakeOCResource::get).Return(OC_STACK_ERROR);
88 ASSERT_THROW(resource->requestGet(PrimitiveResource::GetCallback()), RCSPlatformException);
91 TEST_F(PrimitiveResourceTest, RequestSetInvokesOCResourcePut)
93 mocks.ExpectCall(fakeResource, FakeOCResource::put).Return(OC_STACK_OK);
95 resource->requestSet(RCSResourceAttributes{ }, PrimitiveResource::SetCallback());
98 TEST_F(PrimitiveResourceTest, RequestSetThrowsOCResourcePutReturnsNotOK)
100 mocks.OnCall(fakeResource, FakeOCResource::put).Return(OC_STACK_ERROR);
102 ASSERT_THROW(resource->requestSet(RCSResourceAttributes{ }, PrimitiveResource::SetCallback()),
103 RCSPlatformException);
106 TEST_F(PrimitiveResourceTest, RequestSetPassResourceAttributesToOCResourcePut)
108 constexpr int value{ -200 };
110 RCSResourceAttributes attrs;
112 mocks.ExpectCall(fakeResource, FakeOCResource::put).Match(
113 [](const OC::OCRepresentation& ocRep, const OC::QueryParamsMap&, OC::PutCallback)
115 return ocRep.getValue<int>(KEY) == value;
117 ).Return(OC_STACK_OK);
121 resource->requestSet(attrs, PrimitiveResource::SetCallback());
124 TEST_F(PrimitiveResourceTest, RequestObserveInvokesOCResourceObserve)
126 mocks.ExpectCall(fakeResource, FakeOCResource::observe).Return(OC_STACK_OK);
128 resource->requestObserve(PrimitiveResource::ObserveCallback());
131 TEST_F(PrimitiveResourceTest, RequestObserveThrowsOCResourceObserveReturnsNotOK)
133 mocks.OnCall(fakeResource, FakeOCResource::observe).Return(OC_STACK_ERROR);
135 ASSERT_THROW(resource->requestObserve(PrimitiveResource::ObserveCallback()), RCSPlatformException);
138 TEST_F(PrimitiveResourceTest, DelegteGettersToOCResource)
140 const std::string host{ "host_test_" };
141 const std::string uri{ "uri/test/" };
143 mocks.OnCall(fakeResource, FakeOCResource::isObservable).Return(false);
144 mocks.OnCall(fakeResource, FakeOCResource::host).Return(host);
145 mocks.OnCall(fakeResource, FakeOCResource::uri).Return(uri);
147 ASSERT_FALSE(resource->isObservable());
148 ASSERT_EQ(host, resource->getHost());
149 ASSERT_EQ(uri, resource->getUri());
153 TEST_F(PrimitiveResourceTest, ResponseStatementHasSameValuesWithOCRepresentationReceived)
155 constexpr int errorCode{ 202 };
156 constexpr int value{ 1999 };
158 mocks.OnCall(fakeResource, FakeOCResource::get).Do(
159 [](const OC::QueryParamsMap&, OC::GetCallback cb)
161 OC::OCRepresentation ocRep;
164 cb(OC::HeaderOptions(), ocRep, errorCode);
167 ).Return(OC_STACK_OK);
169 resource->requestGet(
170 [&](const HeaderOptions&, const ResponseStatement& response, int e)
172 ASSERT_EQ(e, errorCode);
173 ASSERT_EQ(response.getAttributes().at(KEY).get<int>(), value);
179 class DiscoverResourceTest: public TestWithMock
182 typedef OCStackResult (*FindResource)(const std::string&, const std::string&,
183 OCConnectivityType, OC::FindCallback);
186 static void discovered(std::shared_ptr< PrimitiveResource >) {}
189 TEST_F(DiscoverResourceTest, CallbackIsInvokedWhenResourceIsDiscovered)
191 mocks.ExpectCallFuncOverload(static_cast<FindResource>(OC::OCPlatform::findResource)).Do(
192 [](const std::string&, const std::string&, OCConnectivityType,
193 OC::FindCallback callback) -> OCStackResult
198 ).Return(OC_STACK_OK);
200 mocks.ExpectCallFunc(discovered);
202 discoverResource("", "", OCConnectivityType{ }, discovered);
205 TEST_F(DiscoverResourceTest, ThrowsdWhenOCPlatformFindResourceReturnsNotOK)
207 mocks.ExpectCallFuncOverload(static_cast<FindResource>(OC::OCPlatform::findResource)).
208 Return(OC_STACK_ERROR);
210 EXPECT_THROW(discoverResource("", "", OCConnectivityType{ }, discovered), RCSPlatformException);