Skip to content

Commit f76f40a

Browse files
author
Liubov Didkivska
authored
Add prefetch partitions functional test (#1089)
Functional tests to check api compatibility. Update url generator to work with mock server. Relates-To: OLPEDGE-2343 Signed-off-by: Liubov Didkivska <[email protected]>
1 parent 52b77c5 commit f76f40a

File tree

12 files changed

+490
-251
lines changed

12 files changed

+490
-251
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
* Copyright (C) 2020 HERE Europe B.V.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*
16+
* SPDX-License-Identifier: Apache-2.0
17+
* License-Filename: LICENSE
18+
*/
19+
20+
#include <string>
21+
#include <utility>
22+
#include <vector>
23+
24+
#include <olp/core/client/model/Api.h>
25+
#include "ApiDefaultResponses.h"
26+
27+
namespace mockserver {
28+
29+
const std::vector<std::pair<std::string, std::string>>
30+
ApiDefaultResponses::kResourceApis = {
31+
{"blob", "v1"}, {"index", "v1"}, {"ingest", "v1"},
32+
{"metadata", "v1"}, {"notification", "v2"}, {"publish", "v2"},
33+
{"query", "v1"}, {"statistics", "v1"}, {"stream", "v2"},
34+
{"volatile-blob", "v1"}};
35+
const std::vector<std::pair<std::string, std::string>>
36+
ApiDefaultResponses::kPlatformApis = {{"account", "v1"},
37+
{"artifact", "v1"},
38+
{"authentication", "v1"},
39+
{"authorization", "v1"},
40+
{"config", "v1"},
41+
{"consent", "v1"},
42+
{"location-service-registry", "v1"},
43+
{"lookup", "v1"},
44+
{"marketplace", "v2"},
45+
{"pipelines", "v2"}};
46+
47+
olp::client::Apis ApiDefaultResponses::GenerateResourceApisResponse(
48+
std::string catalog) {
49+
return GenerateApisResponse(kResourceApis, catalog);
50+
}
51+
52+
olp::client::Apis ApiDefaultResponses::GeneratePlatformApisResponse() {
53+
return GenerateApisResponse(kPlatformApis);
54+
}
55+
56+
olp::client::Apis ApiDefaultResponses::GenerateApisResponse(
57+
std::vector<std::pair<std::string, std::string>> api_types,
58+
std::string catalog) {
59+
olp::client::Apis apis(api_types.size());
60+
if (!catalog.empty()) {
61+
catalog.insert(0, "/catalogs/");
62+
}
63+
for (size_t i = 0; i < apis.size(); i++) {
64+
apis[i].SetApi(api_types.at(i).first);
65+
apis[i].SetBaseUrl("https://tmp." + api_types.at(i).first +
66+
".data.api.platform.here.com/" + api_types.at(i).first +
67+
"/" + api_types.at(i).second + catalog);
68+
apis[i].SetVersion(api_types.at(i).second);
69+
}
70+
return apis;
71+
}
72+
73+
} // namespace mockserver

tests/common/ApiDefaultResponses.h

Lines changed: 6 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -29,52 +29,16 @@ namespace mockserver {
2929

3030
class ApiDefaultResponses {
3131
public:
32-
static olp::client::Apis GenerateResourceApisResponse(
33-
std::string catalog) {
34-
return GenerateApisResponse({{"blob", "v1"},
35-
{"index", "v1"},
36-
{"ingest", "v1"},
37-
{"metadata", "v1"},
38-
{"notification", "v2"},
39-
{"publish", "v2"},
40-
{"query", "v1"},
41-
{"statistics", "v1"},
42-
{"stream", "v2"},
43-
{"volatile-blob", "v1"}},
44-
catalog);
45-
}
32+
static olp::client::Apis GenerateResourceApisResponse(std::string catalog);
4633

47-
static olp::client::Apis GeneratePlatformApisResponse() {
48-
return GenerateApisResponse({{"account", "v1"},
49-
{"artifact", "v1"},
50-
{"authentication", "v1"},
51-
{"authorization", "v1"},
52-
{"config", "v1"},
53-
{"consent", "v1"},
54-
{"location-service-registry", "v1"},
55-
{"lookup", "v1"},
56-
{"marketplace", "v2"},
57-
{"pipelines", "v2"}});
58-
}
34+
static olp::client::Apis GeneratePlatformApisResponse();
5935

6036
static olp::client::Apis GenerateApisResponse(
6137
std::vector<std::pair<std::string, std::string>> api_types,
62-
std::string catalog = "") {
63-
olp::client::Apis apis(api_types.size());
64-
std::string version = "v1";
65-
if (!catalog.empty()) {
66-
catalog.insert(0, "/catalogs/");
67-
}
68-
for (size_t i = 0; i < apis.size(); i++) {
69-
apis[i].SetApi(api_types.at(i).first);
70-
apis[i].SetBaseUrl("https://tmp." + api_types.at(i).first +
71-
".data.api.platform.here.com/" +
72-
api_types.at(i).first + "/" + api_types.at(i).second +
73-
catalog);
74-
apis[i].SetVersion(api_types.at(i).second);
75-
}
76-
return apis;
77-
}
38+
std::string catalog = "");
39+
40+
static const std::vector<std::pair<std::string, std::string>> kResourceApis;
41+
static const std::vector<std::pair<std::string, std::string>> kPlatformApis;
7842
};
7943

8044
} // namespace mockserver

tests/common/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ set(OLP_SDK_TESTS_COMMON_HEADERS
2929
set(OLP_SDK_TESTS_COMMON_SOURCES
3030
${CMAKE_CURRENT_SOURCE_DIR}/mocks/CacheMock.cpp
3131
${CMAKE_CURRENT_SOURCE_DIR}/mocks/NetworkMock.cpp
32+
${CMAKE_CURRENT_SOURCE_DIR}/ApiDefaultResponses.cpp
3233
${CMAKE_CURRENT_SOURCE_DIR}/ReadDefaultResponses.cpp
3334
${CMAKE_CURRENT_SOURCE_DIR}/PlatformUrlsGenerator.cpp
3435
${CMAKE_CURRENT_SOURCE_DIR}/ResponseGenerator.cpp

tests/common/PlatformUrlsGenerator.cpp

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,19 @@
1919

2020
#include "PlatformUrlsGenerator.h"
2121

22+
#include <utility>
23+
2224
#include <olp/dataservice/read/model/Partitions.h>
2325
#include <olp/dataservice/read/model/VersionResponse.h>
26+
#include "ApiDefaultResponses.h"
2427

2528
PlatformUrlsGenerator::PlatformUrlsGenerator(olp::client::Apis apis,
2629
const std::string& layer)
2730
: apis_(std::make_shared<olp::client::Apis>(apis)), layer_(layer) {}
2831

29-
PlatformUrlsGenerator::PlatformUrlsGenerator(const std::string& endpoint,
30-
const std::string& catalog,
31-
const std::string& layer)
32+
PlatformUrlsGenerator::PlatformUrlsGenerator(const std::string& catalog,
33+
const std::string& layer,
34+
const std::string& endpoint)
3235
: apis_(nullptr),
3336
http_prefix_(endpoint),
3437
catalog_(catalog),
@@ -38,14 +41,28 @@ std::string PlatformUrlsGenerator::PartitionsQuery(
3841
const olp::dataservice::read::PartitionsRequest::PartitionIds& partitions,
3942
uint64_t version) {
4043
std::string path = "/layers/" + layer_ + "/partitions?";
41-
for (const auto& partition : partitions) {
42-
path.append("partition=" + partition + "&");
44+
if (!partitions.empty()) {
45+
for (const auto& partition : partitions) {
46+
path.append("partition=" + partition + "&");
47+
}
48+
path.append("version=" + std::to_string(version));
4349
}
44-
path.append("version=" + std::to_string(version));
45-
4650
return FullPath("query", path);
4751
}
4852

53+
std::string PlatformUrlsGenerator::PartitionsMetadata(
54+
const olp::dataservice::read::PartitionsRequest::PartitionIds& partitions,
55+
uint64_t version) {
56+
std::string path = "/layers/" + layer_ + "/partitions?";
57+
if (!partitions.empty()) {
58+
for (const auto& partition : partitions) {
59+
path.append("partition=" + partition + "&");
60+
}
61+
path.append("version=" + std::to_string(version));
62+
}
63+
return FullPath("metadata", path);
64+
}
65+
4966
std::string PlatformUrlsGenerator::DataBlob(const std::string& data_handle) {
5067
return FullPath("blob", "/layers/" + layer_ + "/data/" + data_handle);
5168
}
@@ -66,7 +83,29 @@ std::string PlatformUrlsGenerator::FullPath(const std::string& service,
6683
const std::string& path) {
6784
std::string url;
6885
if (!apis_) {
69-
url = http_prefix_ + "/catalogs/" + catalog_;
86+
if (http_prefix_.empty()) {
87+
// for mock server used as prefix
88+
auto find_version =
89+
[&](const std::vector<std::pair<std::string, std::string>>& api)
90+
-> std::string {
91+
auto it =
92+
std::find_if(api.begin(), api.end(),
93+
[&](const std::pair<std::string, std::string>& pair) {
94+
return service.compare(pair.first) == 0;
95+
});
96+
if (it != api.end()) {
97+
return it->second;
98+
}
99+
return {};
100+
};
101+
auto v = find_version(mockserver::ApiDefaultResponses::kResourceApis);
102+
if (v.empty()) {
103+
v = find_version(mockserver::ApiDefaultResponses::kPlatformApis);
104+
}
105+
url = "/" + service + "/" + v + "/catalogs/" + catalog_;
106+
} else {
107+
url = http_prefix_ + "/catalogs/" + catalog_;
108+
}
70109
} else {
71110
auto it = find_if(apis_->begin(), apis_->end(), [&](olp::client::Api api) {
72111
return api.GetApi() == service;

tests/common/PlatformUrlsGenerator.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,18 @@ class PlatformUrlsGenerator {
3131
public:
3232
PlatformUrlsGenerator(olp::client::Apis apis, const std::string& layer);
3333

34-
PlatformUrlsGenerator(const std::string& endpoint, const std::string& catalog,
35-
const std::string& layer);
34+
PlatformUrlsGenerator(const std::string& catalog, const std::string& layer,
35+
const std::string& endpoint = "");
3636

3737
std::string PartitionsQuery(
38-
const olp::dataservice::read::PartitionsRequest::PartitionIds& partitions,
39-
uint64_t version);
38+
const olp::dataservice::read::PartitionsRequest::PartitionIds&
39+
partitions = {},
40+
uint64_t version = 1);
41+
42+
std::string PartitionsMetadata(
43+
const olp::dataservice::read::PartitionsRequest::PartitionIds&
44+
partitions = {},
45+
uint64_t version = 1);
4046

4147
std::string DataBlob(const std::string& data_handle);
4248

tests/functional/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ set(OLP_SDK_FUNCTIONAL_TESTS_SOURCES
2525
./olp-cpp-sdk-dataservice-read/VersionedLayerClientProtectTest.cpp
2626
./olp-cpp-sdk-dataservice-read/DataserviceReadVersionedLayerClientTest.cpp
2727
./olp-cpp-sdk-dataservice-read/VersionedLayerClientGetDataTest.cpp
28+
./olp-cpp-sdk-dataservice-read/VersionedLayerTestBase.cpp
2829
./olp-cpp-sdk-dataservice-read/DataserviceReadVolatileLayerClientTest.cpp
2930
./olp-cpp-sdk-dataservice-write/DataserviceWriteIndexLayerClientTest.cpp
3031
./olp-cpp-sdk-dataservice-write/DataserviceWriteStreamLayerClientCacheTest.cpp

0 commit comments

Comments
 (0)