From 9033a49382875c466d7817aa9e6e9ec07c554281 Mon Sep 17 00:00:00 2001 From: coderhyme Date: Mon, 22 Jun 2015 16:31:05 +0900 Subject: [PATCH] Add PrimitiveResource unit tests Change-Id: If0e88c5572606a963fbc0dc52e1bad1e9e770a1d Signed-off-by: coderhyme Reviewed-on: https://gerrit.iotivity.org/gerrit/1378 Tested-by: jenkins-iotivity Reviewed-by: Uze Choi --- .../unittests/PrimitiveResourceTest.cpp | 177 +++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 service/basis/common/primitiveResource/unittests/PrimitiveResourceTest.cpp diff --git a/service/basis/common/primitiveResource/unittests/PrimitiveResourceTest.cpp b/service/basis/common/primitiveResource/unittests/PrimitiveResourceTest.cpp new file mode 100644 index 0000000..87a7d78 --- /dev/null +++ b/service/basis/common/primitiveResource/unittests/PrimitiveResourceTest.cpp @@ -0,0 +1,177 @@ +//****************************************************************** +// +// Copyright 2015 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 +#include + +#include + +#include + +#include + +using namespace testing; +using namespace OIC::Service; + +const std::string KEY{ "key" }; + +class FakeOCResource +{ +public: + virtual ~FakeOCResource() = default; + + virtual OCStackResult get(const OC::QueryParamsMap&, OC::GetCallback) = 0; + + virtual OCStackResult put( + const OC::OCRepresentation&, const OC::QueryParamsMap&, OC::PutCallback) = 0; + + virtual OCStackResult observe( + OC::ObserveType, const OC::QueryParamsMap&, OC::ObserveCallback) = 0; + + virtual OCStackResult cancelObserve() = 0; + + virtual std::string uri() const = 0; + virtual std::string host() const = 0; + virtual std::vector getResourceTypes() const = 0; + virtual std::vector getResourceInterfaces(void) const = 0; + + virtual bool isObservable() const = 0; +}; + +class PrimitiveResourceTest: public Test +{ +public: + MockRepository mocks; + PrimitiveResource::Ptr resource; + FakeOCResource* fakeResource; + +protected: + void SetUp() override { + fakeResource = mocks.Mock< FakeOCResource >(); + + resource.reset(new PrimitiveResourceImpl< FakeOCResource >{ + std::shared_ptr< FakeOCResource >(fakeResource, [](FakeOCResource*) {}) }); + } + + void TearDown() override { + } +}; + +TEST_F(PrimitiveResourceTest, RequestGetInvokesOCResourceGet) +{ + mocks.ExpectCall(fakeResource, FakeOCResource::get).Return(OC_STACK_OK); + + resource->requestGet(PrimitiveResource::GetCallback()); +} + +TEST_F(PrimitiveResourceTest, RequestGetThrowsOCResourceGetReturnsNotOK) +{ + mocks.OnCall(fakeResource, FakeOCResource::get).Return(OC_STACK_ERROR); + + ASSERT_THROW(resource->requestGet(PrimitiveResource::GetCallback()), PlatformException); +} + +TEST_F(PrimitiveResourceTest, RequestSetInvokesOCResourcePut) +{ + mocks.ExpectCall(fakeResource, FakeOCResource::put).Return(OC_STACK_OK); + + resource->requestSet(ResourceAttributes(), PrimitiveResource::SetCallback()); +} + +TEST_F(PrimitiveResourceTest, RequestSetThrowsOCResourcePutReturnsNotOK) +{ + mocks.OnCall(fakeResource, FakeOCResource::put).Return(OC_STACK_ERROR); + + ASSERT_THROW(resource->requestSet(ResourceAttributes(), PrimitiveResource::SetCallback()), + PlatformException); +} + +TEST_F(PrimitiveResourceTest, RequestSetPassResourceAttributesToOCResourcePut) +{ + constexpr int value{ -200 }; + + ResourceAttributes attrs; + + mocks.ExpectCall(fakeResource, FakeOCResource::put).Match( + [](const OC::OCRepresentation& ocRep, const OC::QueryParamsMap&, OC::PutCallback) + { + return ocRep.getValue(KEY) == value; + } + ).Return(OC_STACK_OK); + + attrs[KEY] = value; + + resource->requestSet(attrs, PrimitiveResource::SetCallback()); +} + +TEST_F(PrimitiveResourceTest, RequestObserveInvokesOCResourceObserve) +{ + mocks.ExpectCall(fakeResource, FakeOCResource::observe).Return(OC_STACK_OK); + + resource->requestObserve(PrimitiveResource::ObserveCallback()); +} + +TEST_F(PrimitiveResourceTest, RequestObserveThrowsOCResourceObserveReturnsNotOK) +{ + mocks.OnCall(fakeResource, FakeOCResource::observe).Return(OC_STACK_ERROR); + + ASSERT_THROW(resource->requestObserve(PrimitiveResource::ObserveCallback()), PlatformException); +} + +TEST_F(PrimitiveResourceTest, DelegteGettersToOCResource) +{ + const std::string host{ "host_test_" }; + const std::string uri{ "uri/test/" }; + + mocks.OnCall(fakeResource, FakeOCResource::isObservable).Return(false); + mocks.OnCall(fakeResource, FakeOCResource::host).Return(host); + mocks.OnCall(fakeResource, FakeOCResource::uri).Return(uri); + + ASSERT_FALSE(resource->isObservable()); + ASSERT_EQ(host, resource->getHost()); + ASSERT_EQ(uri, resource->getUri()); +} + + +TEST_F(PrimitiveResourceTest, ResponseStatementHasSameValuesWithOCRepresentationReceived) +{ + constexpr int errorCode{ 202 }; + constexpr int value{ 1999 }; + + mocks.OnCall(fakeResource, FakeOCResource::get).Do( + [](const OC::QueryParamsMap&, OC::GetCallback cb) + { + OC::OCRepresentation ocRep; + ocRep[KEY] = value; + + cb(OC::HeaderOptions(), ocRep, errorCode); + return OC_STACK_OK; + } + ).Return(OC_STACK_OK); + + resource->requestGet( + [&](const HeaderOptions&, const ResponseStatement& response, int e) + { + ASSERT_EQ(e, errorCode); + ASSERT_EQ(response.getAttributes().at(KEY).get(), value); + } + ); +} + -- 2.7.4