@@ -59,6 +59,13 @@ class VersionedLayerClientGetDataTest : public ::testing::Test {
5959 return " /query/v1/catalogs/" + hrn + " /layers/" + layer + " /partitions" ;
6060 }
6161
62+ std::string GenerateGetDataPath (const std::string& hrn,
63+ const std::string& layer,
64+ const std::string& data_handle) {
65+ return " /blob/v1/catalogs/" + hrn + " /layers/" + layer + " /data/" +
66+ data_handle;
67+ }
68+
6269 std::shared_ptr<olp::client::OlpClientSettings> settings_;
6370 std::shared_ptr<mockserver::MockServerHelper> mock_server_client_;
6471};
@@ -229,4 +236,79 @@ TEST_F(VersionedLayerClientGetDataTest, GetDataWithPartitionIdVersion2) {
229236 EXPECT_TRUE (mock_server_client_->Verify ());
230237}
231238
239+ TEST_F (VersionedLayerClientGetDataTest,
240+ GetDataFromPartitionLatestVersionAsync) {
241+ const olp::client::HRN kHrn (kTestHrn );
242+ const auto kPartitionName = " 269" ;
243+ const std::string tile_data =
244+ mockserver::ReadDefaultResponses::GenerateData ();
245+
246+ auto partition = mockserver::ReadDefaultResponses::GeneratePartitionResponse (
247+ kPartitionName );
248+ auto data_handle = partition.GetDataHandle ();
249+ olp::dataservice::read::model::Partitions partitions;
250+ partitions.SetPartitions ({partition});
251+
252+ {
253+ mock_server_client_->MockAuth ();
254+ mock_server_client_->MockLookupResourceApiResponse (
255+ mockserver::ApiDefaultResponses::GenerateResourceApisResponse (
256+ kTestHrn ));
257+ mock_server_client_->MockGetVersionResponse (
258+ mockserver::ReadDefaultResponses::GenerateVersionResponse (kVersion ));
259+ mock_server_client_->MockGetResponse (
260+ partitions, GenerateGetPartitionsPath (kTestHrn , kLayer ));
261+ mock_server_client_->MockGetResponse (kLayer , data_handle, tile_data);
262+ }
263+
264+ olp::dataservice::read::VersionedLayerClient client (kHrn , kLayer , boost::none,
265+ *settings_);
266+
267+ std::promise<olp::dataservice::read::DataResponse> promise;
268+ std::future<olp::dataservice::read::DataResponse> future =
269+ promise.get_future ();
270+
271+ auto token = client.GetData (
272+ olp::dataservice::read::DataRequest ().WithPartitionId (kPartitionName ),
273+ [&promise](olp::dataservice::read::DataResponse response) {
274+ promise.set_value (response);
275+ });
276+
277+ auto response = future.get ();
278+ auto result = response.GetResult ();
279+
280+ ASSERT_TRUE (response.IsSuccessful ());
281+ ASSERT_EQ (result->size (), tile_data.size ());
282+ EXPECT_TRUE (std::equal (tile_data.begin (), tile_data.end (), result->begin ()));
283+ EXPECT_TRUE (mock_server_client_->Verify ());
284+ }
285+
286+ TEST_F (VersionedLayerClientGetDataTest, GetDataWithInvalidDataHandle) {
287+ const olp::client::HRN kHrn (kTestHrn );
288+ constexpr auto kDataHandle = " invalidDataHandle" ;
289+
290+ {
291+ mock_server_client_->MockAuth ();
292+ mock_server_client_->MockLookupResourceApiResponse (
293+ mockserver::ApiDefaultResponses::GenerateResourceApisResponse (
294+ kTestHrn ));
295+ mock_server_client_->MockGetError (
296+ {olp::http::HttpStatusCode::NOT_FOUND, " Not found" },
297+ GenerateGetDataPath (kTestHrn , kLayer , kDataHandle ));
298+ }
299+
300+ olp::dataservice::read::VersionedLayerClient client (kHrn , kLayer , boost::none,
301+ *settings_);
302+
303+ auto request = olp::dataservice::read::DataRequest ();
304+ request.WithDataHandle (kDataHandle );
305+ auto future = client.GetData (request).GetFuture ();
306+ auto response = future.get ();
307+
308+ ASSERT_FALSE (response.IsSuccessful ());
309+ ASSERT_EQ (olp::http::HttpStatusCode::NOT_FOUND,
310+ response.GetError ().GetHttpStatusCode ());
311+ EXPECT_TRUE (mock_server_client_->Verify ());
312+ }
313+
232314} // namespace
0 commit comments