diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index e0e00e0efb20110ef8707d33f179690559a29798..202be86a51476316007757e9dd04ca33b8e275bc 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -79,6 +79,7 @@ add_test_executable(openvds_integration_tests OpenVDS/RequestVolumeSubsetFormat.cpp OpenVDS/DataAccessorClone.cpp OpenVDS/WaitForCompletion.cpp + OpenVDS/RequestCancellation.cpp ) add_test_executable(multithreaded_requests diff --git a/tests/OpenVDS/RequestCancellation.cpp b/tests/OpenVDS/RequestCancellation.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9455328584d87dbbfb57e9144e292ba95112158b --- /dev/null +++ b/tests/OpenVDS/RequestCancellation.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** Copyright 2020 The Open Group +** Copyright 2020 Bluware, Inc. +** +** 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 +#include + +#include "../utils/GenerateVDS.h" +#include "../utils/SlowIOManager.h" + +#include +#include + +TEST(OpenVDS_integration, RequestCancellation) +{ + OpenVDS::InMemoryOpenOptions options; + OpenVDS::Error error; + std::unique_ptr inMemory(new OpenVDS::IOManagerInMemory(options, error)); + SlowIOManager* slowIOManager = new SlowIOManager(50, inMemory.get()); + std::unique_ptr handle(generateSimpleInMemory3DVDS(60,60,60, OpenVDS::VolumeDataChannelDescriptor::Format_U8, OpenVDS::VolumeDataLayoutDescriptor::BrickSize_32, slowIOManager), OpenVDS::Close); + fill3DVDSWithBitNoise(handle.get()); + OpenVDS::VolumeDataLayout *layout = OpenVDS::GetLayout(handle.get()); + OpenVDS::VolumeDataAccessManager *accessManager = OpenVDS::GetAccessManager(handle.get()); + + int32_t minPos[OpenVDS::Dimensionality_Max]; + int32_t maxPos[OpenVDS::Dimensionality_Max]; + int32_t voxelCount; + minPos[0] = 0; minPos[1] = 10; minPos[2] = 10; + maxPos[0] = 50; maxPos[1] = 60; maxPos[2] = 50; + voxelCount = (maxPos[0] - minPos[0]) * (maxPos[1] - minPos[1]) * (maxPos[2] - minPos[2]); + + std::vector bufferFloat; + bufferFloat.resize(voxelCount); + + std::vector requests; + for (int i = 0; i < 10 ; i++) { + int64_t requestFloat = accessManager->RequestVolumeSubset(bufferFloat.data(), layout, OpenVDS::Dimensions_012, 0, + 0, minPos, maxPos, + OpenVDS::VolumeDataChannelDescriptor::Format_R32); + requests.emplace_back(requestFloat); + } + for (auto &req : requests){ + accessManager->Cancel(req); + if (!accessManager->IsCompleted(req)) { + ASSERT_FALSE(accessManager->WaitForCompletion(req)); + ASSERT_TRUE(accessManager->IsCanceled(req)); + ASSERT_FALSE(accessManager->IsCanceled(req)); + } + } +} diff --git a/tests/OpenVDS/RequestVolumeTraces.cpp b/tests/OpenVDS/RequestVolumeTraces.cpp index 5e4680829fc248cad8340e1b92e0b0f93106cef6..1de8335997f9ab25d44fc4dabfb360e9ab21e664 100644 --- a/tests/OpenVDS/RequestVolumeTraces.cpp +++ b/tests/OpenVDS/RequestVolumeTraces.cpp @@ -70,7 +70,17 @@ GTEST_TEST(OpenVDS_integration, SimpleRequestVolumeTraces) } int64_t requestId = accessManager->RequestVolumeTraces(buffer.data(), layout, OpenVDS::Dimensions_012, 0, 0, tracePos, 10, OpenVDS::InterpolationMethod::Nearest, 0); - accessManager->WaitForCompletion(requestId); + + float previousProgress = -1; + while(!accessManager->WaitForCompletion(requestId,1000)){ + ASSERT_FALSE(accessManager->IsCanceled(requestId)); + + float progress = accessManager->GetCompletionFactor(requestId); + if (progress != previousProgress) { + previousProgress = progress; + GTEST_LOG_(INFO) << "Request progress : " << progress * 100. << " %"; + } + } auto pageAccessor = accessManager->CreateVolumeDataPageAccessor(layout, OpenVDS::Dimensions_012, 0, 0, 1000, OpenVDS::VolumeDataAccessManager::AccessMode_ReadOnly); auto valueReader = accessManager->Create3DInterpolatingVolumeDataAccessorR32(pageAccessor, 0.0f, OpenVDS::InterpolationMethod::Nearest); diff --git a/tests/OpenVDS/WaitForCompletion.cpp b/tests/OpenVDS/WaitForCompletion.cpp index 093f321b8ec11caaeb47d18d39b2290f2328c5f3..35045b9ae90f8e9224375746a6ae2adbf02693cf 100644 --- a/tests/OpenVDS/WaitForCompletion.cpp +++ b/tests/OpenVDS/WaitForCompletion.cpp @@ -53,4 +53,5 @@ TEST(WaitForCompletion, waitTimeout) ASSERT_FALSE(accessManager->WaitForCompletion(requestFloat, 1)); ASSERT_TRUE(accessManager->WaitForCompletion(requestFloat, 0)); + ASSERT_FALSE(accessManager->WaitForCompletion(requestFloat, 0)); }